MySQL 用户及权限

本章主要涉及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 表指定列级权限。这里指定的权限适用于一个表的特定列

权限管理

img

#授权表
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;