GRANT <privileges>
此语句用于为 TiDB 中已存在的用户分配权限。TiDB 的权限系统遵循 MySQL 的设计,其中凭据是基于数据库/表的模式进行分配。执行此语句需要拥有 GRANT OPTION 权限以及你所分配的所有权限。
概述
- GrantStmt
- PrivElemList
- PrivElem
- PrivType
- ObjectType
- PrivLevel
- UserSpecList
- RequireClauseOpt
- RequireListElement
示例
mysql> CREATE USER 'newuser' IDENTIFIED BY 'mypassword';
Query OK, 1 row affected (0.02 sec)
mysql> GRANT ALL ON test.* TO 'newuser';
Query OK, 0 rows affected (0.03 sec)
mysql> SHOW GRANTS FOR 'newuser';
+-------------------------------------------------+
| Grants for newuser@% |
+-------------------------------------------------+
| GRANT USAGE ON *.* TO 'newuser'@'%' |
| GRANT ALL PRIVILEGES ON test.* TO 'newuser'@'%' |
+-------------------------------------------------+
2 rows in set (0.00 sec)MySQL 兼容性
- 类似于 MySQL,
USAGE权限表示登录 TiDB 服务器的能力。 - 从 v8.5.6 开始,TiDB 支持与 MySQL 兼容的列级权限管理机制。你可以对指定表中的特定列授予或撤销
SELECT、INSERT、UPDATE和REFERENCES权限。更多信息,请参见 列级权限管理。 - 类似于 MySQL,当 sql mode 中没有
NO_AUTO_CREATE_USER时,如果用户不存在,GRANT语句会自动创建一个空密码的新用户。移除此 sql mode(它默认启用)存在安全风险。 - 在 TiDB 中,成功执行
GRANT <privileges>语句后,执行结果会立即在当前连接生效。而 在 MySQL 中,对于某些权限,执行结果只在后续连接中生效。详情请参见 TiDB #39356。