安全性是所有數據庫管理系統的一個重要特征。理解安全性問題是理解數據庫管理系統安全性機制的前提。
1.第一個安全性問題:當用戶登錄數據庫系統時,如何確保只有合法的用戶才能登錄到系統中?這是一個最基本的安全性問題,也是數據庫管理系統提供的基本功能。
在Microsoft SQL Server 2008系統中,通過身份驗證模式和主體解決這個問題。
1)身份驗證模式
Microsoft SQL Server 2008系統提供了兩種身份驗證模式:Windows身份驗證模式和混合模式。
Windows身份驗證模式:
在該模式中,用戶通過Windows用戶賬戶連接SQL Server時,使用Windows操作系統中的賬戶名和密碼。
混合模式:
在混合模式中,當客戶端連接到服務器時,既可能采取Windows身份驗證,也可能采取SQL Server身份驗證。
主體是可以請求系統資源的個體或組合過程。例如,數據庫用戶是一種主體,可以按照自己的權限在數據庫中執行操作和使用相應的數據。
2)主體
主體是可以請求系統資源的個體或組合過程。例如,數據庫用戶是一種主體,可以按照自己的權限在數據庫中執行操作和使用相應的數據。
Microsoft SQL Server 2008系統有多種不同的主體,不同主體之間的關系是典型的層次結構關系,位於不同層次上的主體其在系統中影響的范圍也不同。位於層次比較高的主體,其作用范圍比較大;位於層次比較低的主體,其作用范圍比較小。

2.第二個安全性問題:當用戶登錄到系統中,他可以執行哪些操作、使用哪些對象和資源?
在Microsoft SQL Server 2008系統中,通過安全對象和權限設置來解決這個問題。

3.第三個安全性問題:數據庫中的對象由誰所有?如果是由用戶所有,那么當用戶被刪除時,其所擁有的對象怎么辦,難道數據庫對象可以成為沒有所有者的“孤兒”嗎?
在Microsoft SQL Server 2008系統中,這個問題是通過用戶和架構分離來解決的。

