【文章內(nèi)容簡介】
, 39。P8手機39。, 39。手機39。, 2499, 39。華為39。)第五章一、單項選擇題BADCB CABDD二、填空題網(wǎng)絡系統(tǒng)合法權(quán)限檢查機制自主,強制視圖機制,審計,數(shù)據(jù)加密dbo,guest,dbopublic數(shù)據(jù)庫對象,操作類型Windows,混合三、簡答題數(shù)據(jù)庫的安全性是指保護數(shù)據(jù)庫以防止不合法的使用所造成的數(shù)據(jù)泄漏、更改或破壞。數(shù)據(jù)庫的完整性是指數(shù)據(jù)庫的任何狀態(tài)變化都能反映真實存在的客觀世界的合理狀態(tài),數(shù)據(jù)庫中的數(shù)據(jù)應始終保持正確且合理的狀態(tài)。也就是說,數(shù)據(jù)庫的完整性是指數(shù)據(jù)的正確性和相容性。兩者的定義已經(jīng)看出兩者的區(qū)別,而兩者的聯(lián)系主要體現(xiàn)在觸發(fā)器機制既可以用來實現(xiàn)完整性,也可以用來實現(xiàn)安全性。數(shù)據(jù)庫安全性控制的常用方法和技術(shù)有:用戶標識和鑒別;存取控制;視圖機制;審計;數(shù)據(jù)加密。在SQL Server中,有登錄名和數(shù)據(jù)庫用戶兩個概念。登錄名是驗證用戶是否有權(quán)限連接到SQL Server服務器,數(shù)據(jù)庫用戶是驗證用戶登錄服務器后是否有對服務器上的某個數(shù)據(jù)庫進行操作的權(quán)限。用戶必須擁有和自己登錄名對應的數(shù)據(jù)庫用戶才可以對某個數(shù)據(jù)庫進行操作,這樣增強了數(shù)據(jù)庫的安全性,避免了一個用戶在登錄到服務器后可以對服務器上的所有數(shù)據(jù)庫進行操作。DBA可以用CREATE LOGIN和DROP LOGIN創(chuàng)建和刪除登錄名,用CREATE USER和DROP USER創(chuàng)建和刪除數(shù)據(jù)庫用戶。角色是被命名的一組與數(shù)據(jù)庫操作相關(guān)的權(quán)限,角色是權(quán)限的集合。可以為一組具有相同權(quán)限的數(shù)據(jù)庫用戶創(chuàng)建一個角色,所以也可以說角色是具有相同權(quán)限的數(shù)據(jù)庫用戶組。對一個角色授權(quán)或收回權(quán)限適用于該角色的所有成員,因此使用角色來管理權(quán)限可以簡化授權(quán)的過程。DBA可以用CREATE ROLE和DROP ROLE創(chuàng)建和刪除角色,用系統(tǒng)存儲過程sp_addrolemember和sp_droprolemember為角色添加成員和從角色刪除成員。固定角色是系統(tǒng)內(nèi)置的(預先定義好的),用戶不能添加、修改或刪除固定角色,只能修改固定角色的成員。固定角色分為固定服務器角色和固定數(shù)據(jù)庫角色兩大類。固定服務器角色有八種,其成員是登錄名;而固定數(shù)據(jù)庫角色有十種,其成員是數(shù)據(jù)庫用戶。DBA可以用系統(tǒng)存儲過程sp_addsrvrolemember為某個固定服務器角色添加成員,用sp_dropsrvrolemember從某個固定服務器角色中刪除成員。DBA可以用系統(tǒng)存儲過程sp_addrolemember為某個固定數(shù)據(jù)庫角色添加成員,用sp_droprolemember從某個固定數(shù)據(jù)庫角色中刪除成員。第六章一、單項選擇題DCBAC ACADB二、填空題GO@多語句表值型游標TSQLsp_VARYINGUPDATEDML三、簡答題批是一起提交給SQL Server服務器執(zhí)行的一個或多個TSQL語句的集合。由于批中的語句是作為一個整體發(fā)送給SQL Server服務器進行語法分析、優(yōu)化、編譯和執(zhí)行,所以大大提高了執(zhí)行效率。批也常常被用在某些事必須在前面做,或者必須與其他事分開的腳本中。一條SET語句只能給一個變量賦值,而一條SELECT語句可以給多個變量賦值。另外,SELECT語句也可以把查詢的結(jié)果存放到局部變量中保存起來。關(guān)閉游標意味著釋放當前數(shù)據(jù)結(jié)果集,并解除定位于游標的行上的游標鎖定;關(guān)閉游標并不釋放它占用的數(shù)據(jù)結(jié)構(gòu)以便重新打開,但在重新打開游標之前,不允許讀取和定位修改。如果一個游標名或游標變量是最后引用游標的名稱或變量,則釋放游標后,游標使用的任何資源也隨之釋放。存儲過程是一組實現(xiàn)某個特定功能的TSQL語句的集合,經(jīng)預編譯后存儲在服務器上的數(shù)據(jù)庫中。存儲過程可以避免代碼的重復,隱藏SQL的細節(jié),實現(xiàn)對業(yè)務邏輯的封裝。存儲過程既提高了執(zhí)行效率,又減少了網(wǎng)絡流量,降低了網(wǎng)絡負載。另外,系統(tǒng)管理員可以通過對執(zhí)行存儲過程的權(quán)限進行限制,避免非授權(quán)用戶對數(shù)據(jù)的訪問,保證數(shù)據(jù)的安全性。觸發(fā)器作為一種特殊類型的存儲過程,不同于存儲過程,觸發(fā)器不能被顯式地調(diào)用,當觸發(fā)器所定義的觸發(fā)事件發(fā)生時,觸發(fā)器被觸發(fā)而自動執(zhí)行。觸發(fā)器的主要作用是能夠?qū)崿F(xiàn)比參照完整性更為復雜的兩張表或多張表之間的數(shù)據(jù)的完整性和一致性,從而保證表中數(shù)據(jù)的變化符合數(shù)據(jù)庫設計者所確定的業(yè)務規(guī)則。觸發(fā)器也可以用來實現(xiàn)數(shù)據(jù)庫的安全性。四、SQL語言 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電信手機39。, 39。手機39。, 999, 39。華為39。) INSERT INTO Goods VALUES(39。15002023439。, 39。16G至尊高速TF卡 39。, 39。存儲卡39。, 39, 39。閃迪39。) INSERT INTO Goods VALUES(39。15005011139。, 39。P8手機39。, 39。手機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下面是一個執(zhí)行該自定義存儲過程的示例: 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_計算銷售單金額 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í)行下列三句語句,可以驗證存儲過程的功能: UPDATE Sells SET Smoney = 0 EXEC P_計算銷售單金額 SELECT * FROM Sells