第1關(guān):執(zhí)行 CREATE USER 創(chuàng)建以2022100904為用戶名的用戶,同時設(shè)置其密碼為root1234
#請在此處添加實現(xiàn)代碼
########## Begin ##########
CREATE USER '2022100904'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root1234';
########## End ##########
#以下代碼禁止刪除
SELECT mysql.user.Host, mysql.user.User FROM mysql.user WHERE USER = '2022100904';
第2關(guān):給予創(chuàng)建的用戶2022100904在mydata數(shù)據(jù)庫中授予"J" 表 SELECT 權(quán)限(注意創(chuàng)建權(quán)限時的用戶名為'用戶名'@'localhost'),不允許轉(zhuǎn)授此權(quán)限給其它用戶。
USE mydata;
#請在此處添加實現(xiàn)代碼
########## Begin ##########
grant select on mydata.J to '2022100904'@'localhost';
########## End ##########
#以下代碼禁止刪除
SHOW GRANTS FOR '2022100904'@'localhost';
第3關(guān):給予創(chuàng)建的用戶2022100904、2022100908在mydata數(shù)據(jù)庫中授予"J" 表 ALL PRIVILEGES權(quán)限(注意創(chuàng)建權(quán)限時的用戶名為'用戶名'@'localhost'),不允許轉(zhuǎn)授此權(quán)限給其它用戶。
USE mydata;
#請在此處添加實現(xiàn)代碼
########## Begin ##########
grant all on mydata.J to '2022100904'@'localhost';
grant all on mydata.J to '2022100908'@'localhost';
########## End ##########
#以下代碼禁止刪除
SHOW GRANTS FOR '2022100904'@'localhost';
SHOW GRANTS FOR '2022100908'@'localhost';
第4關(guān):給予創(chuàng)建的用戶2022100904在mydata數(shù)據(jù)庫中授予“J”表的UPDATE和INSERT權(quán)限,允許轉(zhuǎn)授此權(quán)限給其它用戶。
工程項目表J由工程項目代碼(JNO)、工程項目名(JNAME)、工程項目所在城市(CITY)組成。 J表如下圖:
USE mydata;
#請在此處添加實現(xiàn)代碼
########## Begin ##########
grant update,insert on mydata.J to '2022100904'@'localhost' with grant option;
########## End ##########
#以下代碼禁止刪除
SHOW GRANTS FOR '2022100904'@'localhost';
第5關(guān):回收用戶2022100904在mydata數(shù)據(jù)庫中授予的 "J" 表 SELECT權(quán)限(回收權(quán)限時的用戶名為'用戶名'@'localhost')。
USE mydata;
#請在此處添加實現(xiàn)代碼
########## Begin ##########
revoke select on mydata.J from '2022100904'@'localhost';
########## End ##########
#以下代碼禁止刪除
SHOW GRANTS FOR '2022100904'@'localhost';
第6關(guān):回收賬號2022100904、2022100908在mydata數(shù)據(jù)庫的中授予 的J表ALL PRIVILEGES權(quán)限(注意回收權(quán)限時的用戶名為'用戶名'@'localhost')
USE mydata;
#請在此處添加實現(xiàn)代碼
########## Begin ##########
revoke all on mydata.J from '2022100904'@'localhost';
revoke all on mydata.J from '2022100908'@'localhost';
########## End ##########
#以下代碼禁止刪除
SHOW GRANTS FOR '2022100904'@'localhost';
SHOW GRANTS FOR '2022100908'@'localhost';
第7關(guān):回收用戶2022100904在mydata數(shù)據(jù)中授予的“J”表UPDATE和INSERT的權(quán)限。(注意回收權(quán)限時的用戶名為'用戶名'@'localhost')
USE mydata;
#請在此處添加實現(xiàn)代碼
########## Begin ##########
revoke update,insert on mydata.J from '2022100904'@'localhost';
########## End ##########
#以下代碼禁止刪除
SHOW GRANTS FOR '2022100904'@'localhost';
第8關(guān):創(chuàng)建角色 'R1'
#請在此處添加實現(xiàn)代碼
########## Begin ##########
create role 'R1';
########## End ##########
#以下代碼禁止刪除
SELECT mysql.user.Host, mysql.user.User FROM mysql.user WHERE USER = 'R1';
第9關(guān):給予創(chuàng)建的角色R1在mydata數(shù)據(jù)庫中授予"J" 表 的SELECT 、UPDATE、INSERT權(quán)限。
USE mydata;
#請在此處添加實現(xiàn)代碼
########## Begin ##########
grant select,update,insert on mydata.J to 'R1';
########## End ##########
#以下代碼禁止刪除
SHOW GRANTS FOR 'R1';
第10關(guān):給予創(chuàng)建的用戶2022100904授予角色R1權(quán)限。
USE mydata;
#請在此處添加實現(xiàn)代碼
########## Begin ##########
grant 'R1' to '2022100904'@'localhost';
########## End ##########
#以下代碼禁止刪除
SHOW GRANTS FOR '2022100904'@'localhost';
第11關(guān):給予已授權(quán)限的角色R1在mydata數(shù)據(jù)庫中再次授予"J" 表 的DELETE權(quán)限。
USE mydata;
#請在此處添加實現(xiàn)代碼
########## Begin ##########
grant delete on mydata.J to 'R1';
########## End ##########
#以下代碼禁止刪除
SHOW GRANTS FOR 'R1';
第12關(guān):回收角色R1 對 J表的 INSERT 權(quán)限。
USE mydata;
#請在此處添加實現(xiàn)代碼
########## Begin ##########
revoke insert on mydata.J from 'R1';
########## End ##########
#以下代碼禁止刪除
SHOW GRANTS FOR 'R1';
第13關(guān):通過角色R1回收用戶2022100904的被授予J表的SELECT 、UPDATE、INSERT權(quán)限。
USE mydata;
#請在此處添加實現(xiàn)代碼
########## Begin ##########
revoke 'R1' from '2022100904'@'localhost';
########## End ##########
#以下代碼禁止刪除
SHOW GRANTS FOR '2022100904'@'localhost';
第14關(guān):編寫一個名為INSERT_S的觸發(fā)器,在S表執(zhí)行?INSERT?語句后被激發(fā),此觸發(fā)器將新供應(yīng)商的SNO、SNAME、STATUS、CITY及執(zhí)行此操作的用戶(USER)插入N_S表,N_S表比S表增添操作用戶一列。
供應(yīng)商表S由供應(yīng)商代碼(SNO)、供應(yīng)商姓名(SNAME)、供應(yīng)商狀態(tài)(STATUS)、供應(yīng)商所在城市(CITY)組成. S表如下圖:
N_S表由供應(yīng)商的SNO、SNAME、STATUS、CITY及執(zhí)行此操作的用戶USER組成,現(xiàn)已構(gòu)建該表,結(jié)構(gòu)信息如下:
Mysql觸發(fā)器語法:
創(chuàng)建觸發(fā)器樣例:刪除tab1表記錄后自動將tab2表中對應(yīng)的記錄刪去。
USE mydata;
#請在此處添加實現(xiàn)代碼
########## Begin ##########
DELIMITER $
CREATE TRIGGER INSERT_S
AFTER INSERT ON S
FOR EACH ROW
Begin
INSERT INTO N_S(SNO,SNAME,STATUS,CITY,USER) VALUES
('S6','深技大','20','深圳','root@localhost');
END$
DELIMITER ;
########## End ##########
#以下代碼禁止刪除
#將記錄插入S表
INSERT INTO S VALUES ('S6', '深技大', '20', '深圳');
#查看N_S表
SELECT * FROM N_S;
第15關(guān):編寫一個名為UPDATE_S的觸發(fā)器,檢查S表的STATUS,只允許0-100之間,超過100后,改為100。
供應(yīng)商表S由供應(yīng)商代碼(SNO)、供應(yīng)商姓名(SNAME)、供應(yīng)商狀態(tài)(STATUS)、供應(yīng)商所在城市(CITY)組成. S表如下圖:
Mysql觸發(fā)器語法:
創(chuàng)建觸發(fā)器樣例:刪除tab1表記錄后自動將tab2表中對應(yīng)的記錄刪去。
注意:
USE mydata;
#請在此處添加實現(xiàn)代碼
########## Begin ##########
DELIMITER $
CREATE TRIGGER UPDATE_S
BEFORE UPDATE ON S
FOR EACH ROW
BEGIN
IF(NEW.STATUS <0) OR (NEW.STATUS>100)
THEN SET NEW.STATUS=100;
END IF;
END$
DELIMITER ;
########## End ##########
#以下代碼禁止刪除
#更新S表
UPDATE S SET S.STATUS = 300 WHERE S.CITY = '天津';
#查看S表
SELECT * FROM S;
第16關(guān):編寫一個名為UPDATE_SPJ的觸發(fā)器,當SPJ表中有更新某條記錄時,自動更新表SPJ_SUMQTY表。
供應(yīng)情況表SPJ由供應(yīng)商代碼(SNO)、零件代碼(PNO)、工程項目代碼(JNO)、供應(yīng)數(shù)量(QTY)組成,標識某供應(yīng)商 供應(yīng)某種零件 給某工程項目的數(shù)量為QTY。 SPJ表如下圖:
PJ_SUMQTY表為工程零件數(shù)量統(tǒng)計表,由工程項目代碼(JNO)、零件代碼(PNO)、統(tǒng)計供應(yīng)數(shù)量SUMQTY組成,其中SUMQTY由SPJ表中的工程項目代碼(JNO)、零件代碼(PNO)、供應(yīng)數(shù)量(QTY),根據(jù)JNO、PNO匯總得到。 SPJ_SUMQTY表如下圖:
Mysql觸發(fā)器語法:
USE mydata;
#請在此處添加實現(xiàn)代碼
########## Begin ##########
DELIMITER $
CREATE TRIGGER UPDATE_SPJ
AFTER UPDATE ON SPJ
FOR EACH ROW
BEGIN
UPDATE SPJ_SUMQTY SET SUMQTY = SUMQTY + NEW.QTY - OLD.QTY
WHERE PNO = NEW.PNO AND JNO = NEW.JNO;
END $
DELIMITER ;
########## End ##########
#以下代碼禁止刪除
#更新SPJ表
UPDATE SPJ SET SPJ.QTY = SPJ.QTY + 200 WHERE SPJ.JNO = 'J5';
#查看SPJ_SUMQTY表
SELECT * FROM SPJ_SUMQTY;
第17關(guān):編寫一個名為DELETE_SPJ的觸發(fā)器,當SPJ表中有刪除某條記錄時,自動更新表SPJ_SUMQTY表。
供應(yīng)情況表SPJ由供應(yīng)商代碼(SNO)、零件代碼(PNO)、工程項目代碼(JNO)、供應(yīng)數(shù)量(QTY)組成,標識某供應(yīng)商 供應(yīng)某種零件 給某工程項目的數(shù)量為QTY。 SPJ表如下圖:
SPJ_SUMQTY表為工程零件數(shù)量統(tǒng)計表,由工程項目代碼(JNO)、零件代碼(PNO)、統(tǒng)計供應(yīng)數(shù)量SUMQTY組成,其中SUMQTY由SPJ表中的工程項目代碼(JNO)、零件代碼(PNO)、供應(yīng)數(shù)量(QTY)根據(jù)JNO、PNO匯總得到。 SPJ_SUMQTY表如下圖:文章來源:http://www.zghlxwxcb.cn/news/detail-449895.html
USE mydata;
#請在此處添加實現(xiàn)代碼
########## Begin ##########
DELIMITER $$
CREATE TRIGGER DELETE_SPJ
AFTER DELETE ON SPJ
FOR EACH ROW
BEGIN
UPDATE SPJ_SUMQTY SET SUMQTY = SUMQTY - OLD.QTY
WHERE SPJ_SUMQTY.PNO = OLD.PNO AND SPJ_SUMQTY.JNO = OLD.JNO;
DELETE FROM SPJ_SUMQTY WHERE SPJ_SUMQTY.SUMQTY <=0;
END $$
DELIMITER ;
########## End ##########
#以下代碼禁止刪除
#刪除SPJ表的某條記錄
DELETE FROM SPJ WHERE SPJ.SNO = 'S2' AND SPJ.PNO = 'P3' AND SPJ.JNO = 'J5';
DELETE FROM SPJ WHERE SPJ.SNO = 'S2' AND SPJ.PNO = 'P3' AND SPJ.JNO = 'J1';
#查看SPJ_SUMQTY表
SELECT * FROM SPJ_SUMQTY;
第18關(guān):編寫一個名為INSERT_SPJ的觸發(fā)器,當SPJ表中有插入某條記錄時,自動更新表SPJ_SUMQTY表。
供應(yīng)情況表SPJ由供應(yīng)商代碼(SNO)、零件代碼(PNO)、工程項目代碼(JNO)、供應(yīng)數(shù)量(QTY)組成,標識某供應(yīng)商 供應(yīng)某種零件 給某工程項目的數(shù)量為QTY。 SPJ表如下圖:
SPJ_SUMQTY表為工程零件數(shù)量統(tǒng)計表,由工程項目代碼(JNO)、零件代碼(PNO)、統(tǒng)計供應(yīng)數(shù)量SUMQTY組成,其中SUMQTY由SPJ表中的工程項目代碼(JNO)、零件代碼(PNO)、供應(yīng)數(shù)量(QTY)根據(jù)JNO、PNO匯總得到。 SPJ_SUMQTY表如下圖:
文章來源地址http://www.zghlxwxcb.cn/news/detail-449895.html
USE mydata;
#請在此處添加實現(xiàn)代碼
########## Begin ##########
DELIMITER $
CREATE TRIGGER INSERT_SPJ
AFTER INSERT ON SPJ
FOR EACH ROW
BEGIN
UPDATE SPJ_SUMQTY SET SUMQTY = SUMQTY + NEW.QTY
WHERE SPJ_SUMQTY.PNO = NEW.PNO AND SPJ_SUMQTY.JNO =NEW.JNO;
IF NEW.JNO NOT IN (SELECT JNO FROM SPJ_SUMQTY)
OR NEW.PNO NOT IN (SELECT PNO FROM SPJ_SUMQTY)
THEN INSERT INTO SPJ_SUMQTY VALUES (NEW.JNO,NEW.PNO,NEW.QTY);
END IF;
END $
DELIMITER ;
########## End ##########
#以下代碼禁止刪除
#將記錄插入SPJ表
INSERT INTO SPJ VALUES ('S6', 'P1', 'J6', 200);
INSERT INTO SPJ VALUES ('S6', 'P3', 'J5', 300);
#查看SPJ_SUMQTY表
SELECT * FROM SPJ_SUMQTY;
到了這里,關(guān)于數(shù)據(jù)庫系統(tǒng)頭歌實驗八 數(shù)據(jù)庫完整性、安全設(shè)計的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!