MySQL用户与权限管理

前端之家收集整理的这篇文章主要介绍了MySQL用户与权限管理前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

(一)MysqL有哪些权限
MysqL的权限列表可以使用 show privileges 来查看,主要的权限信息如下:


这里我们根据作用域,把权限分为3类:
1.MysqL服务管理权限:用于管理MysqL服务器的操作。这些权限是全局性的,授权范围不能是特定的数据库或对象。只能使用*.*方式授予,不能使用db.*或db.tb方式授权;
2.数据库级别权限:授权范围可以是所有数据库,也可以是单个数据库下面的所有对象。可以使用*.*方式授予全部数据库,也可以使用db.*授予单个数据库
3.对象级别权限:授权范围可以是所有数据库,也可以是单个数据库下面的所有对象,也可以是特定的对象。可以使用*.*方式授予全部数据库,也可以使用db.*授予单个数据库,还可以使用db.tb授予单个对象。

 

(二)MysqL权限管理相关表
MysqL数据库中包含了权限相关的表,一共6个表,分别从不同维度记录了MysqL用户的权限信息
 user         :用户账号,全局权限和其它非权限列
 db           :数据库级别权限
 tables_priv  :表级别权限
 column_priv  :列级别权限
 procs_priv   :存储过程和函数的权限
 proxies_priv :代理用户权限

 

有那么多权限表,权限信息是如何存储的呢?通过测试,发现:
--当授权对象为 *.*  时,存储在user表;
--当授权对象为 db.* 时,存储在db表;
--当授权对象为 db.tb 时,存储在tables_priv表;
--当授权对象为 某个表的某个列 时,存储在column_priv表

 

我们不妨来验证一下上面的结论:
测试1.当授予用户user1 *.*权限时,权限信息保存在user表中,其它权限表未存储相关权限信息。

create user user1 identified by '123456';
grant update on *.* to user1;

MysqL> select from MysqL.user a where a.user = user1 \G
*************************** 1. row ***************************
Host: %
User: user1
Select_priv: N
Insert_priv: N
Update_priv: Y                 
Delete_priv: N
Create_priv: N


MysqLfrom MysqL.db a ;
Empty set (0.00 sec)

MysqLfrom MysqL.tables_priv a from MysqL.columns_priv a 0.00 sec)@H_301_146@

 测试2.授予用户user1单个数据库的权限时,权限信息保存在db表中,其它权限表未存储相关权限信息。

insert on lijiamandb.: user1
Select_priv: N
Insert_priv: N
Update_priv: Y      //该权限是上一步授予的,不用管
Delete_priv: N


MysqL%
Db: lijiamandb
: user1
Select_priv: N
Insert_priv: Y                
...
Trigger_priv: N
1 row in 0.00 sec)@H_301_146@

测试3.授予用户user1单个表的权限时,权限信息保存在tables_priv表中,其它权限表未存储相关权限信息。

delete on lijiamandb.t1 : user1
Select_priv: N
Insert_priv: N
Update_priv: Y
Delete_priv: N
Create_priv: N


MysqL: user1
Select_priv: N
Insert_priv: Y
Update_priv: N
Delete_priv: N
Create_priv: N


MysqL;
+------+------------+-------+------------+----------------+---------------------+------------+-------------+
| Host | Db         | User  | Table_name | Grantor        | Timestamp           | Table_priv | Column_priv |
| %    | lijiamandb | user1 | t1         | root@localhost 0000-0000 00:Delete     |              sec)

MysqL0.00 sec)@H_301_146@

 测试4.授予用户user1单个列的权限时,权限信息保存在columns_priv表中,其它权限表未存储相关权限信息。

select(name) : user1
Select_priv: N
Insert_priv: N
Update_priv: Y
Delete_priv: N
Create_priv: N
MysqLTimestamp           DeleteSelect       sec)

----+------------+-------+------------+-------------+---------------------+-------------+
| Column_name | name        Select      ----+------------+-------+------------+-------------+---------------------+-------------+@H_301_146@

 

(三)创建并授权、查看、删除账户

