权限管理
TiDB 的权限管理系统按照 MySQL 的权限管理进行实现,TiDB 支持大部分的 MySQL 的语法和权限类型。
本文档主要介绍 TiDB 权限相关操作、各项操作需要的权限以及权限系统的实现。
权限相关操作
授予权限
授予 xxx 用户对数据库 test 的读权限:Copy
GRANT SELECT ON test.* TO 'xxx'@'%';
为 xxx 用户授予所有数据库,全部权限:Copy
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
GRANT 为一个不存在的用户授予权限时,默认并不会自动创建用户。该行为受 SQL Mode 中的 NO_AUTO_CREATE_USER 控制。
如果从 SQL Mode 中去掉 NO_AUTO_CREATE_USER,当 GRANT 的目标用户不存在时,TiDB 会自动创建用户。Copy
select @@sql_mode;
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)Copy
set @@sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
Query OK, 0 rows affected (0.00 sec)Copy
SELECT * FROM mysql.user WHERE user='xxxx';
Empty set (0.00 sec)Copy
GRANT ALL PRIVILEGES ON test.* TO 'xxxx'@'%' IDENTIFIED BY 'yyyyy';
Query OK, 0 rows affected (0.00 sec)Copy
SELECT user,host FROM mysql.user WHERE user='xxxx';
+------|------+
| user | host |
+------|------+
| xxxx | % |
+------|------+
1 row in set (0.00 sec)
上述示例中,xxxx@% 即自动添加的用户。
GRANT 还可以模糊匹配地授予用户数据库的权限:Copy
GRANT ALL PRIVILEGES ON `te%`.* TO genius;
Query OK, 0 rows affected (0.00 sec)Copy
SELECT user,host,db FROM mysql.db WHERE user='genius';
+--------|------|-