权限管理
权限级别支持情况
- 用户层级(支持)
- 数据库层级(支持)
- 表层级(支持)
- 列层级(暂不支持)
- 子程序层级(暂不支持)
- 全局层级(暂不支持)
权限项
DDM通过GRANT语句授权所支持的权限项如下:
权限类型 |
权限简述 |
---|---|
ALL |
所有权限 |
Drop |
删除table |
Index |
创建/删除index |
Alter |
执行ALTER语句 |
Create |
创建table |
Select |
读取表内容 |
Insert |
插入数据到表 |
Update |
更新表中数据 |
Grant |
授予用户权限 |
Revoke |
删除用户权限 |
Set |
SET用户密码权限 |
File |
从文件加载数据库权限 |
Create User |
创建用户 |
注意事项
- DDM账户的基础权限base_authority只能通过控制台界面来修改。
- DDM账户拥有逻辑库的任意表级权限或者库级权限,控制台界面就会展示已关联该逻辑库。
- Create user只支持用户级权限。
- 删除逻辑库,删除表不会影响DDM账户的grant info权限信息。
- 用grant语法授权给DDM账户,命令如下所示:
grant grant option on {用户级、库级别、表级别} to DDM账户
- 创建的DDM账户必须关联逻辑库才会给该账户赋权。
权限操作
除show grants命令需要3.0.2及以上版本外,其他功能需要2.4.1.4及以上版本。
创建账号(CREATE USER)语句
语法规则:
CREATE USER username IDENTIFIED BY 'auth#string'
示例:创建一个名为Jenny,密码为xxxxxx。
CREATE USER Jenny IDENTIFIED BY 'xxxxxx';
用户名和密码需要满足对应规则。
删除账号(DROP USER)语句
语法规则:
DROP USER username
示例:移除账号Jenny。
DROP USER Jenny;
修改账号密码(SET PASSWORD)语句
语法规则:
SET PASSWORD FOR 'username'@'%' = 'auth_string'
为了兼容MySQL语法用户需要统一写成'username'@'%'格式。
示例:修改账号Jenny的密码为xxxxxx
SET PASSWORD FOR 'Jenny'@'%' = 'xxxxxx'
授权权限(GRANT)语句
GRANT priv_type[, priv_type] ... ON priv_level TO user [auth_option] priv_level: { | *.* | db_name.* | db_name.tbl_name | tbl_name} auth_option: { IDENTIFIED BY 'auth#string' }
GRANT 语句里面的账号如果不存在,同时又没有提供 IDENTIFIED BY 信息,则报账号不存在异常;如果提供了 IDENTIFIED BY 信息,则会创建该账号同时授权。
当前支持使用GRANT ALL [PRIVILEGES]语法授权表级、用户级以及库级所有权限。
示例1:创建一个用户级所有权限的账号。用户名为Mike。
方法1:先创建账号,再授权。
CREATE USER Mike IDENTIFIED BY 'password'; GRANT SELECT, INSERT ON *.* to Mike;
方法2:一条语句完成创建账号和授权两个操作。
GRANT SELECT, INSERT ON *.* to Mike IDENTIFIED BY 'password';
示例2:创建一个数据库级所有权限的账号。在数据库 testdb 下面,创建一个用户名为 david,具有 testdb 数据库SELECT权限的账号。
方法1:先创建账号,再授权。
CREATE USER david IDENTIFIED BY 'password'; GRANT SELECT ON testdb.* to david;
方法2:一条语句完成创建账号和授权两个操作。
GRANT SELECT ON testdb.* to david IDENTIFIED BY 'password';
示例3:创建一个表级别所有权限的账号。在数据库 testdb 下面,创建一个用户名为 hanson,具有 testdb.employees 表所有权限的账号。
GRANT ALL PRIVILEGES ON testdb.employees to hanson IDENTIFIED BY 'password';
回收权限(REVOKE)语句
语法规则:
REVOKE priv_type [, priv_type] ... ON priv_level FROM user;
示例:删除 hanson在 testdb.emp 表的 CREATE、DROP、INDEX 权限。
REVOKE CREATE,DROP,INDEX ON testdb.emp FROM hanson;
删除账号在某个权限级别下的权限项,具体权限级别由 priv_level 指定。
查看授权(SHOW GRANTS)语句
语法规则:
SHOW GRANTS FOR user;
示例1:查看当前用户权限可以使用以下三种方式之一:
SHOW GRANTS; SHOW GRANTS FOR CURRENT_USER; SHOW GRANTS FOR CURRENT_USER();
示例2:查看其他用户权限,只有当前用户具有用户级GRANT权限时才可使用此操作。
mysql> show grants for david; +-----------------------------+ |Grants for david | +-----------------------------+ |GRANT USAGE ON *.* TO david | +-----------------------------+ 1 row in set (0.00 sec)