实验二 数据库安全性技术(8.0)
制作不易!点个关注!给大家带来更多的价值!
目录
- 实验二 数据库安全性技术(8.0)
- **`制作不易!点个关注!给大家带来更多的价值!`**
- 第1关:创建用户
- 任务描述
- 数据库环境
- 相关知识
- 创建用户
- 删除用户
- 编程要求
- 测试说明
- 代码如下:
- 第2关:用户和权限(一)
- 第3关:用户和权限(二)
- 第4关:用户和权限(三)
- 第5关:用户和权限(四)
- 第6关:用户和权限(五)
第1关:创建用户
任务描述
本关任务:
在给定的数据库环境中,完成用户的创建。
数据库环境
mysql8.0.28 Debian GNU/Linux 10
相关知识
创建用户
可以使用 CREATE USER 语句来创建 MySQL 用户,并设置相应的密码。其基本语法格式如下:
CREATE USER <用户> [ IDENTIFIED BY [ PASSWORD ] 'password' ] [ ,用户 [ IDENTIFIED BY [ PASSWORD ] 'password' ]]
参数说明如下:
1) 用户
指定创建用户账号,格式为 user_name'@'host_name
。这里的user_name
是用户名,host_name
为主机名,即用户连接 MySQL 时所用主机的名字。如果在创建的过程中,只给出了用户名,而没指定主机名,那么主机名默认为“%”,表示一组主机,即对所有主机开放权限。
2) IDENTIFIED BY子句
用于指定用户密码。新用户可以没有初始密码,若该用户不设密码,可省略此子句。
3) PASSWORD ‘password’
PASSWORD 表示使用哈希值设置密码,该参数可选。如果密码是一个普通的字符串,则不需要使用 PASSWORD 关键字。‘password’ 表示用户登录时使用的密码,需要用单引号括起来。
使用 CREATE USER 语句时应注意以下几点:
1.CREATE USER 语句可以不指定初始密码。但是从安全的角度来说,不推荐这种做法。
2.使用 CREATE USER 语句必须拥有 mysql 数据库的 INSERT 权限或全局 CREATE USER 权限。
3.使用 CREATE USER 语句创建一个用户后,MySQL 会在 mysql 数据库的 user 表中添加一条新记录。
4.CREATE USER 语句可以同时创建多个用户,多个用户用逗号隔开。
新创建的用户拥有的权限很少,它们只能执行不需要权限的操作。如登录 MySQL、使用 SHOW 语句查询所有存储引擎和字符集的列表等。如果两个用户的用户名相同,但主机名不同,MySQL 会将它们视为两个用户,并允许为这两个用户分配不同的权限集合。
例 1
使用 CREATE USER 创建一个用户,用户名是 test1,密码是 test1,主机名是 localhost。SQL 语句和执行过程如下。
mysql> CREATE USER 'test1'@'localhost' IDENTIFIED BY 'test1';
Query OK, 1 rows affected (0.06 sec)
结果显示,创建 test1 用户成功。
注意: 在MySQL 5.7.6及更高版本中,可以使用下面语句来创建用户。
CREATE USER IF NOT EXISTS 'user'@'localhost' IDENTIFIED BY 'password';
MySQL在安装时,初始用户名为root,此为系统管理员用户,其余用户均由root创建并授权,经授权的用户也可以创建用户。
在生产环境中,除了管理员,其它人应当使用由管理员创建的账户,不得使用root帐户。出于安全考虑,一般root用户也仅限在服务器本地登录,不轻易开放远程登录。
删除用户
编程要求
测试说明
代码如下:
/* 注意:请在 begin - end代码块中作答,其他代码不要删除。*/#1. 创建数据库用户test,密码为1234。
/*------------begin-----------*/CREATE USER 'test' IDENTIFIED BY '1234';
/*------------end------------*/
select user,host from mysql.user where user not like 'mysql.%' and user <> 'root' and user = 'test';#2. 删除数据库用户test。
/*------------begin-----------*/
DROP USER 'test';/*------------end------------*/
select user,host from mysql.user where user not like 'mysql.%' and user <> 'root' and user = 'test';
第2关:用户和权限(一)
use demo;#1. 用户test对dept和emp表具有SELECT的权限。
#代码开始grant select on demo.emp to test;
grant select on demo.dept to test;
#代码结束
第3关:用户和权限(二)
use demo;#1. 用户wangming对职工和部门表有INSERT和DELETE权力。
#代码开始
grant INSERT,DELETE on demo.emp to wangming;
grant INSERT,DELETE on demo.dept to wangming;#代码结束
第4关:用户和权限(三)
use demo;#1. 用户liyong对职工表有SELECT权力,对工资字段具有更新权力。
#代码开始grant select,update(salary) on demo.emp to liyong;#代码结束
第5关:用户和权限(四)
use demo;#1. 用户zhouping具有对两个表所有权力(读、插、改、删数据),并具有给其他用户授权的权力。
# 提示:所有权力为ALL PRIVILEGES,在GRANT语句中使用WITH GRANT OPTION选项,被授权的用户就具有了再次将对象权限授予其他用户的能力。
#代码开始grant ALL PRIVILEGES on demo.emp to zhouping WITH GRANT OPTION;
grant ALL PRIVILEGES on demo.dept to zhouping WITH GRANT OPTION;#代码结束
第6关:用户和权限(五)
use demo;#1. 用户yanglan具有从每个部门职工中SELECT最高工资(别名maxsal),最低工资(别名minsal),平均工资(别名avgsal)的权力,他不能查看每个人的工资。
#提示:首先创建视图(v_sal)查询每个部门职工中的最高工资,最低工资和平均工资,然后授予用户查询视图的权限。#步骤1:创建视图v_sal
CREATE VIEW v_sal AS SELECT dep_id,MAX(emp.`salary`)AS maxsal,MIN(emp.`salary`)AS minsal,AVG(salary) AS avgsal FROM emp,dept WHERE emp.`dep_id`=dept.`did` GROUP BY dname;#步骤2:查看视图
DESCRIBE v_sal;#步骤3:给用户授予查询视图的权限grant select on v_sal to yanglan;#代码结束