共计 1967 个字符,预计需要花费 5 分钟才能阅读完成。
导读 | 数据安全的最重要措施就是数据库账号的权限管理,通常情况下数据库账号会分配给应用程序、开发人员以及数据库管理员(DBA),还有可能分配给其他需要利用数据进行分析的非技术人员。 |
数据库权限主要是以用户可以允许执行的 SQL 语句来划分,SQL 语言可以分为四类操作:数据查询语言 DQL,数据操纵语言 DML,数据定义语言 DDL,数据控制语言 DCL。
非技术人员通常只能使用 DQL 语句,这也是权限最低的 SQL 操作。数据查询语言的基本结构是由 SELECT 子句、FROM 子句 WHERE 子句构成。
SELECT FROM WHERE
现在很多数据分析人员,都可以熟练使用 SQL 语言进行自定义查询,不再需要技术人员开发报表功能。
对于一般开发人员的权限分配,除了 DQL 以外,还有 DML,也就是要满足增删改查 (CRUD) 的需求。
以下语句就是分别为普通开发人员 zhangsan 分配 MySQL 数据库的增删改查权限,delete 操作要慎重分配。
grant select on testdb.* to zhangsan@’%’grant insert on testdb.* to zhangsan@’%’grant update on testdb.* to zhangsan@’%’grant delete on testdb.* to zhangsan@' %’
对于高级开发人员的权限分配,主要需要数据定义语言 DDL,利用 DDL 语句来创建数据库中的各种对象 —– 表 (Table)、视图(View)、索引(Index) 等。这种操作通常需要由有经验的开发人员来完成。
以下语句实现了通过 grant 语句来分配创建、修改和删除 MySQL 数据表结构的权限。
grant create on testdb.* to lisi@’192.168.0.%’;
grant alter on testdb.* to lisi@’192.168.0.%’;
grant drop on testdb.* to lisi@’192.168.0.%’;
分配创建 MySQL 外键权限。
grant references on testdb.* to lisi@’192.168.0.%’;
分配创建 MySQL 临时表权限。
grant create temporary tables on testdb.* to lisi@’192.168.0.%’;
分配创建 MySQL 索引权限。
grant index on testdb.* to lisi@’192.168.0.%’;
分配创建 MySQL 视图、查看视图源代码权限。
grant create view on testdb.* to lisi@’192.168.0.%’;
grant show view on testdb.* to lisi@’192.168.0.%’;
分配创建 MySQL 存储过程、函数权限。
grant create routine on testdb.* to lisi@’192.168.0.%’; — now, can show procedure status
grant alter routine on testdb.* to lisi@’192.168.0.%’; — now, you can drop a procedure
grant execute on testdb.* to lisi@’192.168.0.%’;
数据控制语言 DCL 用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等,通常这种特殊权限会分配给 DBA 使用。如:
GRANT:授权。
ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。回滚命令使数据库状态回到上次最后提交的状态。
COMMIT [WORK]:提交。
以下语句将 testdb 的所有权限都分配给 dba 账户
grant all privileges on testdb to dba@’localhost’
其中,关键字“privileges”可以省略。
以下语句更厉害,将使得高级 DBA 获得管理 MySQL 中所有数据库的权限。
grant all on *.* to dba@’localhost’
使用 revoke 语句可以撤销已经赋予给 MySQL 用户权限的权限。revoke 跟 grant 的语法差不多,只需要把关键字“to”换成“from”即可:
grant all on *.* to dba@localhost;
revoke all on *.* from dba@localhost;
在使用 grant 或 revoke 语句分配或撤销权限后,该用户只有重新连接 MySQL 数据库,新的权限才能生效。
在数据库权限分配和管理中,应当严格区分账户的用途,并按照最小可用原则分配对应的权限。当账户不再使用以后,应当立即收回权限。