MySQL用户与权限管理

MySQL用户与权限管理,第1张

概述(一)MySQL有哪些权限MySQL的权限列表可以使用 show privileges 来查看,主要的权限信息如下: 这里我们根据作用域,把权限分为3类:1.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: user1Select_priv: NInsert_priv: NUpdate_priv: Y                 Delete_priv: NCreate_priv: NMysqLfrom MysqL.db a ;Empty set (0.00 sec)MysqLfrom MysqL.tables_priv a from MysqL.columns_priv a 0.00 sec)

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

insert on lijiamandb.: user1Select_priv: NInsert_priv: NUpdate_priv: Y      //该权限是上一步授予的,不用管Delete_priv: NMysqL%Db: lijiamandb: user1Select_priv: NInsert_priv: Y                ...Trigger_priv: N1 row in 0.00 sec)

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

delete on lijiamandb.t1 : user1Select_priv: NInsert_priv: NUpdate_priv: YDelete_priv: NCreate_priv: NMysqL: user1Select_priv: NInsert_priv: YUpdate_priv: NDelete_priv: NCreate_priv: NMysqL;+------+------------+-------+------------+----------------+---------------------+------------+-------------+| Host | Db         | User  | table_name | Grantor        | Timestamp           | table_priv | Column_priv || %    | lijiamandb | user1 | t1         | root@localhost 0000-0000 00:Delete     |              sec)MysqL0.00 sec)

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

select(name) : user1Select_priv: NInsert_priv: NUpdate_priv: YDelete_priv: NCreate_priv: NMysqLTimestamp           DeleteSelect       sec)----+------------+-------+------------+-------------+---------------------+-------------+| Column_name | name        Select      ----+------------+-------+------------+-------------+---------------------+-------------+

 

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

(3.1)创建账户

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

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

 创建账户的例子如下:

创建一个只能从本地访问MysqL的用户user1,密码是123456USER `user1`@`localhost` IDENTIFIED ;创建一个从192。168.10.*网段访问MysqL的用户user2USER `user2`@`192.168.10.*` IDENTIFIED 创建一个可以从任意位置访问MysqL的用户user3USER `user3`@`%` IDENTIFIED ';

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

 

(3.2)删除账户

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

DROP >`;

 删除账户的例子如下:

USER `user1`@`localhost`;

 

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

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

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

 

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

SHOW GRANTS FOR `user`@`host`;

 例如,查看用户lijiaman的权限

MysqL> SHOW GRANTS FOR `lijiaman`@`` \GGrants 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)

 

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

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

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

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

MysqLselect TO `user2`@`%`;

 


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

REVOKE FROM >;

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

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

 

 

【完】

总结

以上是内存溢出为你收集整理的MySQL用户与权限管理全部内容,希望文章能够帮你解决MySQL用户与权限管理所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1152610.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存