1、查看已经存在的用户
-- 查看有哪些用户
SELECT * FROM mysql.user
2、创建新的用户user1
-- 创建用户并给所有IP的权限(CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';)
CREATE USER 'user1'@'%' IDENTIFIED BY 'user1paasword';
3、查看用户的权限
-- 查看`user1`用户权限
SHOW GRANTS FOR 'user1'@'%';
1、为已存在的用户赋权
1.1、授予 xxx 用户对数据库 test
的读权限(针对的是已经存在的用户)
GRANT SELECT ON test.* TO 'xxx'@'%';
1.2、为 xxx 用户授予所有数据库
,全部权限(针对的是已经存在的用户)
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
2、自动创建用户赋权
GRANT
为一个不存在的用户授予权限时,默认并不会自动创建用户。该行为受SQL Mode
中的 NO_AUTO_CREATE_USER
控制。
如果从 SQL Mode
中去掉 NO_AUTO_CREATE_USER
,当 GRANT
的目标用户不存在时,TiDB 会自动创建用户。
2.1、查看当前sql的设置
mysql> 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)
2.2、去掉 NO_AUTO_CREATE_USER
,重新设置sql_mode支持自动创建用户
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';
2.3、test数据库
赋权自动创建用户xxxx
,密码yyyyy
GRANT ALL PRIVILEGES ON test.* TO 'xxxx'@'%' IDENTIFIED BY 'yyyyy';
2.4、查看赋予的权限
SELECT user,host FROM mysql.user WHERE user='xxxx';
+------|------+
| user | host |
+------|------+
| xxxx | % |
+------|------+
1 row in set (0.00 sec)
REVOKE
语句与 GRANT
对应
注:REVOKE 收回权限时只做精确匹配,若找不到记录则报错。而 GRANT 授予权限时可以使用模糊匹配。
1、回收user1
对test数据库
的all权限
-- REVOKE ALL PRIVILEGES ON `test`.* FROM 'genius'@'localhost';
REVOKE ALL PRIVILEGES ON `test`.* FROM 'user1'@'%';
2、查看user1
的权限
SHOW GRANTS for 'user1'@'%';
-- 查看有哪些用户
SELECT * FROM mysql.user
-- 创建用户并给所有IP的权限(CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';)
CREATE USER 'user1'@'%' IDENTIFIED BY 'user1paasword';
-- 查看用户权限
SHOW GRANTS FOR 'user1'@'%';
-- 撤销账户全局特权 REVOKE收回权限时只做精确匹配
REVOKE ALL PRIVILEGES ON 数据库.* FROM 'user1'@'%';
-- 修改密码
ALTER USER 'user1'@'%' IDENTIFIED BY 'user1paaswordnew';
-- 用户赋权(GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';)
GRANT ALL PRIVILEGES ON *.* TO 'user1'@'%'; -- 给user1用户所有数据库的全部权限
GRANT ALL PRIVILEGES ON 数据库.* TO 'user1'@'%';
mysql官网参考
tidb官网参考