實驗四 數(shù)據(jù)庫安全性和完整性
一.實驗?zāi)康?/strong>
1.加深對數(shù)據(jù)庫安全性和完整性理解;
2.學(xué)會授權(quán)與回收;
4.理解并體會數(shù)據(jù)庫實體完整性、參照完整性、用戶定義的完整性約束條件的作用。
二. 實驗內(nèi)容
對已建好的各表和用戶進行權(quán)限的授權(quán)和回收操作,進行完操作之后檢查授權(quán)過的用戶是否真正具有授予的數(shù)據(jù)操作的權(quán)力了,進行完權(quán)力收回操作之后的用戶是否確實喪失了收回的數(shù)據(jù)操作的權(quán)力。
定義各種完整性約束條件,之后輸入各種數(shù)據(jù)以驗證約束條件的作用
- 設(shè)置用戶a對SPJ表的查詢權(quán)限。以a登錄,驗證a的權(quán)限。
實驗過程:
(1)先創(chuàng)建a用戶,密碼為“password”:
CREATE USER 'a' IDENTIFIED WITH mysql_native_password BY'password';
????? (2)沒授權(quán)之前驗證a的權(quán)限:
???????????? 登錄:
運行查詢語句:
SELECT sno
from spj
發(fā)現(xiàn)是沒有對數(shù)據(jù)庫的訪問權(quán)限的:
(3)再進行授權(quán):
GRANT SELECT
ON spj
TO a;
????? (4)登錄驗證a的權(quán)限:
SELECT sno
from spj
????????????
實驗結(jié)果:
創(chuàng)建:
授權(quán):
結(jié)果分析:
創(chuàng)建用戶時,創(chuàng)建’a’@%,不要創(chuàng)建a@host,否則不能授權(quán)。
- 設(shè)置用戶b對S表、P表具有修改的權(quán)限,并要求b能夠?qū)⒃摍?quán)限授予其它用戶c。分別以b、c登錄,驗證b、c的權(quán)限。
實驗過程:
(1)創(chuàng)建b用戶,密碼為“bpassword”:
CREATE USER 'b' IDENTIFIED WITH mysql_native_password BY'bpassword';
(2)創(chuàng)建c用戶,密碼為“cpassword”:
CREATE USER 'c' IDENTIFIED WITH mysql_native_password BY'cpassword';
????? (3)進行授權(quán)(授予查詢和修改權(quán)限,只授予修改權(quán)限不可以):
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用戶,驗證權(quán)限:
????????????
(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,執(zhí)行授權(quán)權(quán)限,授予c對s、p表的查詢和修改權(quán)限
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改為“為民”,城市改為“上?!?/p>
UPDATE s
SET SNAME='為民',CITY='上海'
WHERE sno='S1';
(9)將p表中p1改為螺母,顏色改為藍
UPDATE p
SET PNAME='螺母',COLOR='藍'
WHERE pno='p1';
實驗結(jié)果:
(1)創(chuàng)建b用戶,密碼為“bpassword”:
(2)創(chuàng)建c用戶,密碼為“cpassword”:
????? (3)進行授權(quán)(授予查詢和修改權(quán)限,只授予修改權(quán)限不可以):
????? (4)登錄b用戶,驗證權(quán)限:
????????????
(5)登錄b將s表s5中SNAME改為“為人民”,城市改為“北京”
(6)將p表中p1改為螺絲,顏色改為紅
?????? ?? ??
(7)登錄b,執(zhí)行授權(quán)權(quán)限,授予c對s、p表的查詢和修改權(quán)限
(8)登錄c,將s表s5中SNAME改為“為民”,城市改為“上?!?/p>
?????? (9)將p表中p1改為螺母,顏色改為藍
結(jié)果分析:
??????? 授予某用戶修改權(quán)限的時候記得同時授予查詢權(quán)限,沒有select就不能update
- 收回用戶a、b的權(quán)限,并驗證用戶c權(quán)限的情況。
實驗過程:
????? (1)收回a對spj表的查詢權(quán)限:
REVOKE SELECT
on spj
FROM a;
????? (2)收回b對s、p表的更改權(quán)限:
REVOKE UPDATE
on s
FROM b;
REVOKE UPDATE
on p
FROM b;
(3)驗證用戶c是否還有對s、p表的更改權(quán)限:
登錄c:
將s表s5中SNAME改為“為國”,城市改為“廣州”
UPDATE s
SET SNAME='為國',CITY='廣州'
WHERE sno='S1';
將p表中p1改為螺絲,顏色改為綠
UPDATE p
SET PNAME='螺絲',COLOR='綠'
WHERE pno='p1';
實驗結(jié)果:
????? (1)收回a對spj表的查詢權(quán)限:
????? (2)收回b對s、p表的更改權(quán)限:
????? (3)驗證用戶c是否還有對s、p表的更改權(quán)限:
???????
結(jié)果分析:
?????? 只收回了b的權(quán)限,b授予c的權(quán)限并沒有收回,說明mysql并沒有進行級聯(lián)回收。
4.對實驗1中創(chuàng)建的表,用圖形用戶界面建立外鍵聯(lián)系,并驗證外鍵的作用。
實驗過程:
- 右鍵----設(shè)計表----外鍵----創(chuàng)建外鍵
?
(2)驗證外鍵作用:(在spj表中插入一條違背外鍵約束的數(shù)據(jù))
往spj表插入('S8','P1','J9',200):
INSERT INTO spj VALUES('S8','P1','J9',300);
實驗結(jié)果:
?結(jié)果分析:
?? ?S表最大到S6,p表最大到P6,j表最大到J7,插入的數(shù)據(jù)是違背外鍵約束的,所以會報錯。
?5.?? ?對實驗1中創(chuàng)建的表,設(shè)置零件的顏色必須在紅、橙、黃、綠、青、藍、紫 七種顏色范圍內(nèi),零件重量不能超過50的約束條件,并給這兩種約束條件命名,名字為自己姓名的全拼。
實驗過程:
(1)添加約束:
ALTER TABLE p
ADD CONSTRAINT pengzhen CHECK(COLOR in ('紅','橙','黃','綠','青','藍','紫')and WEIGHT<=50);
(2)驗證約束有沒有用,把p表里P1的“綠“改為“赤”
UPDATE p
SET color='赤'
WHERE pno='P1';
實驗結(jié)果:
(1)添加約束:
(2)驗證約束有沒有用,把p表里P1的“綠“改為“赤”
結(jié)果分析:
??????? 驗證約束有沒有用,把p表里P1的“綠“改為“赤”,運行會報錯,pengzhen約束已存在。數(shù)據(jù)自然改不了了。
6.?? ?設(shè)置SPJ表中供應(yīng)零件的數(shù)量都不能超過1000
實驗過程:
????? (1)添加約束:
ALTER TABLE spj
add CHECK(QTY<=1000);
- 在spj表里將第一條數(shù)據(jù)的QTY修改為1200
UPDATE spj
SET QTY=1200
WHERE sno='S1' AND pno='P1' AND jno='J4';
實驗結(jié)果:
- 添加約束:
(2)在spj表里將第一條數(shù)據(jù)的QTY修改為1200
結(jié)果分析:
由于約束的存在,不能將數(shù)據(jù)修改為大于1000的數(shù)。
7.?? ?設(shè)置S表中的供應(yīng)商號以字母‘S’開頭
實驗過程:
ALTER TABLE s
add CHECK(sno like 's%');
實驗結(jié)果:
?
結(jié)果分析:
?? ??? ?創(chuàng)建約束,CHECK(sno like 's%')
?
8.?? ?驗證各個表的實體完整性。
實驗過程:
-- 驗證s表的實體完整性
-- (1)往s表插入一條正常的數(shù)據(jù)
INSERT INTO s VALUES('S7','紅旗',10,'濟南');
-- (2)往s表插入一條重復(fù)的數(shù)據(jù)
INSERT INTO s VALUES('S7','群眾',10,'青島');
-- (3)往s表插入一條空的數(shù)據(jù)
INSERT INTO s VALUES('','創(chuàng)新',10,'廣州');
-- 驗證p表的實體完整性
-- (1)往p表插入一條正常的數(shù)據(jù)
INSERT INTO p VALUES('P7','輪胎',null,20);
-- (2)往p表插入一條重復(fù)的數(shù)據(jù)
INSERT INTO p VALUES('P7','輪胎',null,20);
-- (3)往p表插入一條空的數(shù)據(jù)
INSERT INTO p VALUES(NULL,'釘子',null,5);
-- 驗證j表的實體完整性
-- (1)往j表插入一條正常的數(shù)據(jù)
INSERT INTO j VALUES('J8','造車廠','上海');
-- (2)往j表插入一條重復(fù)的數(shù)據(jù)
INSERT INTO j VALUES('J8','造車廠','上海');
-- (3)往j表插入一條空的數(shù)據(jù)
INSERT INTO j VALUES(NULL,'輪胎廠','南京');
-- 驗證spj表的實體完整性
-- (1)往spj表插入一條正常的數(shù)據(jù)
INSERT INTO spj VALUES('S7','P6','J7',300);
-- (2)往spj表插入一條重復(fù)的數(shù)據(jù)
INSERT INTO spj VALUES('S7','P6','J7',300);
-- (3)往spj表插入一條空的數(shù)據(jù)
INSERT INTO spj VALUES('S7',NULL,'J7',300);
實驗結(jié)果:
-- 驗證s表的實體完整性
-- (1)往s表插入一條正常的數(shù)據(jù)('S7','紅旗',10,'濟南')
?
-- (2)往s表插入一條重復(fù)的數(shù)據(jù)('S7','群眾',10,'青島')
-- (3)往s表插入一條空的數(shù)據(jù)('','創(chuàng)新',10,'廣州')
-- 驗證p表的實體完整性
-- (1)往p表插入一條正常的數(shù)據(jù)('P7','輪胎',null,20)
-- (2)往p表插入一條重復(fù)的數(shù)據(jù)('P7','輪胎',null,20)
-- (3)往p表插入一條空的數(shù)據(jù)(NULL,'釘子',null,5)
-- 驗證j表的實體完整性
-- (1)往j表插入一條正常的數(shù)據(jù)('J8','造車廠','上海')
-- (2)往j表插入一條重復(fù)的數(shù)據(jù)('J8','造車廠','上海')
-- (3)往j表插入一條空的數(shù)據(jù)(NULL,'輪胎廠','南京')
-- 驗證spj表的實體完整性
-- (1)往spj表插入一條正常的數(shù)據(jù)('S7','P6','J7',300)
-- (2)往spj表插入一條重復(fù)的數(shù)據(jù)('S7','P6','J7',300)
-- (3)往spj表插入一條空的數(shù)據(jù)('S7',NULL,'J7',300)
結(jié)果分析:
??????? 由于s、p、j表創(chuàng)建表時定義的完整性約束,所以不可以插入重復(fù)數(shù)據(jù),不可以插入主碼為null的數(shù)據(jù),上述語句即驗證了完整性約束。文章來源:http://www.zghlxwxcb.cn/news/detail-478740.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-478740.html
到了這里,關(guān)于實驗四 數(shù)據(jù)庫安全性和完整性的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!