ALTER USER
该语句用于更改 TiDB 权限系统中的已有用户。在 MySQL 权限系统中,用户是用户名和其连接主机的组合。因此,可以创建一个只能从 IP 地址 192.168.1.1 连接的用户 'newuser2'@'192.168.1.1'。也可以让两个用户拥有相同的用户名部分,但由于他们从不同主机登录,拥有不同的权限。
语法
- AlterUserStmt
- UserSpecList
- UserSpec
- Username
- AuthOption
- ConnectionOptions
- PasswordOption
- LockOption
- AttributeOption
- ResourceGroupNameOption
- RequireClauseOpt
- RequireListElement
示例
mysql> CREATE USER 'newuser' IDENTIFIED BY 'newuserpassword';
Query OK, 1 row affected (0.01 sec)
mysql> SHOW CREATE USER 'newuser';
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| CREATE USER for newuser@% |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| CREATE USER 'newuser'@'%' IDENTIFIED WITH 'mysql_native_password' AS '*5806E04BBEE79E1899964C6A04D68BCA69B1A879' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)修改基础用户信息
为用户 newuser 修改密码:
mysql> ALTER USER 'newuser' IDENTIFIED BY 'newnewpassword';
Query OK, 0 rows affected (0.02 sec)
mysql> SHOW CREATE USER 'newuser';
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| CREATE USER for newuser@% |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| CREATE USER 'newuser'@'%' IDENTIFIED WITH 'mysql_native_password' AS '*FB8A1EA1353E8775CA836233E367FBDFCB37BE73' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)锁定用户 newuser:
ALTER USER 'newuser' ACCOUNT LOCK;Query OK, 0 rows affected (0.02 sec)修改 newuser 的属性:
ALTER USER 'newuser' ATTRIBUTE '{"newAttr": "value", "deprecatedAttr": null}';
SELECT * FROM information_schema.user_attributes;+-----------+------+--------------------------+
| USER | HOST | ATTRIBUTE |
+-----------+------+--------------------------+
| newuser | % | {"newAttr": "value"} |
+-----------+------+--------------------------+
1 rows in set (0.00 sec)使用 ALTER USER ... COMMENT 修改 newuser 的注释:
ALTER USER 'newuser' COMMENT 'Here is the comment';
SELECT * FROM information_schema.user_attributes;+-----------+------+--------------------------------------------------------+
| USER | HOST | ATTRIBUTE |
+-----------+------+--------------------------------------------------------+
| newuser | % | {"comment": "Here is the comment", "newAttr": "value"} |
+-----------+------+--------------------------------------------------------+
1 rows in set (0.00 sec)使用 ALTER USER ... ATTRIBUTE 移除 newuser 的注释:
ALTER USER 'newuser' ATTRIBUTE '{"comment": null}';
SELECT * FROM information_schema.user_attributes;+-----------+------+---------------------------+
| USER | HOST | ATTRIBUTE |
+-----------+------+---------------------------+
| newuser | % | {"newAttr": "value"} |
+-----------+------+---------------------------+
1 rows in set (0.00 sec)通过 ALTER USER ... PASSWORD EXPIRE NEVER 将 newuser 的自动密码过期策略设置为永不过期:
ALTER USER 'newuser' PASSWORD EXPIRE NEVER;Query OK, 0 rows affected (0.02 sec)通过 ALTER USER ... PASSWORD REUSE INTERVAL ... DAY 修改 newuser 的密码重用策略,使其在最近 90 天内使用过的密码无法重用:
ALTER USER 'newuser' PASSWORD REUSE INTERVAL 90 DAY;Query OK, 0 rows affected (0.02 sec)使用 ALTER USER ... WITH MAX_USER_CONNECTIONS N 修改 newuser 的最大连接数限制:
ALTER USER 'newuser' WITH MAX_USER_CONNECTIONS 3;
SELECT User, Host, max_user_connections FROM mysql.user WHERE User='newuser';+---------+------+----------------------+
| User | Host | max_user_connections |
+---------+------+----------------------+
| newuser | % | 3 |
+---------+------+----------------------+
1 row in set (0.01 sec)修改用户绑定的资源组
使用 ALTER USER ... RESOURCE GROUP 将用户 newuser 的资源组修改为 rg1。
ALTER USER 'newuser' RESOURCE GROUP rg1;Query OK, 0 rows affected (0.02 sec)查看当前用户绑定的资源组:
SELECT USER, JSON_EXTRACT(User_attributes, "$.resource_group") FROM mysql.user WHERE user = "newuser";+---------+---------------------------------------------------+
| USER | JSON_EXTRACT(User_attributes, "$.resource_group") |
+---------+---------------------------------------------------+
| newuser | "rg1" |
+---------+---------------------------------------------------+
1 row in set (0.02 sec)解绑用户的资源组,即将用户绑定到 default 资源组。
ALTER USER 'newuser' RESOURCE GROUP `default`;
SELECT USER, JSON_EXTRACT(User_attributes, "$.resource_group") FROM mysql.user WHERE user = "newuser";+---------+---------------------------------------------------+
| USER | JSON_EXTRACT(User_attributes, "$.resource_group") |
+---------+---------------------------------------------------+
| newuser | "default" |
+---------+---------------------------------------------------+
1 row in set (0.02 sec)