[+]
SQLServer中伺服器角色和資料庫角色權限詳解
角色
當幾個使用者需要在某個特定的資料庫中執行類似的動作時(這裡沒有相應的Windows使用者組),就可以向該資料庫中添加一個角色(role)。 資料庫角色指定了可以通路相同資料庫對象的一組資料庫使用者。
資料庫角色的成員可以分為如下幾類:
Windows使用者組或使用者賬戶
SQL Server登入
其他角色
SQL Server的安全體系結構中包括了幾個含有特定隐含 權限的角色。除了資料庫擁有者建立的角色之外,還有兩類預定義的角色。這些可以建立的角色可以分為如下幾類:
固定伺服器
固定資料庫
使用者自定義
固定伺服器
由于固定伺服器是在伺服器層次上定義的,是以它們位于從屬于資料庫伺服器的資料庫外面。下表列出了所有現有的固定 伺服器角色。
固定伺服器角色 | 說 明 |
sysadmin | 執行SQL Server中的任何動作 |
serveradmin | 配置伺服器設定 |
setupadmin | 安裝複制和管理擴充過程 |
securityadmin | 管理登入和CREATE DATABASE的權限以及閱讀審計 |
processadmin | 管理SQL Server程序 |
dbcreator | 建立和修改資料庫 |
diskadmin | 管理磁盤檔案 |
下面兩個系統過程用來添加或删除固定 伺服器角色成員:
sp_addsrvrolemember
sp_dropsrvrolemember
注意:您不能添加、修改或删除固定 伺服器角色。另外,隻有固定 伺服器角色的成員才能執行上述兩個系統過程來從角色中添加或删除登入賬戶。
sa登入
sa登入是系統管理者的登入。在以前的 SQL Server版本中不存在角色,sa登入具有所有可能的關于系統管理工作的 權限。在 SQL Server 2005中,sa登入保持了向後相容性。sa登入永遠是固定 伺服器角色syadmin中的成員,并且不能從該角色中删除。
注意:隻有當沒有其他方法登入到 SQL Server系統中時,再使用sa登入。
固定伺服器角色及其權限
在某個 SQL Server系統中,每個固定 伺服器角色都有其隐含的 權限。使用系統過程sp_srvrolepermission可以浏覽每個固定 伺服器角色的 權限。該系統過程的文法形式為:
sp_srvrolepermission[[@srvrolename =] 'role']
如果沒有指定role的值,那麼所有的固定 伺服器角色的 權限都将顯示出來。下面的部分将讨論每個固定 伺服器角色的 權限。
1. sysadmin
固定 伺服器角色sysadmin的成員被賦予了 SQL Server系統中所有可能的 權限。例如,隻有這個角色中的成員(或一個被這個角色中的成員賦予了CREATE DATABASE 權限的使用者)才能夠建立資料庫。
固定 伺服器角色和sa登入之間有着特殊的關系。sa登入一直都是固定 伺服器角色中的成員,并且不能從該角色中删除。
2. serveradmin
固定 伺服器角色serveradmin的成員可以執行如下的動作:
向該 伺服器角色中添加其他登入
運作dbcc pin table指令(進而使表常駐于主 記憶體中)
運作系統過程sp_configure(以顯示或更改系統選項)
運作reconfigure選項(以更新系統過程sp_configure所做的所有改動)
使用shutdown指令關掉資料庫伺服器
運作系統過程sp_ tableoption為使用者自定義表設定選項的值
3. setupadmin
固定 伺服器角色setupadmin中的成員可以執行如下的動作:
向該 伺服器角色中添加其他登入
添加、删除或配置連結的伺服器
執行一些系統過程,如sp_serveroption
4. securityadmin
固定 伺服器角色securitypadmin中的成員可以執行關于伺服器通路和安全的所有動作。這些成員可以進行如下的系統動作:
向該 伺服器角色中添加其他登入
讀取 SQL Server的錯誤日志
運作如下的系統過程:如sp_addlinkedsrvlogin、sp_addlogin、sp_defaultdb、sp_defaultlanguage、sp_denylogin、sp_droplinkedsrvlogin、sp_droplogin、sp_grantlogin、sp_helplogins、sp_remoteoption和sp_revokelogin(所有這些系統過程都與系統安全相關。)
5. processadmin
固定 伺服器角色processadmin中的成員用來管理 SQL Server程序,如中止使用者正在運作的查詢。這些成員可以進行如下的動作:
向該 伺服器角色中添加其他登入
執行KILL指令(以取消使用者程序)
6. dbcreator
固定 伺服器角色dbcreator中的成員用來管理與資料庫建立和修改有關的所有動作。這些成員可以進行如下的動作:
向該 伺服器角色中添加其他登入
運作CREATE DATABASE和ALTER DATABASE 語句
使用系統過程sp_renamedb來修改資料庫的名稱
7. diskadmin
固定 伺服器角色diskadmin的成員可以進行如下與用來存儲資料庫對象的檔案和檔案組有關的動作:
向該 伺服器角色中添加其他登入
運作如下系統過程:sp_ddumpdevice和sp_dropdevice。
運作DISK INIT 語句
固定資料庫角色
固定 資料庫角色在資料庫層上進行定義,是以它們存在于屬于資料庫伺服器的每個資料庫中。下表列出了所有的固定 資料庫角色。
固定資料庫角色 | 說 明 |
db_owner | 可以執行資料庫中技術所有動作的使用者 |
db_accessadmin | 可以添加、删除使用者的使用者 |
db_datareader | 可以檢視所有資料庫中使用者表内資料的使用者 |
db_datawriter | 可以添加、修改或删除所有資料庫中使用者表内資料的使用者 |
db_ddladmin | 可以在資料庫中執行所有DDL操作的使用者 |
db_securityadmin | 可以管理資料庫中與安全權限有關所有動作的使用者 |
db_backoperator | 可以備份資料庫的使用者(并可以釋出DBCC和CHECKPOINT語句,這兩個語句一般在備份前都會被執行) |
db_denydatareader | 不能看到資料庫中任何資料的使用者 |
db_denydatawriter | 不能改變資料庫中任何資料的使用者 |
除了上表中列出的固定 資料庫角色之外,還有一種特殊的固定 資料庫角色,名為public,這裡将首先介紹這一角色。
public角色
public角色是一種特殊的固定 資料庫角色,資料庫的每個合法使用者都屬于該角色。它為資料庫中的使用者提供了所有預設 權限。這樣就提供了一種機制,即給予那些沒有适當 權限的所有使用者以一定的(通常是有限的) 權限。public角色為資料庫中的所有使用者都保留了預設的 權限,是以是不能被删除的。
一般情況下,public角色允許使用者進行如下的操作:
使用某些系統過程檢視并顯示master資料庫中的資訊
執行一些不需要一些 權限的 語句(例如PRINT)
固定資料庫角色及其權限
在資料庫中,每個固定 資料庫角色都有其特定的 權限。這就意味着對于某個資料庫來說,固定 資料庫角色的成員的 權限是有限的。使用系統過程sp_dbfixedrolepermission就可以檢視每個固定 資料庫角色的 權限。該系統過程的文法為:
sp_db.xedrolepermission [[@rolename =] 'role']
如果沒有指定role的值,那麼所有固定 資料庫角色的 權限都可以顯示出來。下面的幾節将讨論每個固定 資料庫角色的 權限。
1. db_owner
固定 資料庫角色db_owner的成員可以在特定的資料庫中進行如下的動作:
向其他固定 資料庫角色中添加成員,或從其中删除成員
運作所有的DDL 語句
運作BACKUP DATABASE和BACKUP LOG 語句
使用CHECKPOINT 語句顯式地啟動檢查點程序
運作下列dbcc指令:dbcc checkalloc、dbcc checkcatalog、dbcc checkdb、dbcc updateusage
授予、取消或剝奪每一個資料庫對象上的下列 權限:SELECT、INSERT、UPDATE、DELETE和REFERENCES
使用下列系統過程向資料庫中添加使用者或角色:sp_addapprole、sp_addrole、sp_addrolemember、sp_approlepassword、sp_changeobjectowner、sp_dropapprole、sp_droprole、sp_droprolemember、sp_dropuser、sp_grantdbaccess
使用系統過程sp_rename為任何資料庫對象重新命名
2. db_accessadmin
固定 資料庫角色db_accessadmin的成員可以執行與資料庫通路有關的所有動作。這些角色可以在具體的資料庫中執行下列操作:
運作下列系統過程:sp_addalias、sp_dropalias、sp_dropuser、sp_grantdbacess、sp_revokedbaccess
為Windows使用者賬戶、Windows組和 SQL Server登入添加或删除通路
3. dbdatareader
固定 資料庫角色dbdatareader的成員對資料庫中的資料庫對象(表或視圖)具有SELECT 權限。然而,這些成員不能把這個 權限授予其他任何使用者或角色。(這個限制對REVOKE 語句來說同樣成立。)
4. dbdatawriter
固定 資料庫角色dbdatawriter的成員對資料庫中的資料庫對象(表或視圖)具有INSERT、UPDATE和DELETE 權限。然而,這些成員不能把這個 權限授予其他任何使用者或角色。(這個限制對REVOKE 語句來說也同樣成立。)
5. db_ddladmin
固定 資料庫角色db_ddladmin的成員可以進行如下的動作:
運作所有DDL 語句
對任何表上授予REFERENCESE 權限
使用系統過程sp_procoption和sp_recompile來修改任何存儲過程的結構
使用系統過程sp_rename為任何資料庫對象重命名
使用系統過程sp_ tableoption和sp_changeobjectowner分别修改表的選項和任何資料庫對象的擁有者
6. db_securityadmin
固定 資料庫角色db_securityadmin的成員可以管理資料庫中的安全。這些成員可以進行如下的動作:
運作與安全有關的所有Transact- SQL 語句(GRANT、DENY和REVOKE)
運作以下系統過程:sp_addapprole、sp_addrole、sp_addrolemember、sp_approlepassword、sp_changeobjectowner、sp_dropapprole、sp_droprole、sp_droprolemember
7. db_backupoperator
固定 資料庫角色db_backupoperator的成員可以管理資料庫備份的過程。這些成員可以進行如下動作:
運作BACKUP DATABASE和BACKUP LOG 語句
用CHECKPOINT 語句顯式地啟動檢查點程序
運作如下dbcc指令:dbcc checkalloc、dbcc checkcatalog、dbcc checkdb、dbcc updateusage
8. db_denydatareader和db_denydatawriter
顧名思義,固定 資料庫角色db_denydatareader的成員對資料庫中的資料庫對象(表或視圖)沒有SELECT 權限。如果資料庫中含有敏感資料并且其他使用者不能讀取這些資料,那麼就可以使用這個角色。
固定 資料庫角色db_denydatawriter的成員對資料庫中的任何資料庫對象(表或視圖)沒有INSERT、UPDATE和DELETE 權限。