SQLServer中伺服器角色和資料庫角色許可權詳解

2022-03-22 07:42:22 字數 4936 閱讀 7052

當幾個使用者需要在某個特定的資料庫中執行類似的動作時(這裡沒有相應的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登入是系統管理員的登入。在以前的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

可以備份資料庫的使用者(並可以發布dbcc和checkpoint語句,這兩個語句一般在備份前都會被執行)

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語句

固定資料庫角色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

固定資料庫角色db_backupoperator的成員可以管理資料庫備份的過程。這些成員可以進行如下動作:

執行backup database和backup log語句

用checkpoint語句顯式地啟動檢查點程序

執行如下dbcc命令:dbcc checkalloc、dbcc checkcatalog、dbcc checkdb、dbcc updateusage

顧名思義,固定資料庫角色db_denydatareader的成員對資料庫中的資料庫物件(表或檢視)沒有select許可權。如果資料庫中含有敏感資料並且其他使用者不能讀取這些資料,那麼就可以使用這個角色。

固定資料庫角色db_denydatawriter的成員對資料庫中的任何資料庫物件(表或檢視)沒有insert、update和delete許可權。

SQLServer中伺服器角色和資料庫角色許可權詳解

當幾個使用者需要在某個特定的資料庫中執行類似的動作時 這裡沒有相應的windows使用者組 就可以向該資料庫中新增乙個角色 role 資料庫角色指定了可以訪問相同資料庫物件的一組資料庫使用者。資料庫角色的成員可以分為如下幾類 windows使用者組或使用者賬戶 sql server登入 其他角色 s...

SQLServer中伺服器角色和資料庫角色許可權詳解

當幾個使用者需要在某個特定的資料庫中執行類似的動作時 這裡沒有相應的windows使用者組 就可以向該資料庫中新增乙個角色 role 資料庫角色指定了可以訪問相同資料庫物件的一組資料庫使用者。資料庫角色的成員可以分為如下幾類 windows使用者組或使用者賬戶 sql server登入 其他角色 s...

bootstraptable外掛程式中伺服器端分頁小結

最近要交接專案,在慶幸的是在這個時間節點到來之際發現了乙個關於伺服器分頁的bug,由於這個專案多處用到伺服器端分頁,所以要好好的捋一捋啊,啊哈哈哈哈。首先,關於伺服器端分頁前台要傳到後台的值必須含有 pagenumber和size,這些引數,通過bootstraptable中的queryparams...