角色
當幾個用戶需要在某個特定的數據庫中執行類似的動作時(這里沒有相應的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 pintable命令(從而使表常駐於主內存中)
運行系統過程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 |
|
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權限。