【文章內(nèi)容簡(jiǎn)介】
, 39。P8手機(jī)39。, 39。手機(jī)39。, 2499, 39。華為39。)第五章一、單項(xiàng)選擇題BADCB CABDD二、填空題網(wǎng)絡(luò)系統(tǒng)合法權(quán)限檢查機(jī)制自主,強(qiáng)制視圖機(jī)制,審計(jì),數(shù)據(jù)加密dbo,guest,dbopublic數(shù)據(jù)庫(kù)對(duì)象,操作類型Windows,混合三、簡(jiǎn)答題數(shù)據(jù)庫(kù)的安全性是指保護(hù)數(shù)據(jù)庫(kù)以防止不合法的使用所造成的數(shù)據(jù)泄漏、更改或破壞。數(shù)據(jù)庫(kù)的完整性是指數(shù)據(jù)庫(kù)的任何狀態(tài)變化都能反映真實(shí)存在的客觀世界的合理狀態(tài),數(shù)據(jù)庫(kù)中的數(shù)據(jù)應(yīng)始終保持正確且合理的狀態(tài)。也就是說,數(shù)據(jù)庫(kù)的完整性是指數(shù)據(jù)的正確性和相容性。兩者的定義已經(jīng)看出兩者的區(qū)別,而兩者的聯(lián)系主要體現(xiàn)在觸發(fā)器機(jī)制既可以用來實(shí)現(xiàn)完整性,也可以用來實(shí)現(xiàn)安全性。數(shù)據(jù)庫(kù)安全性控制的常用方法和技術(shù)有:用戶標(biāo)識(shí)和鑒別;存取控制;視圖機(jī)制;審計(jì);數(shù)據(jù)加密。在SQL Server中,有登錄名和數(shù)據(jù)庫(kù)用戶兩個(gè)概念。登錄名是驗(yàn)證用戶是否有權(quán)限連接到SQL Server服務(wù)器,數(shù)據(jù)庫(kù)用戶是驗(yàn)證用戶登錄服務(wù)器后是否有對(duì)服務(wù)器上的某個(gè)數(shù)據(jù)庫(kù)進(jìn)行操作的權(quán)限。用戶必須擁有和自己登錄名對(duì)應(yīng)的數(shù)據(jù)庫(kù)用戶才可以對(duì)某個(gè)數(shù)據(jù)庫(kù)進(jìn)行操作,這樣增強(qiáng)了數(shù)據(jù)庫(kù)的安全性,避免了一個(gè)用戶在登錄到服務(wù)器后可以對(duì)服務(wù)器上的所有數(shù)據(jù)庫(kù)進(jìn)行操作。DBA可以用CREATE LOGIN和DROP LOGIN創(chuàng)建和刪除登錄名,用CREATE USER和DROP USER創(chuàng)建和刪除數(shù)據(jù)庫(kù)用戶。角色是被命名的一組與數(shù)據(jù)庫(kù)操作相關(guān)的權(quán)限,角色是權(quán)限的集合。可以為一組具有相同權(quán)限的數(shù)據(jù)庫(kù)用戶創(chuàng)建一個(gè)角色,所以也可以說角色是具有相同權(quán)限的數(shù)據(jù)庫(kù)用戶組。對(duì)一個(gè)角色授權(quán)或收回權(quán)限適用于該角色的所有成員,因此使用角色來管理權(quán)限可以簡(jiǎn)化授權(quán)的過程。DBA可以用CREATE ROLE和DROP ROLE創(chuàng)建和刪除角色,用系統(tǒng)存儲(chǔ)過程sp_addrolemember和sp_droprolemember為角色添加成員和從角色刪除成員。固定角色是系統(tǒng)內(nèi)置的(預(yù)先定義好的),用戶不能添加、修改或刪除固定角色,只能修改固定角色的成員。固定角色分為固定服務(wù)器角色和固定數(shù)據(jù)庫(kù)角色兩大類。固定服務(wù)器角色有八種,其成員是登錄名;而固定數(shù)據(jù)庫(kù)角色有十種,其成員是數(shù)據(jù)庫(kù)用戶。DBA可以用系統(tǒng)存儲(chǔ)過程sp_addsrvrolemember為某個(gè)固定服務(wù)器角色添加成員,用sp_dropsrvrolemember從某個(gè)固定服務(wù)器角色中刪除成員。DBA可以用系統(tǒng)存儲(chǔ)過程sp_addrolemember為某個(gè)固定數(shù)據(jù)庫(kù)角色添加成員,用sp_droprolemember從某個(gè)固定數(shù)據(jù)庫(kù)角色中刪除成員。第六章一、單項(xiàng)選擇題DCBAC ACADB二、填空題GO@多語(yǔ)句表值型游標(biāo)TSQLsp_VARYINGUPDATEDML三、簡(jiǎn)答題批是一起提交給SQL Server服務(wù)器執(zhí)行的一個(gè)或多個(gè)TSQL語(yǔ)句的集合。由于批中的語(yǔ)句是作為一個(gè)整體發(fā)送給SQL Server服務(wù)器進(jìn)行語(yǔ)法分析、優(yōu)化、編譯和執(zhí)行,所以大大提高了執(zhí)行效率。批也常常被用在某些事必須在前面做,或者必須與其他事分開的腳本中。一條SET語(yǔ)句只能給一個(gè)變量賦值,而一條SELECT語(yǔ)句可以給多個(gè)變量賦值。另外,SELECT語(yǔ)句也可以把查詢的結(jié)果存放到局部變量中保存起來。關(guān)閉游標(biāo)意味著釋放當(dāng)前數(shù)據(jù)結(jié)果集,并解除定位于游標(biāo)的行上的游標(biāo)鎖定;關(guān)閉游標(biāo)并不釋放它占用的數(shù)據(jù)結(jié)構(gòu)以便重新打開,但在重新打開游標(biāo)之前,不允許讀取和定位修改。如果一個(gè)游標(biāo)名或游標(biāo)變量是最后引用游標(biāo)的名稱或變量,則釋放游標(biāo)后,游標(biāo)使用的任何資源也隨之釋放。存儲(chǔ)過程是一組實(shí)現(xiàn)某個(gè)特定功能的TSQL語(yǔ)句的集合,經(jīng)預(yù)編譯后存儲(chǔ)在服務(wù)器上的數(shù)據(jù)庫(kù)中。存儲(chǔ)過程可以避免代碼的重復(fù),隱藏SQL的細(xì)節(jié),實(shí)現(xiàn)對(duì)業(yè)務(wù)邏輯的封裝。存儲(chǔ)過程既提高了執(zhí)行效率,又減少了網(wǎng)絡(luò)流量,降低了網(wǎng)絡(luò)負(fù)載。另外,系統(tǒng)管理員可以通過對(duì)執(zhí)行存儲(chǔ)過程的權(quán)限進(jìn)行限制,避免非授權(quán)用戶對(duì)數(shù)據(jù)的訪問,保證數(shù)據(jù)的安全性。觸發(fā)器作為一種特殊類型的存儲(chǔ)過程,不同于存儲(chǔ)過程,觸發(fā)器不能被顯式地調(diào)用,當(dāng)觸發(fā)器所定義的觸發(fā)事件發(fā)生時(shí),觸發(fā)器被觸發(fā)而自動(dòng)執(zhí)行。觸發(fā)器的主要作用是能夠?qū)崿F(xiàn)比參照完整性更為復(fù)雜的兩張表或多張表之間的數(shù)據(jù)的完整性和一致性,從而保證表中數(shù)據(jù)的變化符合數(shù)據(jù)庫(kù)設(shè)計(jì)者所確定的業(yè)務(wù)規(guī)則。觸發(fā)器也可以用來實(shí)現(xiàn)數(shù)據(jù)庫(kù)的安全性。四、SQL語(yǔ)言 INSERT INTO Customers VALUES(39。1234567839。,39。張永斌39。,39。男39。,35,39。上海市39。,13612345678,39。ybzhang@39。) INSERT INTO Customers VALUES(39。1234568039。,39。李元祥39。,39。男39。,23,39。上海市39。,13612345680,39。yxli@39。) INSERT INTO Customers VALUES(39。1234568239。,39。王雪旖39。,39。女39。,19,39。蘇州市39。,13612345682,39。xywang@39。) INSERT INTO Goods VALUES(39。14001012339。, 39。39。, 39。空調(diào)39。, 2799, 39。海爾39。) INSERT INTO Goods VALUES(39。14005023439。, 39。B199電信手機(jī)39。, 39。手機(jī)39。, 999, 39。華為39。) INSERT INTO Goods VALUES(39。15002023439。, 39。16G至尊高速TF卡 39。, 39。存儲(chǔ)卡39。, 39, 39。閃迪39。) INSERT INTO Goods VALUES(39。15005011139。, 39。P8手機(jī)39。, 39。手機(jī)39。, 2499, 39。華為39。) INSERT INTO Sells VALUES(39。2014001234567839。,39。2014100139。,39。上海市39。,39。1234567839。,39。N39。) INSERT INTO Sells VALUES(39。2014001234568039。,39。2014111139。,39。上海市39。,39。1234568039。,39。Y39。) INSERT INTO Detail VALUES(39。2014001234567839。,39。14001012339。,3) INSERT INTO Detail VALUES(39。2014001234568039。,39。14005023439。,1) INSERT INTO Detail VALUES(39。2014001234568039。,39。15002023439。,2) CREATE FUNCTION F_年銷售總金額(@年份 smallint = 2014) RETURNS real BEGIN DECLARE @總金額 real SELECT @總金額=SUM(Quantity*Price) FROM Sells S JOIN Detail D ON = JOIN Goods G ON = WHERE YEAR(Sdate)=@年份 RETURN @總金額 END GO PRINT (DEFAULT) PRINT (2015) CREATE FUNCTION F_年各月份銷售總金額(@年份 smallint = 2014) RETURNS TABLE RETURN ( SELECT 月份, SUM(Quantity*Price) 月銷售總金額 FROM ( SELECT MONTH(Sdate) 月份, Quantity, Price FROM Sells S JOIN Detail D ON = JOIN Goods G ON = WHERE YEAR(Sdate)=@年份 ) AS Temp GROUP BY 月份 ) GO SELECT * FROM (DEFAULT) SELECT * FROM (2015) CREATE PROC P_年銷售總金額 @年份 smallint = 2014, @總金額 real OUTPUT AS IF @年份 IS NULL RETURN 2 IF NOT EXISTS (SELECT * FROM Sells WHERE YEAR(Sdate)=@年份) RETURN 1 SELECT @總金額=SUM(Quantity*Price) FROM Sells S JOIN Detail D ON = JOIN Goods G ON = WHERE YEAR(Sdate)=@年份 RETURN 0 GO下面是一個(gè)執(zhí)行該自定義存儲(chǔ)過程的示例: DECLARE @返回值 smallint, @總金額 real EXEC @返回值 = P_年銷售總金額 DEFAULT, @總金額 OUTPUT IF @返回值 = 2 PRINT 39。必須提供年份 !39。 ELSE IF @返回值 = 1 PRINT 39。該年份沒有銷售記錄 !39。 ELSE PRINT @總金額 GO ALTER TABLE Sells ADD Smoney decimal(12,2) DEFAULT 0 GO CREATE PROC P_計(jì)算銷售單金額 AS DECLARE @Sno char(14), @Smoney decimal(12,2) DECLARE CUR_S CURSOR FOR SELECT Sno, Smoney FROM Sells OPEN CUR_S FETCH NEXT FROM CUR_S INTO @Sno, @Smoney WHILE @@fetch_status=0 BEGIN SELECT @Smoney = SUM(Quantity*Price) FROM Detail D JOIN Goods G ON = WHERE Sno = @Sno UPDATE Sells SET Smoney = @Smoney WHERE CURRENT OF CUR_S FETCH NEXT FROM CUR_S INTO @Sno, @Smoney END CLOSE CUR_S DEALLOCATE CUR_S GO執(zhí)行下列三句語(yǔ)句,可以驗(yàn)證存儲(chǔ)過程的功能: UPDATE Sells SET Smoney = 0 EXEC P_計(jì)算銷售單金額 SELECT * FROM Sells