(3.1)创建账户

使用create user语句创建账户,创建账户的sql语句如下:

CREATE USER `<user_name>`@`<host>` IDENTIFIED BY <password>';@H_301_146@

 创建账户的例子如下:

创建一个只能从本地访问MysqL用户user1,密码是123456
USER `user1`@`localhost` IDENTIFIED ;

创建一个从192。168.10.*网段访问MysqL用户user2
USER `user2`@`192.168.10.*` IDENTIFIED 创建一个可以从任意位置访问MysqL用户user3
USER `user3`@`%` IDENTIFIED ';@H_301_146@

 注意:这里需留意一下账户用户的区别,账户是用户登录主机的组合,格式为 `>` ,用户为 `>` 。

 

(3.2)删除账户

使用drop user语句删除账户,删除账户的sql语句如下:

DROP >`;@H_301_146@

 删除账户的例子如下:

USER `user1`@`localhost`;@H_301_146@

 

(3.3)查看账户极其权限信息

查看MysqL里面有哪些账户,直接查看MysqL.user表即可

MysqLselect user,host user----------------+--------------+
user             | host         | lijiaman         %            | root             | user2            * | MysqL.infoschema | localhost    | MysqL.session    | MysqL.sys        ----------------+--------------+@H_301_146@

 

 要查看某个用户的权限信息,使用 SHOW GRANTS 命令,语法如下

SHOW GRANTS FOR `user`@`host`;@H_301_146@

 例如,查看用户lijiaman的权限

MysqL> SHOW GRANTS FOR `lijiaman`@`` \G

Grants for lijiaman@%: GRANT SELECT,INSERT,1)">UPDATE,1)">DELETE,1)">CREATE,1)">DROP,RELOAD,1)">SHUTDOWN,PROCESS,1)">FILE,1)">REFERENCES,1)">INDEX,1)">ALTER,SHOW DATABASES,SUPER,1)">CREATE TEMPORARY TABLES,LOCK TABLES,1)">EXECUTE,1)">REPLICATION SLAVE,1)">REPLICATION CLIENT,1)">VIEW,SHOW CREATE ROUTINE,1)">ALTER ROUTINE,1)">USER,EVENT,1)">TRIGGER,1)">CREATE TABLESPACE,1)">CREATE ROLE,1)">DROP ROLE ON TO `lijiaman`@``
2. row GRANT APPLICATION_PASSWORD_ADMIN,AUDIT_ADMIN,BACKUP_ADMIN,BINLOG_ADMIN,BINLOG_ENCRYPTION_ADMIN,CLONE_ADMIN,CONNECTION_ADMIN,ENCRYPTION_KEY_ADMIN,GROUP_REPLICATION_ADMIN,INNODB_REDO_LOG_ARCHIVE,INNODB_REDO_LOG_ENABLE,PERSIST_RO_VARIABLES_ADMIN,REPLICATION_APPLIER,REPLICATION_SLAVE_ADMIN,RESOURCE_GROUP_ADMIN,RESOURCE_GROUP_USER,ROLE_ADMIN,SERVICE_CONNECTION_ADMIN,SESSION_VARIABLES_ADMIN,SET_USER_ID,SHOW_ROUTINE,SYSTEM_USER,SYSTEM_VARIABLES_ADMIN,TABLE_ENCRYPTION_ADMIN,XA_RECOVER_ADMIN 2 rows 0.00 sec)@H_301_146@

 

(3.4)授权、回收账户权限

要授予某个用户权限,使用 GRANT 语句,语法如下:

GRANT <privilege<db>.<tableTO user>@>;@H_301_146@

 例如,授予用户user2对所有数据库有select权限

MysqLselect TO `user2`@`%`;@H_301_146@

 


要回收某个账户的权限,使用 REVOKE 语句,语法如下:

REVOKE FROM >;@H_301_146@

 例如,回收user2对lijiamandb数据库的select权限

REVOKE ON lijiamandb.FROM `user2`@`%`;@H_301_146@

 

 

【完】

猜你在找的MySQL相关文章