更新时间:2024-04-01 GMT+08:00

权限管理

权限级别支持情况

  • 用户层级(支持)
  • 数据库层级(支持)
  • 表层级(支持)
  • 列层级(暂不支持)
  • 子程序层级(暂不支持)
  • 全局层级(暂不支持)

权限项

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)