PingKai Logo下载

GRANT <privileges>

此语句用于为 TiDB 中已存在的用户分配权限。TiDB 的权限系统遵循 MySQL 的设计,其中凭据是基于数据库/表的模式进行分配。执行此语句需要拥有 GRANT OPTION 权限以及你所分配的所有权限。

概述

GrantStmt
GRANT PrivElemList ON ObjectType PrivLevel TO UserSpecList RequireClauseOpt WithGrantOptionOpt
PrivElemList
PrivElem ,
PrivElem
PrivType ( ColumnNameList )
PrivType
ALL PRIVILEGES ALTER ROUTINE CREATE USER TEMPORARY TABLES VIEW ROLE ROUTINE TRIGGER DELETE DROP ROLE PROCESS EXECUTE INDEX INSERT SELECT SUPER SHOW DATABASES VIEW UPDATE GRANT OPTION REFERENCES REPLICATION SLAVE CLIENT USAGE RELOAD FILE CONFIG LOCK TABLES EVENT SHUTDOWN
ObjectType
TABLE
PrivLevel
* . * Identifier . * Identifier
UserSpecList
UserSpec ,
RequireClauseOpt
REQUIRE NONE SSL X509 RequireListElement AND
RequireListElement
ISSUER Issuer SUBJECT Subject CIPHER Cipher SAN SAN TOKEN_ISSUER TokenIssuer

示例

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。

相关链接