(一)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@
要回收某个账户的权限,使用 REVOKE 语句,语法如下:
REVOKE FROM >;@H_301_146@
例如,回收user2对lijiamandb数据库的select权限
REVOKE ON lijiamandb.FROM `user2`@`%`;@H_301_146@
【完】