更新时间:2022-05-11 GMT+08:00
分享

权限管理

权限级别支持情况

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

权限项

DDM通过GRANT语句授权所支持的权限项如下:

权限类型

权限简述

ALL

所有权限

Drop

删除 table

Index

创建/删除 index

Alter

执行 ALTER 语句

Create

创建 table

Select

读取表内容

Insert

插入数据到表

Update

更新表中数据

Grant

授予用户权限

Revoke

删除用户权限

Set

SET用户密码权限

File

从文件加载数据库权限

Create User

创建用户

权限操作

除show grants命令需要3.0.2及以上版本外,其他功能需要2.4.1.4及以上版本。

创建账号(CREATE USER)语句

语法规则:

CREATE USER username IDENTIFIED BY 'auth#string'

示例:创建一个名为Jenny,密码为Abc_123456。

CREATE USER Jenny IDENTIFIED BY 'Abc_123456';

用户名和密码需要满足对应规则。

删除账号(DROP USER)语句

语法规则:

DROP USER username

示例:移除账号Jenny

DROP USER Jenny;

修改账号密码(SET PASSWORD)语句

语法规则:

SET PASSWORD FOR 'username'@'%' = 'auth_string'

为了兼容MySQL语法用户需要统一写成'username'@'%'格式。

示例:修改账号Jenny的密码为Abc_1234567

SET PASSWORD FOR 'Jenny'@'%' = 'Abc_1234567'

授权权限(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]语法授权表级所有权限,而不支持使用GRANT ALL [PRIVILEGES]语法授权用户级或库级所有权限。

示例1:创建一个用户级所有权限的账号。用户名为Mike。

方法1:先创建账号,再授权。

CREATE USER Mike IDENTIFIED BY 'your#password';
GRANT SELECT, INSERT ON *.* to Mike;

方法2:一条语句完成创建账号和授权两个操作。

GRANT SELECT, INSERT ON *.* to Mike IDENTIFIED BY 'your#password';

示例2:创建一个数据库级所有权限的账号。在数据库 testdb 下面,创建一个用户名为 david,具有 testdb 数据库SELECT权限的账号。

方法1:先创建账号,再授权。

CREATE USER david IDENTIFIED BY 'your#password';
GRANT SELECT ON testdb.* to david;

方法2:一条语句完成创建账号和授权两个操作。

GRANT SELECT ON testdb.* to david IDENTIFIED BY 'your#password';

示例3:创建一个表级别所有权限的账号。在数据库 testdb 下面,创建一个用户名为 hanson,具有 testdb.employees 表所有权限的账号。

GRANT  ALL PRIVILEGES ON testdb.employees to hanson IDENTIFIED BY 'your#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)
分享:

    相关文档

    相关产品

close