MySQL的权限管理是啥?简单的来讲管理用户在能什么地方能做什么事。也就是说管理用户在哪个ip能连接,连接后用户能否创建删除数据库,能否增删改查数据库的表等等 而当客户端连接到服务器时,MySQL访问控制有两个阶段:
- 连接验证:连接到MySQL数据库服务器的客户端需要有一个有效的用户名和密码。此外,客户端连接的主机必须与MySQL授权表中的主机相匹配。
- 请求验证:当连接成功建立后,对于客户端发出的每个语句,MySQL会检查客户端是否具有足够的权限来执行该特定语句。 MySQL能够检查数据库,表和字段级别的权限。
创建用户并授权
格式:grant all privileges on db.table to user@'host' identified by "password" with grant option;
其中:
- all privileges:表示所有权限
- db.table: 权限针对哪个数据库哪个表,如果是
*.*
就是所有数据库所有表 - user@'host': 前者表示会用户名,后者表示只能从哪个ip,ip段(比如:'192.168.31.*'),域名或者任何地方('%') 连接
- identified by:指定用户的密码
- with grant option: 指于用户能否将自己的权限授予给其他人。
创建client这个用户,只能用172.17.0.3这个 ip 连接,并只给 simple_db 数据库的(SELECT)查询的权限,不能授权给其他人,可以用下面的命令完成。
grant select on simple_db.* to client@'172.17.0.3' identified by "OhMyGod2018,";
刷新权限
flush privileges;
注意8.0后的版本不能用直接用这条语句了,要分解成两条语句才行
CREATE USER `client`@`172.17.0.3` IDENTIFIED BY 'passowrd';
grant select on simple_db.* to client@'172.17.0.3';
更多的权限说明可以看文章的末尾
查看用户信息
select User,Host from mysql.user where User = "client";
+--------+------------+
| User | Host |
+--------+------------+
| client | 172.17.0.3 |
+--------+------------+
1 row in set (0.00 sec)
查看用户权限
show grants for 'client'@'172.17.0.3';
+--------------------------------------------------------+
| Grants for client@172.17.0.3 |
+--------------------------------------------------------+
| GRANT USAGE ON *.* TO 'client'@'172.17.0.3' |
| GRANT SELECT ON `simple_db`.* TO 'client'@'172.17.0.3' |
+--------------------------------------------------------+
2 rows in set (0.00 sec)
权限叠加
为client添加update权限
grant update on simple_db.* to client@'172.17.0.3';
flush privileges;
再查看
show grants for 'client'@'172.17.0.3';
+----------------------------------------------------------------+
| Grants for client@172.17.0.3 |
+----------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'client'@'172.17.0.3' |
| GRANT SELECT, UPDATE ON `simple_db`.* TO 'client'@'172.17.0.3' |
+----------------------------------------------------------------+
2 rows in set (0.00 sec)
收回用户权限
revoke update on `simple_db`.* from 'client'@'172.17.0.3' ;
show grants for 'client'@'172.17.0.3';
+--------------------------------------------------------+
| Grants for client@172.17.0.3 |
+--------------------------------------------------------+
| GRANT USAGE ON *.* TO 'client'@'172.17.0.3' |
| GRANT SELECT ON `simple_db`.* TO 'client'@'172.17.0.3' |
+--------------------------------------------------------+
2 rows in set (0.00 sec)
重命名用户
rename user 'client'@'172.17.0.3' to 'zgj'@'172.17.0.3';
查看用户信息
select User,Host from mysql.user where User = "client";
Empty set (0.00 sec)
select User,Host from mysql.user where User = "zgj";
+------+------------+
| User | Host |
+------+------------+
| zgj | 172.17.0.3 |
+------+------------+
1 row in set (0.00 sec)
修改密码
SET PASSWORD FOR 'zgj'@'172.17.0.3' = PASSWORD('OhMyGod2018.');
或者是
ALTER USER 'root'@'localhost' IDENTIFIED BY 'OhMyGod2018.';
删除用户
drop user 'zgj'@'172.17.0.3';
再查看用户信息
select User,Host from mysql.user where User = "zgj";
Empty set (0.00 sec)
权限表
权限 | 权限级别 | 权限说明 |
---|---|---|
CREATE | 数据库、表或索引 | 数据库、表或索引 |
DROP | 数据库或表 | 删除数据库或表权限 |
REFERENCES | 数据库或表 | |
ALTER | 表 | 更改表,比如添加字段、索引等 |
DELETE | 表 | 删除数据权限 |
INDEX | 表 | 索引权限 |
INSERT | 表 | 插入权限 |
SELECT | 表 | 查询权限 |
UPDATE | 表 | 更新权限 |
CREATE VIEW | 视图 | 创建视图权限 |
SHOW VIEW | 视图 | 查看视图权限 |
ALTER ROUTINE | 存储过程 | 更改存储过程权限 |
CREATE ROUTINE | 存储过程 | 创建存储过程权限 |
EXECUTE | 存储过程 | 执行存储过程权限 |
FILE | 服务器主机上的文件访问 | 文件访问权限 |
CREATE TEMPORARY TABLES | 服务器管理 | 创建临时表权限 |
LOCK TABLES | 服务器管理 | 锁表权限 |
CREATE USER | 服务器管理 | 创建用户权限 |
PROCESS | 服务器管理 | 查看进程权限 |
RELOAD | 服务器管理 | 执行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload等命令的权限 |
REPLICATION CLIENT | 服务器管理 | 复制权限 |
REPLICATION SLAVE | 服务器管理 | 复制权限 |
SHOW DATABASES | 服务器管理 | 查看数据库权限 |
SHUTDOWN | 服务器管理 | 关闭数据库权限 |
SUPER | 服务器管理 | 执行kill线程权限 |