1. 程式人生 > >轉:SQL Server中服務器角色和數據庫角色權限詳解

轉:SQL Server中服務器角色和數據庫角色權限詳解

ice 擁有 錯誤 update ini 語法 remote login spl

當幾個用戶需要在某個特定的數據庫中執行類似的動作時(這裏沒有相應的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

可以備份數據庫的用戶(並可以發布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權限。

轉:SQL Server中服務器角色和數據庫角色權限詳解