(一)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用户与权限管理所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)