系列链接:
- MySQL的安装及数据库的创建和维护
- 实验二:数据表的创建与修改管理
- 实验三:表数据的查询操作
- 实验四:数据插入、修改、删除操作
- 实验五:视图的创建与管理
- 实验六:MySQL的用户与权限(MySQL5.7版本)
- 实验七:自定义函数与存储过程
实验六:MySQL的用户与权限(MySQL5.7版本)
- 一、实验目的
- 二、验证性实验
-
- 1. MySQL中所有的用户信息都保存在mysql.user数据表中,查看user表,了解常用字段的含义
- 2. 查询user表中默认用户root 的Host和User值
- 3. 查询user表中root用户默认的plugin和authentication_string值
- 4. 创建用户test1,没有密码,没有任何限制。(%表示任何主机)
- 5. 创建用户test2,密码为222222,该用户只能从本地主机连接MySQL服务器
- 6. 查询存储在user表中test2用户的密码(密码是加密后的,看不懂)
- 7. 同时创建多个用户
- 8. 查看用户是否创建成功
- 9. 创建本地用户test5,密码555555,限制该用户同时连接服务器的最大数量为2
- 10. 查看user表中的max_user_connections字段,看值是否是2
- 11. 以用户test5连接MySQL服务器来验证此操作
- 12. 创建用户test6,并锁定该用户
- 13. 查看用户test6是否已被锁定
- 14. 解锁mysql.user表中被锁定的用户test6.(解锁后该用户在客户端就能连接MySQL服务器了)
- 15. 修改密码,将test2用户的密码设置为123456
- 16. 重命名用户,用Rename User语句,为用户test6重命名为xiaoming
- 17. 删除用户test6,并用select语句查看该用户是否删除
- 18. 权限管理,查看root用户、test1用户、test2用户被授权情况。
- 19. 权限管理,授予test1用户st.student表的select权限,以及对sno,sname字段的插入权限
- 20. 查看test1用户的权限授予情况,方法如下。
- 21. 退出当前root用户,以test1用户登录MySQL服务器(注意test1用户的密码为空),用use命令打开st数据库,输入以下语句,观察结果并截图。
- 21. 退出当前test1用户权限管理,回收test1用户对st.student表中sno,sname字段的插入权限,并查看权限是否被回收。
- 22. 刷新用户权限(从系统数据库mysql中的权限表中重新加载用户的权限)。
- 三、设计性实验任务如下:
-
- 1. 使用root用户创建exam1用户,初始密码设置为123456。
- 2. 让该用户对所有数据库拥有SELECT、CREATE、DROP权限,并且能将权限转授其它用户
- 3. 创建exam2用户,该用户没有初始密码。
- 4. 用exam2用户登录,将其密码修改为000000。
- 5. 用exam1用户登录,为exam2用户设置CREATE和DROP权限。
- 6. 用exam2用户登录,在st数据库下创建一个t1表,并将其删除,验证其拥有的CREATE和DROP权限。![在这里插入图片描述](https://img-blog.csdnimg.cn/fc1976ad8cb3467d9d5069fbfa877a70.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1Njg1NDM1,size_16,color_FFFFFF,t_70)
- 7. 用root用户登录,收回exam1用户和exam2用户的所有权限。
- 8. 删除exam1用户和exam2用户。
- 四、观察与思考
一、实验目的
(1)了解用户与权限的作用
(2)掌握CREATE USER 创建用户
(3)掌握ALTER USER 修改用户
(4)掌握GRANT 授予用户权限
二、验证性实验
设计性实验任务如下:
1. MySQL中所有的用户信息都保存在mysql.user数据表中,查看user表,了解常用字段的含义
我才发现可以用sql语句代码块
select * from mysql.user;
2. 查询user表中默认用户root 的Host和User值
(这两个字段组合保存了客户端访问MySQL服务器的账号字段)select host,user from mysql.user;
3. 查询user表中root用户默认的plugin和authentication_string值
(这两个字段值保存了用户身份验证的信息)SELECT plugin, authentication_string
FROM mysql.user
where user='root';
创建用户的语句格式:
CREATE USER [IF NOT EXISTS]
账户名 [用户身份验证选项][, 账户名 [用户身份验证选项]]…
[WITH 资源控制选项][密码管理选项 | 账户锁定选项]
- CREATE USER可以一次创建多个用户,多个用户之间使用逗号分隔。
- 账户名是由“用户名@主机地址”组成。
- 用户名区分大小写,但是主机地址不区分大小写。
- 其余选项在创建用户时,若未设置则使用默认值。
4. 创建用户test1,没有密码,没有任何限制。(%表示任何主机)
create user 'test1';
5. 创建用户test2,密码为222222,该用户只能从本地主机连接MySQL服务器
create user 'test2'@'localhost' identified by'222222';
6. 查询存储在user表中test2用户的密码(密码是加密后的,看不懂)
select plugin,authentication_string from mysql.user where user='test2';
7. 同时创建多个用户
create user 'test3'@localhost IDENTIFIED by'333333',
'test4'@localhost IDENTIFIED by'444444';
8. 查看用户是否创建成功
select HOST,USER from mysql.user;
9. 创建本地用户test5,密码555555,限制该用户同时连接服务器的最大数量为2
create user 'test5'@'localhost' IDENTIFIED by'555555' WITH MAX_USER_CONNECTIONS 2;
10. 查看user表中的max_user_connections字段,看值是否是2
select max_user_connections from mysql.user where user='test5';
11. 以用户test5连接MySQL服务器来验证此操作
当退出一个客户端再进入就可以了。
12. 创建用户test6,并锁定该用户
create user 'test6'@'localhost' IDENTIFIED by'666666' PASSWORD EXPIRE account lock;
13. 查看用户test6是否已被锁定
(该用户在登录MySQL服务器,会报‘账户被锁定的错误’)select account_locked from mysql.`user` where user='test6';
14. 解锁mysql.user表中被锁定的用户test6.(解锁后该用户在客户端就能连接MySQL服务器了)
alter user 'test6'@'localhost' account UNLOCK;
15. 修改密码,将test2用户的密码设置为123456
alter user 'test2'@'localhost' IDENTIFIED by '123456';
16. 重命名用户,用Rename User语句,为用户test6重命名为xiaoming
rename user 'test6'@'localhost' to 'xiaoming'@'localhost';
17. 删除用户test6,并用select语句查看该用户是否删除
drop user if exists 'test5'@'localhost';
select HOST,USER from mysql.user;
18. 权限管理,查看root用户、test1用户、test2用户被授权情况。
语句格式:SHOW GRANTS [FOR 账户]SHOW GRANTS FOR 'root'@'localhost';
SHOW GRANTS FOR 'test1';
SHOW GRANTS FOR 'test2'@'localhost';
19. 权限管理,授予test1用户st.student表的select权限,以及对sno,sname字段的插入权限
语句格式:GRANT 权限类型 [字段列表][, 权限类型 [字段列表]] ... ON [目标类型] 权限级别 TO 账户名 [用户身份验证选项] [, 账户名 [用户身份验证选项]] ... [WITH {GRANT OPTION | 资源控制选项}]GRANT SELECT,INSERT(sno,sname) ON st.student to 'test1';
20. 查看test1用户的权限授予情况,方法如下。
show grants for 'test1';
21. 退出当前root用户,以test1用户登录MySQL服务器(注意test1用户的密码为空),用use命令打开st数据库,输入以下语句,观察结果并截图。
use st;
select * from student;
select * from course;
insert into student(sno,sname) values('1001','test1');
insert into student(sno,sname,sdept) values('1001','test1','cs');
21. 退出当前test1用户权限管理,回收test1用户对st.student表中sno,sname字段的插入权限,并查看权限是否被回收。
语句格式: REVOKE 权限类型 [(字段列表)] [, 权限类型[(字段列表)]] … ON [目标类型] 权限级别 FROM 账户名 [, 账户名] … 说明:如果要回收所有权限,则权限类型为ALL或ALL PRIVILEGES ;目标类型为*.*REVOKE INSERT(sno,sname) ON st.student FROM 'test1';
SHOW GRANTS FOR 'test1';
22. 刷新用户权限(从系统数据库mysql中的权限表中重新加载用户的权限)。
FLUSH PRIVILEGES;
三、设计性实验任务如下:
1. 使用root用户创建exam1用户,初始密码设置为123456。
create user 'exam1'@'localhost' identified by'123456';
2. 让该用户对所有数据库拥有SELECT、CREATE、DROP权限,并且能将权限转授其它用户
(转授权限用with grant option短语,用*.*表不任意数据库下的任意数据表)。GRANT SELECT,CREATE,DROP ON *.* to email@"localhost" IDENTIFIED by "123456";
3. 创建exam2用户,该用户没有初始密码。
create user 'exam2';
4. 用exam2用户登录,将其密码修改为000000。
set password = password('000000');
5. 用exam1用户登录,为exam2用户设置CREATE和DROP权限。
GRANT CREATE,DROP ON *.* to exam2@"localhost" IDENTIFIED by "000000";
6. 用exam2用户登录,在st数据库下创建一个t1表,并将其删除,验证其拥有的CREATE和DROP权限。
7. 用root用户登录,收回exam1用户和exam2用户的所有权限。
revoke all on *.* from email@localhost,exam2@localhost;
8. 删除exam1用户和exam2用户。
四、观察与思考
- 思考如何通过Navicat远程连接指定IP的MySQL服务器?
系列问题6:你能靠,自己,回答上来吗?请把回答留言评论区。
当然若本篇内容对您有所帮助,请三连点赞,关注,收藏支持下。
别问,问就是
创作不易,白嫖很爽,但是求各位手下留情。
如果本篇博客有任何错误或者疏漏,请批评斧正,感激不尽 !