當幾個用戶須要在某個特定的數據庫中執行相似的動做時(這裏沒有相應的Windows用戶組),就能夠向該數據庫中添加一個角色(role)。數據庫角色指定了能夠訪問相同數據庫對象的一組數據庫用戶。
數據庫角色的成員能夠分爲以下幾類:
Windows用戶組或用戶帳戶
SQL Server登陸
其餘角色
SQL Server的安全體系結構中包括了幾個含有特定隱含權限的角色。除了數據庫擁有者建立的角色以外,還有兩類預約義的角色。這些能夠建立的角色能夠分爲以下幾類:
固定服務器
固定數據庫
用戶自定義sql
因爲固定服務器是在服務器層次上定義的,所以它們位於從屬於數據庫服務器的數據庫外面。下表列出了全部現有的固定服務器角色。
數據庫
固定服務器角色安全 |
說 明服務器 |
sysadminantd |
執行SQL Server中的任何動做app |
serveradminspa |
配置服務器設置.net |
setupadmin日誌 |
安裝複製和管理擴展過程server |
securityadmin |
管理登陸和CREATE DATABASE的權限以及閱讀審計 |
processadmin |
管理SQL Server進程 |
dbcreator |
建立和修改數據庫 |
diskadmin |
管理磁盤文件 |
下面兩個系統過程用來添加或刪除固定服務器角色成員:
sp_addsrvrolemember
sp_dropsrvrolemember
注意:您不能添加、修改或刪除固定服務器角色。另外,只有固定服務器角色的成員才能執行上述兩個系統過程來從角色中添加或刪除登陸帳戶。
sa登陸是系統管理員的登陸。在之前的SQL Server版本中不存在角色,sa登陸具備全部可能的關於系統管理工做的權限。在SQL Server 2005中,sa登陸保持了向後兼容性。sa登陸永遠是固定服務器角色syadmin中的成員,而且不能從該角色中刪除。
注意:只有當沒有其餘方法登陸到SQL Server系統中時,再使用sa登陸。
在某個SQL Server系統中,每一個固定服務器角色都有其隱含的權限。使用系統過程sp_srvrolepermission能夠瀏覽每一個固定服務器角色的權限。該系統過程的語法形式爲:
sp_srvrolepermission[[@srvrolename =] 'role']
若是沒有指定role的值,那麼全部的固定服務器角色的權限都將顯示出來。下面的部分將討論每一個固定服務器角色的權限。
固定服務器角色sysadmin的成員被賦予了SQL Server系統中全部可能的權限。例如,只有這個角色中的成員(或一個被這個角色中的成員賦予了CREATE DATABASE權限的用戶)纔可以建立數據庫。
固定服務器角色和sa登陸之間有着特殊的關係。sa登陸一直都是固定服務器角色中的成員,而且不能從該角色中刪除。
固定服務器角色serveradmin的成員能夠執行以下的動做:
向該服務器角色中添加其餘登陸
運行dbcc pintable命令(從而使表常駐於主內存中)
運行系統過程sp_configure(以顯示或更改系統選項)
運行reconfigure選項(以更新系統過程sp_configure所作的全部改動)
使用shutdown命令關掉數據庫服務器
運行系統過程sp_tableoption爲用戶自定義表設置選項的值
固定服務器角色setupadmin中的成員能夠執行以下的動做:
向該服務器角色中添加其餘登陸
添加、刪除或配置連接的服務器
執行一些系統過程,如sp_serveroption
固定服務器角色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(全部這些系統過程都與系統安全相關。)
固定服務器角色processadmin中的成員用來管理SQL Server進程,如停止用戶正在運行的查詢。這些成員能夠進行以下的動做:
向該服務器角色中添加其餘登陸
執行KILL命令(以取消用戶進程)
固定服務器角色dbcreator中的成員用來管理與數據庫建立和修改有關的全部動做。這些成員能夠進行以下的動做:
向該服務器角色中添加其餘登陸
運行CREATE DATABASE和ALTER DATABASE語句
使用系統過程sp_renamedb來修改數據庫的名稱
固定服務器角色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角色容許用戶進行以下的操做:
使用某些系統過程查看並顯示master數據庫中的信息
執行一些不須要一些權限的語句(例如PRINT)
在數據庫中,每一個固定數據庫角色都有其特定的權限。這就意味着對於某個數據庫來講,固定數據庫角色的成員的權限是有限的。使用系統過程sp_dbfixedrolepermission就能夠查看每一個固定數據庫角色的權限。該系統過程的語法爲:
sp_db.xedrolepermission [[@rolename =] 'role']
若是沒有指定role的值,那麼全部固定數據庫角色的權限均可以顯示出來。下面的幾節將討論每一個固定數據庫角色的權限。
固定數據庫角色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爲任何數據庫對象從新命名
固定數據庫角色db_accessadmin的成員能夠執行與數據庫訪問有關的全部動做。這些角色能夠在具體的數據庫中執行下列操做:
運行下列系統過程:sp_addalias、sp_dropalias、sp_dropuser、sp_grantdbacess、sp_revokedbaccess
爲Windows用戶帳戶、Windows組和SQL Server登陸添加或刪除訪問
固定數據庫角色dbdatareader的成員對數據庫中的數據庫對象(表或視圖)具備SELECT權限。然而,這些成員不能把這個權限授予其餘任何用戶或角色。(這個限制對REVOKE語句來講一樣成立。)
固定數據庫角色dbdatawriter的成員對數據庫中的數據庫對象(表或視圖)具備INSERT、UPDATE和DELETE權限。然而,這些成員不能把這個權限授予其餘任何用戶或角色。(這個限制對REVOKE語句來講也一樣成立。)
固定數據庫角色db_ddladmin的成員能夠進行以下的動做:
運行全部DDL語句
對任何表上授予REFERENCESE權限
使用系統過程sp_procoption和sp_recompile來修改任何存儲過程的結構
使用系統過程sp_rename爲任何數據庫對象重命名
使用系統過程sp_tableoption和sp_changeobjectowner分別修改表的選項和任何數據庫對象的擁有者
固定數據庫角色db_securityadmin的成員能夠管理數據庫中的安全。這些成員能夠進行以下的動做:
運行與安全有關的全部Transact-SQL語句(GRANT、DENY和REVOKE)
運行如下系統過程:sp_addapprole、sp_addrole、sp_addrolemember、sp_approlepassword、sp_changeobjectowner、sp_dropapprole、sp_droprole、sp_droprolemember
固定數據庫角色db_backupoperator的成員能夠管理數據庫備份的過程。這些成員能夠進行以下動做:
運行BACKUP DATABASE和BACKUP LOG語句
用CHECKPOINT語句顯式地啓動檢查點進程
運行以下dbcc命令:dbcc checkalloc、dbcc checkcatalog、dbcc checkdb、dbcc updateusage
顧名思義,固定數據庫角色db_denydatareader的成員對數據庫中的數據庫對象(表或視圖)沒有SELECT權限。若是數據庫中含有敏感數據而且其餘用戶不能讀取這些數據,那麼就可使用這個角色。
固定數據庫角色db_denydatawriter的成員對數據庫中的任何數據庫對象(表或視圖)沒有INSERT、UPDATE和DELETE權限。