在很多时候,我们并不会直接利用 MySQL
的 root
用户进行项目的开发,一般的,我们都会创建一个具有部分权限的用户。
创建用户
创建本地用户
1
| CREATE USER 'developer'@'localhost' IDENTIFIED BY ']8Mgbs6m{4)z?DYJU8XA';
|
创建远程用户
1
2
3
4
5
6
7
8
9
| // 从 192.168.10.10 / 192.168.10.11 登陆的用户
CREATE USER 'developer'@'192.168.10.10' IDENTIFIED BY ']8Mgbs6m{4)z?DYJU8XA';
CREATE USER 'developer'@'192.168.10.11' IDENTIFIED BY ']8Mgbs6m{4)z?DYJU8XA';
// 从任意 IP 登陆的用户
CREATE USER 'developer'@'%' IDENTIFIED BY ']8Mgbs6m{4)z?DYJU8XA';
// 不做指定默认为 '%'
CREATE USER 'developer' IDENTIFIED BY ']8Mgbs6m{4)z?DYJU8XA';
|
解决 Plugin sha256_password reported: ''sha256_password' is deprecated and will be removed in a future release
问题。如果从 MySQL-5.6 或 MySQL-5.7 升级到 MySQL-8.X 会引起这样的问题,MySQL-8.0 及更高版本引入了一种更安全的密码认证插件,名为 caching_sha2_password
,现在已成为这些版本的默认选项。旧的认证插件 sha256_password
已被弃用,并计划在未来的 MySQL 发布中移除。因此设置密码时需要这样操作:
1
2
3
4
5
6
7
8
| -- 删除用户
DROP USER 'developer'@'%';
-- 修改密码
ALTER USER 'developer'@'%' IDENTIFIED WITH mysql_native_password BY ']8Mgbs6m{4)z?DYJU8XA';
-- 创建用户
CREATE USER 'developer'@'%' IDENTIFIED WITH caching_sha2_password BY 'yourpassword';
|
修改密码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| -- 查询用户
SELECT User, Host, HEX(authentication_string) FROM mysql.user;
-- 修改密码
ALTER user 'developer'@'localhost' IDENTIFIED BY ']8Mgbs6m{4)z?DYJU8XA';
-- 或者
UPDATE user SET authentication_string=PASSWORD(']8Mgbs6m{4)z?DYJU8XA'),password_expired='N' WHERE User='developer' AND Host='localhost';
-- 或者
SELECT PASSWORD('hello');
SET PASSWORD FOR 'developer'@'192.168.10.11'='*6B4F89A54E27ECDAD8DABT2SA901ASD1DB119X0SOPV29';
|
删除用户
1
2
3
4
5
6
| DELETE FROM `user` WHERE `user`='developer' AND `host`='192.168.10.11';
-- 或者
DROP USER developer@'192.168.10.11';
FLUSH PRIVILEGES;
|
修改用户账号
1
| RENAME USER 'developer'@'192.168.10.11' TO 'inspector'@'192.168.10.11';
|
赋予用户权限
其中的 test.*
表示对 test
数据库的所有操作授予提供的权限。
1
2
3
4
5
6
7
8
9
10
11
12
| -- 赋予部分权限
GRANT SELECT,DELETE,UPDATE,INSERT ON test.* TO 'developer'@'192.168.10.10';
-- 赋予所有权限
-- WITH GRANT OPTION 则表示 TO 子句所指定的所有用户都具有把自己所拥有的权限授予给其他用户的权利,而无论那些其他用户是否拥有该权限
GRANT ALL PRIVILEGES ON test.* TO 'developer'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON test.* TO 'developer'@'%' WITH GRANT OPTION;
-- 赋予权限的同时设置系统登录口令
GRANT ALL PRIVILEGES ON test.* TO
'hello'@'%' IDENTIFIED BY 'password',
'world'@'%' IDENTIFIED BY 'password';
|
查看用户权限
1
2
3
4
5
| -- 查看本地 developer 的权限,没有指定后面的 localhost 则默认为 '%'
SHOW GRANTS FOR 'developer'@'localhost';
-- 查看指定 host 的 developer 的权限
SHOW GRANTS FOR 'developer'@'192.168.10.10';
|
撤销用户权限
1
2
3
4
5
| -- 撤销 INSERT 权限
REVOKE INSERT ON test.* FROM 'developer'@'192.168.10.10';
-- 撤销所有权限
REVOKE ALL ON test.* FROM 'developer'@'192.168.10.10';
|