首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> SQL Server 2005

SQL Server 2005 使用者權限設定深度解析

     編輯:SQL Server 2005

核心權限架構

所謂使用者權限,簡單來說就是「使用者能做什麼、不能做什麼」。在 SQL Server 2005 中,權限體系劃分為三大層級:

  • 登入權限:控制能否連線到 SQL Server 執行個體
  • 資料庫存取權限:控制能否進入特定資料庫
  • 物件操作權限:控制在資料庫內對特定物件(資料表、檢視表、預存程序等)執行具體操作

授予資料庫存取權限

要讓使用者存取某個資料庫,第一步就是授予該資料庫的存取權。在 Management Studio 中,可透過將使用者加入資料庫節點的「使用者」成員來實現;若使用 T-SQL,則使用 CREATE USER 或舊版相容的 sp_grantdbaccess。

注意:當在資料庫中建立使用者時,權限實際儲存在資料庫內,並對應到該使用者的伺服器識別碼(SID)。還原資料庫時,可能需要在目標伺服器重新對應使用者權限至伺服器識別碼。

1. CREATE USER 語法詳解

CREATE USER <使用者名稱>
[ { { FOR | FROM } 
  { LOGIN <登入名稱> 
  | CERTIFICATE <憑證名稱> 
  | ASYMMETRIC KEY <非對稱金鑰名稱> 
  } 
| WITHOUT LOGIN ] 
[ WITH DEFAULT_SCHEMA = <結構描述名稱> ]
選項說明
LOGIN欲授予目前資料庫存取權限的登入名稱
CERTIFICATE與使用者關聯的憑證邏輯名稱,需先以 CREATE CERTIFICATE 建立
ASYMMETRIC KEY與使用者關聯的非對稱金鑰邏輯名稱,需先以 CREATE ASYMMETRIC KEY 建立
WITHOUT LOGIN建立僅能在目前資料庫中活動的使用者,無法對應外部登入,也無法存取其他資料庫
WITH DEFAULT_SCHEMA指定非預設 "dbo" 的結構描述作為該使用者的預設結構描述

2. sp_grantdbaccess(舊版相容)

sp_grantdbaccess [@loginame =] '<登入名稱>'[, [@name_in_db =] '<資料庫內別名>']

此預存程序授予目前資料庫的存取權限。name_in_db 參數允許在該資料庫內給使用者一個替代識別名稱,僅影響此資料庫內的身分識別函數(如 USER_NAME()),系統層級函數(如 SYSTEM_USER)仍回傳原始登入 ID。

授予資料庫物件權限

擁有登入與資料庫存取權還不夠,SQL Server 提供細緻的物件級權限控制。可授權的物件包含資料表、檢視表、預存程序(觸發程序隱含建立者權限)。

六大核心物件權限

權限說明
SELECT允許讀取資料,可對授權的資料表/檢視表執行 SELECT
INSERT允許新增資料,可執行 INSERT。注意:擁有 INSERT 不代表擁有 SELECT
UPDATE允許修改現有資料,可執行 UPDATE。同樣不隱含 SELECT
DELETE允許刪除資料,可執行 DELETE。不隱含 SELECT
REFERENCES當插入資料列涉及參考其他資料表的外鍵約束,而使用者無該表 SELECT 權限時,此權限允許插入
EXECUTE允許執行指定的預存程序

這些權限可在 Management Studio 中透過「安全性」→「登入名」→ 右鍵「屬性」 設定,或使用 T-SQL 三大指令:GRANT、DENY、REVOKE。

1. GRANT - 授予權限

GRANT 
  ALL [PRIVILEGES] | <權限>[,...n] 
ON 
  <資料表或檢視表名稱>[(<資料行名稱>[,...n])] 
  | <預存程序或擴充預存程序名稱> 
TO <登入 ID 或角色名稱>[,...n] 
[WITH GRANT OPTION] 
[AS <角色名稱>]
  • ALL:授予該物件類型所有適用權限(EXECUTE 不適用於資料表)
  • ON:指定目標物件,支援資料行級權限(但微軟建議改用檢視表實現資料行級安全性)
  • WITH GRANT OPTION:允許受授權者再授權給他人(不建議使用,難以追蹤權限鏈)
  • AS:處理登入屬於多角色時的授權依據角色

2. DENY - 明確拒絕權限

DENY 會覆蓋任何 GRANT。使用者若屬於多角色,任一角色或個人層級有 DENY,該權限即被封鎖。語法與 GRANT 類似,關鍵差異在 CASCADE 選項:若使用者曾以 WITH GRANT OPTION 授權他人,CASCADE 會連帶撤銷這些下游授權。

3. REVOKE - 移除授權/拒絕

撤銷先前 GRANT 或 DENY 的效果。語法融合兩者,支援 CASCADE 連帶撤銷下游授權,以及 AS 指定角色依據。

陳述式層級權限

除了物件權限,SQL Server 也控制特定陳述式的執行權限,包含:

  • CREATE DATABASE、CREATE DEFAULT、CREATE PROCEDURE
  • CREATE RULE、CREATE TABLE、CREATE VIEW
  • BACKUP DATABASE、BACKUP LOG

授權語法簡化為:GRANT <ALL | 陳述式[,...n]> TO <登入 ID>[,...n],DENY 與 REVOKE 運作邏輯相同。

實戰範例:TestAccount 權限驗證

  1. 以 TestAccount 登入,嘗試 SELECT * FROM Region → 失敗(無權限)
  2. 以 sa 執行 GRANT SELECT ON Region TO TestAccount
  3. 切回 TestAccount,再次執行 SELECT → 成功
  4. 嘗試 INSERT → 失敗,再授予 INSERT 權限後成功
  5. 測試 DENY ALL ON Employees TO TestAccount → 即使 Public 角色有權限,TestAccount 也被封鎖
  6. 執行 REVOKE 移除授權/拒絕 → 權限恢復原狀

掌握這三大指令與權限層級,即能建立精細、安全的資料庫存取控制體系。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved