实验目的: 掌握自主存取控制权限的定义和维护方法
实验内容:定义不同用户,分配不同权限给用户,以相应的用户名登陆数据库验证权限分配是否正确
一、添加、删除用户
1.1 添加用户
众所周知,我们在刚开始安装使用mysql时,最开始都从root
角色开始的,root
拥有最高的权限,但我们也可以创建一些我们需要的,具备一部分权限的用户。
(1)添加新用户时使用CREATE USER命令创建,语法格式如下:
CREATE USER 用户[IDENTIFIED BY ‘password’];
用户=’用户名’@’主机名’ //主机名一般默认为Localhost
(2)实例:创建用户user_1和user_2,设置密码为123456
可以使用SELECT user FROM mysql.USER
命令查看当前数据库的所有用户,USER表里存储了所有的用户。
(3) 更改用户密码
使用SET PASSWORD命令修改某用户登陆密码,语法格式如下:
SET PASSWORD FOR 用户=‘新密码’;
//mysql8之后才用此种格式,=password(‘新密码’)的格式是旧格式
(4)更改用户名
更改用户名实际上和更改普通表的数据类似,我们需指定mysql数据库,然后在user表中修改我们要修改的用户名。
格式:
UPDATE USER SET USER='新名'@'Localhost' WHERE USER='原名';
1.2 删除用户
命令格式:
DROP USER 用户;
注:只有拥有当前数据库全局权限的用户才能使用DROP命令
例:DROP USER ALEX@LOCALHOST;
例子:
SET PASSWORD FOR ‘ALEX’@’LOCALHOST’=‘123’;
二、权限控制
(1)授予权限
可授予用户列权限、表权限、数据库权限、用户权限等,语法格式如下:
GRANT priv_typeON [object_type] {表名|数据库名}TO 用户
[IDENTIFIED BY ‘密码’][WITH grant option];
object_type=TABLE|FUNCTION|PROCEDURE
注:若指定密码,则原密码将会被覆盖,如果权限授予一个不存在的用户,则MySQL会自动创建这个用户,但必须为该用户指定密码。
priv_type
列权限、表权限、数据库权限、用户权限参考“权限一览表”,如果要授权所有权限,则用ALL或者ALL PRIVILEGES表示。
授予user_1访问、更新、创建、删除employee表的权限:
授予全局访问权限:
GRANT ALL ON DBST.* TO ALEX@LOCALHOST;
(2) 收回权限
收回权限使用REVOKE命令,这有一个小窍门,授予权限顾名思义用TO
,收回权限则用FROM
:
REVOKE+要收回对***的权限 + FROM +用户
REVOKE priv_type ON {表名|数据库名} FROM 用户;
比如,现在收回user_1对table表的访问权限
revoke select on table from user_1;
注:只有拥有当前数据库全局CREATE或者UPDATE权限的用户才能使用REVOKE命令。
flush privileges
这个是用于刷新权限表的命令,通常在我们更新用户名或密码后需要使用,不然系统会拒绝访问。