账号权限管理

本文介绍了账号权限管理的相关操作。

PolarDB-X账号和权限系统的用法与MySQL 5.7一致,支持GRANT、REVOKE、SHOW GRANTS、CREATE USER、DROP USER、SET PASSWORD等语句。目前支持库级和表级权限的授予,全局级别和列级别权限暂时不支持。

创建账号

语法

CREATE USER [IF NOT EXISTS] user IDENTIFIED BY 'password';

参数说明

参数user为通过用户名和主机名的组合确定的账号,格式为'username'@'host',账号规则如下:

  • username为创建的用户名,用户名遵循以下规则:

    • 大小写敏感;

    • 长度必须大于等于4个字符,小于等于20个字符;

    • 必须以字母开头;

    • 字符可以包括大写字母、小写字母、数字。

  • host指定了创建的用户可以在哪台主机上登录,用户名一样但是主机名不一样也代表不同的账号,账号规则如下:

    • host必须是纯IP地址,可以包含_和%通配符。含有通配符的host需要加上单引号,例如lily@'30.9.%.%',david@'%';

      说明

      _代表一个字符,%代表0个或多个字符。

    • 假设系统中有两个用户都符合当前准备登录的用户,则以最长前缀匹配(不包含通配符的最长IP段)的那个用户为准。例如系统有两个用户david@'30.9.12_.234'和david@'30.9.1%.234',在主机30.9.127.234上面登录david,则使用的是david@'30.9.12_.234'这个用户;

    • 开启VPC时,主机的IP地址会发生变化。为避免账号和权限系统中的配置无效,请将HOST配置为‘%’来匹配任意IP。

  • 参数password为用户密码,需满足以下规则:

    • 长度必须大于等于6个字符,小于等于20个字符;

    • 字符可以包括大写字母、小写字母、数字、特殊字符(@#$%^&+=)。

示例

CREATE USER 'user1'@'127.0.0.1' IDENTIFIED BY '123456';

CREATE USER IF NOT EXISTS 'user2'@'%' identified by '123456';

修改账号密码

语法

SET PASSWORD FOR user = PASSWORD('auth_string')

示例

SET PASSWORD FOR 'user1'@'127.0.0.1' = PASSWORD('654321');
说明

不支持使用SQL语句修改高权限账号的密码。

删除账号

语法

DROP USER user;

示例

DROP USER 'user2'@'%';
说明

不支持使用SQL语句删除高权限账号。

授予账号权限

语法

GRANT privileges ON database.table TO user;

参数说明

其中,参数privileges为具体权限类型,数据库权限级别从高到低依次是:全局级别(暂不支持)、数据库级、表级和列级别权限。PolarDB-X目前支持和表相关联的8个基本权限项:CREATE、DROP、ALTER、INDEX、INSERT、DELETE、UPDATE、SELECT。

  • TRUNCATE操作需要有表上的DROP权限;

  • REPLACE操作需要有表上的INSERT和DELETE权限;

  • CREATE INDEX 和 DROP INDEX操作需要有表上的INDEX权限;

  • CREATE SEQUENCE需要有数据库级的创建表(CREATE)权限;

  • DROP SEQUENCE需要有数据库级的删除表(DROP)权限;

  • ALTER SEQUENCE需要有数据库级的更改表(ALTER)权限;

  • INSERT ON DUPLICATE UPDATE语句需要有表上的INSERT和UPDATE权限。

示例

GRANT SELECT,UPDATE ON `db1`.* TO 'user1'@'127.0.0.1';
说明

不支持使用SQL语句对高权限账号进行授权。

查看账号权限

语法

SHOW GRANTS [FOR user];
说明

可以使用current_user()来获取当前用户。

示例

SHOW GRANTS FOR 'user1'@'127.0.0.1';
+------------------------------------------------------+
| GRANTS FOR 'USER1'@'127.0.0.1'                       |
+------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'127.0.0.1'            |
| GRANT SELECT, UPDATE ON db1.* TO 'user1'@'127.0.0.1' |
+------------------------------------------------------+

SHOW GRANTS FOR current_user();
+------------------------------------------------------+
| GRANTS FOR 'USER1'@'127.0.0.1'                       |
+------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'127.0.0.1'            |
| GRANT SELECT, UPDATE ON db1.* TO 'user1'@'127.0.0.1' |
+------------------------------------------------------+

回收账号权限

语法

REVOKE privileges ON database.table FROM user;

示例

REVOKE UPDATE ON db1.* FROM 'user1'@'127.0.0.1';

SHOW GRANTS FOR 'user1'@'127.0.0.1';
+----------------------------------------------+
| GRANTS FOR 'USER1'@'127.0.0.1'               |
+----------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'127.0.0.1'    |
| GRANT SELECT ON db1.* TO 'user1'@'127.0.0.1' |
+----------------------------------------------+
说明

不支持使用SQL语句对高权限账号进行回收。