安全機制的5個等級:
客戶機安全機制
網絡傳輸的安全機制
實例級別安全機制
數據庫級別安全機制
對象級別安全機制
四.角色
1.固定服務器角色
v固定服務器角色是服務器級別的主體,它們的作用范圍是整個服務器。
v固定服務器角色已經具備了執行指定操作的權限,可以把其他登錄名作為成員添加到固定服務器角色中,這樣該登錄名可以繼承固定服務器角色的權限。
固定服務器角色的特點
v在Microsoft SQL Server系統中,可以把登錄名添加到固定服務器角色中,使登錄名作為固定服務器角色的成員繼承固定服務器角色的權限。
v對於登錄名來說,可以選擇其是否成為某個固定服務器角色的成員
按照從最低級別的角色(bulkadmin)到最高級別的角色(sysadmin)的順序進行描述:
Bulkadmin:這個服務器角色的成員可以運行BULK INSERT語句。這條語句允許從文本文件中將數據導入到SQL Server 2008數據庫中,為需要執行大容量插入到數據庫的域賬戶而設計。
Dbcreator:這個服務器角色的成員可以創建、更改、刪除和還原任何數據庫。這不僅是適合助理DBA的角色,也可能是適合開發人員的角色。
Diskadmin:這個服務器角色用於管理磁盤文件,比如鏡像數據庫和添加備份設備。它適合助理DBA。
Processadmin:SQL Server 2008能夠多任務化,也就是說可以通過執行多個進程做多個事件。例如,SQL Server 2008可以生成一個進程用於向高速緩存寫數據,同時生成另一個進程用於從高速緩存中讀取數據。這個角色的成員可以結束(在SQL Server 2008中稱為刪除)進程。
Securityadmin:這個服務器角色的成員將管理登錄名及其屬性。他們可以授權、拒絕和撤銷服務器級權限。也可以授權、拒絕和撤銷數據庫級權限。另外,它們可以重置SQL Server 2008登錄名的密碼。
Serveradmin:這個服務器角色的成員可以更改服務器范圍的配置選項和關閉服務器。例如SQL Server 2008可以使用多大內存或監視通過網絡發送多少信息,或者關閉服務器,這個角色可以減輕管理員的一些管理負擔。
Setupadmin:為需要管理鏈接服務器和控制啟動的存儲過程的用戶而設計。這個角色的成員能添加到setupadmin,能增加、刪除和配置鏈接服務器,並能控制啟動過程。
Sysadmin:這個服務器角色的成員有權在SQL Server 2008中執行任何任務。
Public:有兩大特點,第一,初始狀態時沒有權限;第二,所有的數據庫用戶都是它的成員。
2.數據庫角色
三種類型的數據庫角色:
固定數據庫角色:微軟提供的作為系統一部分的角色;
用戶定義的標准數據庫角色:你自己定義的角色,將Windows用戶以一組自定義的權限分組;
應用程序角色:用來授予應用程序專門的權限,而非授予用戶組或者單獨用戶。
1)固定數據庫角色
微軟提供了9個內置的角色,以便於在數據庫級別授予用戶特殊的權限集合
db_owner:該角色的用戶可以在數據庫中執行任何操作。
db_accessadmin:該角色的成員可以從數據庫中增加或者刪除用戶。
db_backupopperator:該角色的成員允許備份數據庫。
db_datareader:該角色的成員允許從任何表讀取任何數據。
db_datawriter:該角色的成員允許往任何表寫入數據。
db_ddladmin:該角色的成員允許在數據庫中增加、修改或者刪除任何對象(即可以執行任何DDL語句)。
db_denydatareader:該角色的成員被拒絕查看數據庫中的任何數據,但是他們仍然可以通過存儲過程來查看。
db_denydatawriter: 像db_denydatareader角色,該角色的成員被拒絕修改數據庫中的任何數據,但是他們仍然可以通過存儲過程來修改。
db_securityadmin:該角色的成員可以更改數據庫中的權限和角色。
public:在SQL Server 2008中每個數據庫用戶都屬於public數據庫角色。當尚未對某個用戶授予或者拒絕對安全對象的特定權限時,這該用戶將據稱授予該安全對象的public角色的權限,這個數據庫角色不能被刪除
3)應用程序角色
應用程序角色允許用戶為特定的應用程序創建密碼保護的角色。
五.權限
1.常用的權限
安全對象 |
常用權限 |
數據庫 |
CREATE DATABASE、CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE VIEW、CREATE TABLE、CREATE RULE、BACKUP DATABASE、BACKUP LOG |
表 |
SELECT、DELETE、INSERT、UPDATE、REFERENCES |
表值函數 |
SELECT、DELETE、INSERT、UPDATE、REFERENCES |
視圖 |
SELECT、DELETE、INSERT、UPDATE、REFERENCES |
存儲過程 |
EXECUTE、SYNONYM |
標量函數 |
EXECUTE、REFERENCES |
9.6.4 操作權限
權限分為3種狀態:授予、拒絕、撤銷,可以使用如下的語句來修改權限的狀態。
授予權限(GRANT):授予權限以執行相關的操作。通過角色,所有該角色的成員繼承此權限。
撤銷權限(REVOKE):撤銷授予的權限,但不會顯示阻止用戶或角色執行操作。用戶或角色仍然能繼承其他角色的GRANT權限。
拒絕權限(DENY):顯式拒絕執行操作的權限,並阻止用戶或角色繼承權限,該語句優先於其他授予的權限。
1.授予權限
本語法格式:
GRANT
{ALL|statement[,..n] }
TO security_account[,..n]
ALL:表示希望給該類型的對象授予所有可用的權限。不推薦使用此選項,保留些選項僅用於向后兼容。授予ALL參數相當於授予以下權限:
如果安全對象為數據庫,則ALL表示CREATE DATABASE、CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE VIEW、CREATE TABLE、CREATE RULE等權限。
如果安全對象為標量函數,則ALL表示EXECUTE和REFERENCES。
如果安全對象為表值函數,則ALL表示SELECT、DELETE、INSERT、UPDATE、REFERENCES。
如果安全對象為存儲過程,則ALL表示EXECUTE、SYNONYM。
如果安全對象為表,則ALL表示SELECT、DELETE、INSERT、UPDATE、REFERENCES。
如果安全對象為視圖,則ALL表示SELECT、DELETE、INSERT、UPDATE、REFERENCES。
Statement:表示可以授予權限的命令,例如,CREATE DATABASE。
security_account:表示定義被授予權限的用戶單位。security_account可以是SQL Server的數據庫用戶,可以是SQL Server的角色,也可以是Windows的用戶或工作組