SQLServer 角色與許可權管理
安全性是所有資料庫管理系統的一個重要特徵。理解安全性問題是理解資料庫管理系統安全性機制的前提。
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固定伺服器角色已經具備了執行指定操作的許可權,可以把其他登入名作為成員新增到固定伺服器角色中,這樣該登入名可以繼承固定伺服器角色的許可權。固定伺服器角色的特點
按照從最低級別的角色(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角色的許可權,這個資料庫角色不能被刪除2)使用者自定義資料庫角色
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的使用者或工作組