实验四 数据库安全性和完整性
一.实验目的
1.加深对数据库安全性和完整性理解;
2.学会授权与回收;
4.理解并体会数据库实体完整性、参照完整性、用户定义的完整性约束条件的作用。
二. 实验内容
对已建好的各表和用户进行权限的授权和回收操作,进行完操作之后检查授权过的用户是否真正具有授予的数据操作的权力了,进行完权力收回操作之后的用户是否确实丧失了收回的数据操作的权力。
定义各种完整性约束条件,之后输入各种数据以验证约束条件的作用
- 设置用户a对SPJ表的查询权限。以a登录,验证a的权限。
实验过程:
(1)先创建a用户,密码为“password”:
CREATE USER 'a' IDENTIFIED WITH mysql_native_password BY'password';
(2)没授权之前验证a的权限:
登录:
运行查询语句:
SELECT sno
from spj
发现是没有对数据库的访问权限的:
(3)再进行授权:
GRANT SELECT
ON spj
TO a;
(4)登录验证a的权限:
SELECT sno
from spj
实验结果:
创建:
授权:
结果分析:
创建用户时,创建’a’@%,不要创建a@host,否则不能授权。
- 设置用户b对S表、P表具有修改的权限,并要求b能够将该权限授予其它用户c。分别以b、c登录,验证b、c的权限。
实验过程:
(1)创建b用户,密码为“bpassword”:
CREATE USER 'b' IDENTIFIED WITH mysql_native_password BY'bpassword';
(2)创建c用户,密码为“cpassword”:
CREATE USER 'c' IDENTIFIED WITH mysql_native_password BY'cpassword';
(3)进行授权(授予查询和修改权限,只授予修改权限不可以):
GRANT SELECT
ON s
TO b;
GRANT UPDATE
ON s
TO b
WITH GRANT OPTION;
GRANT SELECT
ON p
TO b;
GRANT UPDATE
ON p
TO b
WITH GRANT OPTION;
(4)登录b用户,验证权限:
(5)登录b将s表s5中SNAME改为“为人民”,城市改为“北京”
UPDATE s
SET SNAME='为人民',CITY='北京'
WHERE sno='S1';
(6)将p表中p1改为螺丝,颜色改为红
UPDATE p
SET PNAME='螺丝',COLOR='红'
WHERE pno='p1';
(7)登录b,执行授权权限,授予c对s、p表的查询和修改权限
GRANT SELECT
ON s
TO c;
GRANT UPDATE
ON s
TO c
GRANT SELECT
ON p
TO c;
GRANT UPDATE
ON p
TO c
(8)登录c,将s表s5中SNAME改为“为民”,城市改为“上海”
UPDATE s
SET SNAME='为民',CITY='上海'
WHERE sno='S1';
(9)将p表中p1改为螺母,颜色改为蓝
UPDATE p
SET PNAME='螺母',COLOR='蓝'
WHERE pno='p1';
实验结果:
(1)创建b用户,密码为“bpassword”:
(2)创建c用户,密码为“cpassword”:
(3)进行授权(授予查询和修改权限,只授予修改权限不可以):
(4)登录b用户,验证权限:
(5)登录b将s表s5中SNAME改为“为人民”,城市改为“北京”
(6)将p表中p1改为螺丝,颜色改为红
(7)登录b,执行授权权限,授予c对s、p表的查询和修改权限
(8)登录c,将s表s5中SNAME改为“为民”,城市改为“上海”
(9)将p表中p1改为螺母,颜色改为蓝
结果分析:
授予某用户修改权限的时候记得同时授予查询权限,没有select就不能update
- 收回用户a、b的权限,并验证用户c权限的情况。
实验过程:
(1)收回a对spj表的查询权限:
REVOKE SELECT
on spj
FROM a;
(2)收回b对s、p表的更改权限:
REVOKE UPDATE
on s
FROM b;
REVOKE UPDATE
on p
FROM b;
(3)验证用户c是否还有对s、p表的更改权限:
登录c:
将s表s5中SNAME改为“为国”,城市改为“广州”
UPDATE s
SET SNAME='为国',CITY='广州'
WHERE sno='S1';
将p表中p1改为螺丝,颜色改为绿
UPDATE p
SET PNAME='螺丝',COLOR='绿'
WHERE pno='p1';
实验结果:
(1)收回a对spj表的查询权限:
(2)收回b对s、p表的更改权限:
(3)验证用户c是否还有对s、p表的更改权限:
结果分析:
只收回了b的权限,b授予c的权限并没有收回,说明mysql并没有进行级联回收。
4.对实验1中创建的表,用图形用户界面建立外键联系,并验证外键的作用。
实验过程:
- 右键----设计表----外键----创建外键
(2)验证外键作用:(在spj表中插入一条违背外键约束的数据)
往spj表插入('S8','P1','J9',200):
INSERT INTO spj VALUES('S8','P1','J9',300);
实验结果:
结果分析:
S表最大到S6,p表最大到P6,j表最大到J7,插入的数据是违背外键约束的,所以会报错。
5. 对实验1中创建的表,设置零件的颜色必须在红、橙、黄、绿、青、蓝、紫 七种颜色范围内,零件重量不能超过50的约束条件,并给这两种约束条件命名,名字为自己姓名的全拼。
实验过程:
(1)添加约束:
ALTER TABLE p
ADD CONSTRAINT pengzhen CHECK(COLOR in ('红','橙','黄','绿','青','蓝','紫')and WEIGHT<=50);
(2)验证约束有没有用,把p表里P1的“绿“改为“赤”
UPDATE p
SET color='赤'
WHERE pno='P1';
实验结果:
(1)添加约束:
(2)验证约束有没有用,把p表里P1的“绿“改为“赤”
结果分析:
验证约束有没有用,把p表里P1的“绿“改为“赤”,运行会报错,pengzhen约束已存在。数据自然改不了了。
6. 设置SPJ表中供应零件的数量都不能超过1000
实验过程:
(1)添加约束:
ALTER TABLE spj
add CHECK(QTY<=1000);
- 在spj表里将第一条数据的QTY修改为1200
UPDATE spj
SET QTY=1200
WHERE sno='S1' AND pno='P1' AND jno='J4';
实验结果:
- 添加约束:
(2)在spj表里将第一条数据的QTY修改为1200
结果分析:
由于约束的存在,不能将数据修改为大于1000的数。
7. 设置S表中的供应商号以字母‘S’开头
实验过程:
ALTER TABLE s
add CHECK(sno like 's%');
实验结果:
结果分析:
创建约束,CHECK(sno like 's%')
8. 验证各个表的实体完整性。
实验过程:
-- 验证s表的实体完整性
-- (1)往s表插入一条正常的数据
INSERT INTO s VALUES('S7','红旗',10,'济南');
-- (2)往s表插入一条重复的数据
INSERT INTO s VALUES('S7','群众',10,'青岛');
-- (3)往s表插入一条空的数据
INSERT INTO s VALUES('','创新',10,'广州');
-- 验证p表的实体完整性
-- (1)往p表插入一条正常的数据
INSERT INTO p VALUES('P7','轮胎',null,20);
-- (2)往p表插入一条重复的数据
INSERT INTO p VALUES('P7','轮胎',null,20);
-- (3)往p表插入一条空的数据
INSERT INTO p VALUES(NULL,'钉子',null,5);
-- 验证j表的实体完整性
-- (1)往j表插入一条正常的数据
INSERT INTO j VALUES('J8','造车厂','上海');
-- (2)往j表插入一条重复的数据
INSERT INTO j VALUES('J8','造车厂','上海');
-- (3)往j表插入一条空的数据
INSERT INTO j VALUES(NULL,'轮胎厂','南京');
-- 验证spj表的实体完整性
-- (1)往spj表插入一条正常的数据
INSERT INTO spj VALUES('S7','P6','J7',300);
-- (2)往spj表插入一条重复的数据
INSERT INTO spj VALUES('S7','P6','J7',300);
-- (3)往spj表插入一条空的数据
INSERT INTO spj VALUES('S7',NULL,'J7',300);
实验结果:
-- 验证s表的实体完整性
-- (1)往s表插入一条正常的数据('S7','红旗',10,'济南')
-- (2)往s表插入一条重复的数据('S7','群众',10,'青岛')
-- (3)往s表插入一条空的数据('','创新',10,'广州')
-- 验证p表的实体完整性
-- (1)往p表插入一条正常的数据('P7','轮胎',null,20)
-- (2)往p表插入一条重复的数据('P7','轮胎',null,20)
-- (3)往p表插入一条空的数据(NULL,'钉子',null,5)
-- 验证j表的实体完整性
-- (1)往j表插入一条正常的数据('J8','造车厂','上海')
-- (2)往j表插入一条重复的数据('J8','造车厂','上海')
-- (3)往j表插入一条空的数据(NULL,'轮胎厂','南京')
-- 验证spj表的实体完整性
-- (1)往spj表插入一条正常的数据('S7','P6','J7',300)
-- (2)往spj表插入一条重复的数据('S7','P6','J7',300)
-- (3)往spj表插入一条空的数据('S7',NULL,'J7',300)
结果分析:
由于s、p、j表创建表时定义的完整性约束,所以不可以插入重复数据,不可以插入主码为null的数据,上述语句即验证了完整性约束。文章来源:https://www.toymoban.com/news/detail-478740.html
文章来源地址https://www.toymoban.com/news/detail-478740.html
到了这里,关于实验四 数据库安全性和完整性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!