Mysql用户、权限和角色管理
数据库安全最重要的一点就是确保只授权给有资格的用户访问数据库的权限,同时令所有未被授权的人员无法接近数据,这主要通过数据库系统的存区控制机制实现 : )
1. 用户管理
1.1 创建用户
CREATE USER [IF NOT EXISTS]
user [auth_option] [, user [auth_option]] ...
DEFAULT ROLE role [, role ] ...
[REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
[WITH resource_option [resource_option] ...]
[password_option | lock_option] ...
[COMMENT 'comment_string' | ATTRIBUTE 'json_object']
常用命令:
create user '用户名'@'登录地址' identified by '密码'
举个栗子:
我们创建一个localhost使用的panfeng用户
create user 'panfeng'@'localhost' identified by 'password';
1.2 查看用户
使用root用户登录,查看用户信息:
select user, host from mysql.user
1.3 删除用户
常用命令:
drop user '用户名'@'登录地址'
举个栗子:
删除刚刚创建的panfeng用户
drop user 'panfeng'@'localhost';
1.4 修改用户密码
再root用户或这修改用户下:
alter user '用户名' identified by '新密码';
举个栗子:
修改panfeng用户的密码为pasword
alter user 'panfeng'@'localhost' identified by 'password';
2. 权限管理
2.1 权限说明
数据库的存取权限主要有如下几种:
对象 | 权限类型 |
数据库 | create database |
基本表 | create table, alter table |
视图 | create view |
索引 | create index |
基本表数据 | select, insert, update, delete, references, all privileges |
属性列数据 | select, insert, update, references, all privileges |
2.2 授予权限
我们使用GRANT
命令授予权限,通用格式如下:
GRANT <权限>,...
ON <对象类型> <对象名>,...
TO <用户>,...
[WITH GRANT OPTION];
说明:如果指定了WITH GRANT OPTION
子句,那么获得该权限的用户还可以将这种权限再授予其他用户。
举个栗子:
给panfeng用户授予Student表的查询权限
grant select on table Student to 'panfeng'@'localhost';
2.3 收回权限
我们使用REVOKE
命令收回用户权限,命令通用格式如下:
REVOKE <权限>,...
ON <对象类型> <对象名>,...
FROM <用户>,...[CASCADE|RESTRICT]
说明:CASCADE表示级联回收权限, RESTRICT表示当一个用户作为父授权时,不允许直接删除(需先删除子授权)
举个栗子:
收回panfeng用户Student表的查询权限
revoke select on table Student from 'panfeng'@'localhost';
2.4 查看用户/角色权限
查看所有权限情况:
SHOW GRANTS;
查看特定用户权限情况:
SHOW GRANTS FOR '用户名'@'登录地址';
举个栗子:
查看panfeng用户的权限:
show grants for 'panfeng'@'localhost';
3. 数据库角色
数据库角色时被命名的一组与数据库操作相关的权限,角色是权限的集合。
3.1 创建角色
使用CREATE ROLE
命令创建角色,通用命令格式如下:
CREATE ROLE <角色名>
举个栗子:
创建角色r1
create role r1;
3.2 给角色授权
与给用户授权相同,这里就不赘述了 : )
3.3 将一个角色授予其他的角色或用户
命令通用格式:
GRANT <角色>,...
TO <角色或用户>,...
[WITH ADMIN OPTION];
说明:如果指定了WITH ADMIN OPTION子句,则获得权限的角色或用户还能将该权限再授予其他的角色。
举个栗子:
将r1角色的权限授予panfeng用户
grant r1 to 'panfeng'@'localhost';
3.4 角色权限的回收
同用户权限的回收~~