[SQL SERVER][Maintain]權限管理(1)

[SQL SERVER][Maintain]權限管理(1)

SQL SERVER 權限管理大概可分三個層級,

SERVER Level、Database Level和Object Level,

而權限管理往往和資料庫安全密不可分,

我大概簡單透過SSMS操作示範,

讓大家可以清楚每個層級的把關權限。

 

權限階層

image

來源自TechNet。

 

先建立一個登入來操作示範SERVER Level

Create Login

create login test
with password =N'你的密碼',
default_database=mydemo,
check_policy=off,
check_expiration=off
image 

當建立好登入後,透過SSMS查看登入屬性。

 

伺服器角色

image

每一個 SQL Server 登入都屬於 public 伺服器角色,

public角色只有連接SQL Instance權限,並沒有任何資料庫存取權限。

伺服器角色類似 windows 群組概念,主要是可以快速方便管理伺服器權限,

而且你也無法新增或修改已存在的伺服器角色。

 

使用者對應

image

一般我不會給予db_owner角色,並且也會套用其他結構描述來管理權限。

 

 

安全性實體

授與相關權限給該登入帳號

image

選取物件類型。

 

image

 

伺服器屬性

授予伺服器相關管理權限

image

如果沒有 VIEW ANY DATABASE 權限,

那麼SSMS物件總管中的資料庫節點將不會顯示任何資料庫。

 

使用TSQL

拒絕連接SQL權限

deny CONNECT SQL to test 

授予連接SQL權限
grant CONNECT SQL to test  
 

 

相關權限設定好後,

使用 test 登入並確認 SERVER Level 權限,

然後測試看看結果是否OK。

image

select suser_name()

select * 
from sys.fn_my_permissions('','SERVER')
image 
 存取其他資料庫測試
image 
嘗試修改伺服器屬性測試
image 
存取資料庫屬性測試
image 
因為 test 不是該資料庫 db_owner,同時也沒授予檢視伺服器狀態權限。

 

參考

權限階層 (Database Engine)

安全性概觀 (Database Engine)

fn_my_permissions (Transact-SQL)

GRANT 資料庫權限 (Transact-SQL)