MySQL 用户及权限
2022-12-05
本章主要涉及mysql 用户 和 权限的配置和示例;专门拿出一章来,是因为平时用的比较多,这样查看更方便;
mysql 授权表
mysql 授权表共有 5 个表:user、db、host、tables_priv 和 columns_priv。
授权表的内容有如下用途:
user 表
use 表列出可以连接服务器的用户及其口令,并且它指定他们有哪种全局(超级用户)权限。在 user 表启用的任何权限均是全局权限,并适用于所有数据库。例如,如果你启用了 DELETE 权限,在这里列出的用户可以从任何表中删除记录,所以在你这样做之前要认真考虑。
db 表
db 表列出数据库,而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表。
host 表
host 表与 db 表结合使用在一个较好层次上控制特定主机对数据库的访问权限,这可能比单独使用 db 好些。这个表不受 GRANT 和 REVOKE 语句的彩响,所以,你可能发觉你根本不是用它。
tables_priv 表
tables_priv 表指定表级权限,在这里指定的一个权限适用于一个表的所有列。
columns_priv 表
columns_priv 表指定列级权限。这里指定的权限适用于一个表的特定列
权限管理
#授权表
user #该表放行的权限,针对:所有数据,所有库下所有表,以及表下的所有字段
db #该表放行的权限,针对:某一数据库,该数据库下的所有表,以及表下的所有字段
tables_priv #该表放行的权限。针对:某一张表,以及该表下的所有字段
columns_priv #该表放行的权限,针对:某一个字段
#按图解释:
user:放行db1,db2及其包含的所有
db:放行db1,及其db1包含的所有
tables_priv:放行db1.table1,及其该表包含的所有
columns_prive:放行db1.table1.column1,只放行该字段
示例
1.创建用户
#############
# 创建用户
mysql> ? create user # 查看帮助
create user 用户名@'允许登录的网段' identified by '允许该用户登录的密码'; # 创建用户、密码
CREATE USER 'jeffrey'@'localhost'; # 只创建用户
create user test1@'127.0.0.1' idenitified by 'password'; # 允许本地登录
create user test1@'%' idenitified by 'password'; # 允许所有网段登录
create user 'egon'@'192.168.1.%' identified by '123';
create user 'egon'@'%' identified by '123';
# mysql> flush privileges; # 刷新权限,默认创建用户不用刷新,该需要刷新
2.授予权限
#############
# grant
# 授权:对文件夹,对文件,对文件某一字段的权限
mysql> ? grant # 查看帮助
常用权限有:select,update,alter,delete
all 可以代表除了grant之外的所有权限
# 针对所有库的授权:*.*
grant select on *.* to 'egon1'@'localhost' identified by '123'; #只在user表中可以查到egon1用户的select权限被设置为Y
#针对某一个表:db1.t1
grant select on db1.t1 to 'egon3'@'%' identified by '123'; #只在tables_priv表中可以查到egon3用户的select权限
#针对某一个字段:
mysql> select * from t3;
+------+-------+------+
| id | name | age |
+------+-------+------+
| 1 | egon1 | 18 |
| 2 | egon2 | 19 |
| 3 | egon3 | 29 |
+------+-------+------+
grant select (id,name),update (age) on db1.t3 to 'egon4'@'localhost' identified by '123';
# 授予用户权限,单库权限;多个库,执行多次
grant all on vt_db.* to vt_user@'%' identified by 'password';
grant all on vt_dmllog.* to vt_user@'localhost' identified by 'password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; # 添加用户并授予执行 grant(创建用户并授权) 的权限,若不添加,root无法创建用户
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.100.%' IDENTIFIED BY 'my-new-password' WITH GRANT OPTION;
mysql> select user,host,Grant_priv from mysql.user; # 查看用户有无执行 GRANT 权限(创建用户)
+-----------+-------------+------------+
| user | host | Grant_priv |
+-----------+-------------+------------+
| root | 192.168.0.% | N |
+-----------+-------------+------------+
1 rows in set (0.00 sec)
mysql> update mysql.user set Grant_priv='Y' where user='root'; # 授权创建用户的权限
mysql> flush privileges;
3.删除权限
#############
# revoke
mysql> show grants for root@'192.168.0.%'\G # 查看创建用户语句
mysql> revoke all on *.* from vt_user@'%'; # 删除用户所有权限
mysql> revoke select on db1.* from 'egon'@'%';
mysql> flush privileges;
4.删除用户
#############
# 删除用户操作
mysqL> drop user chaochao@'127.0.0.1';
mysqL> drop user chaochao@'%';
mysql> flush privileges;
5.修改指定用户密码:
mysql> update mysql.user set password=password("新密码")where User="test" and Host="localhost";
mysql> flush privileges;