亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

TeleDB-Sqlserver權限及角色解析

2024-08-05 09:31:31
88
0

-- 查詢login服務器角色
SELECT 
    role.name AS RoleName,
    member.name AS MemberName
FROM 
    sys.server_role_members AS srm
INNER JOIN 
    sys.server_principals AS role ON srm.role_principal_id = role.principal_id
INNER JOIN 
    sys.server_principals AS member ON srm.member_principal_id = member.principal_id
where member.name = 'rdsuser'
ORDER BY 
    RoleName, MemberName;
   
-- 查詢login服務器權限
SELECT 
    pr.name AS PrincipalName, 
    pr.type_desc AS PrincipalType, 
    p.permission_name AS PermissionName, 
    p.state_desc AS PermissionState 
FROM 
    sys.server_permissions AS p
    JOIN sys.server_principals AS pr 
    ON p.grantee_principal_id = pr.principal_id
WHERE 
    pr.name = 'rdsuser'
ORDER BY PermissionName, PermissionState;
	
-- 查詢user庫權限 (在不同庫執行)

SELECT 
    dp.name AS UserName,
    dp.type_desc AS UserType,
    sc.name AS SchemaName,
    o.name AS ObjectName,
    o.type_desc AS ObjectType,
    c.name AS ColumnName,
    p.class_desc AS PermissionClass,
    p.permission_name AS PermissionName,
    p.state_desc AS PermissionState
FROM 
    sys.database_permissions p
INNER JOIN 
    sys.database_principals dp 
    ON p.grantee_principal_id = dp.principal_id
LEFT JOIN 
    sys.objects o 
    ON o.object_id = p.major_id
LEFT JOIN 
    sys.schemas sc 
    ON o.schema_id = sc.schema_id
LEFT JOIN 
    sys.columns c 
    ON c.object_id = o.object_id AND c.column_id = p.minor_id
WHERE 
    dp.name = 'user1' 
ORDER BY 
    dp.name, o.name, c.name;

服務器角色

SQL Server 中的服務器角色是一些預定義的角色,用于管理服務器級別的權限。每個服務器角色都有一組特定的權限,這些權限允許角色成員執行特定的任務。下面是 SQL Server 中所有服務器角色及其作用和對應的權限的詳細列表。

角色

1. sysadmin

  • 作用:具有 SQL Server 實例的完全控制權限。
  • 權限
    • 完全控制 SQL Server 實例及其所有數據庫。
    • 可以執行所有服務器級別的操作,包括創建、刪除和修改數據庫和對象。
    • 無需顯式授予權限即可執行所有任務。

2. serveradmin

  • 作用:用于管理服務器的配置。
  • 權限
    • 管理服務器級別的配置選項(如通過 sp_configure)。
    • 啟動、停止和重啟 SQL Server 實例。
    • 更改 SQL Server 實例的全局設置。

3. securityadmin

  • 作用:管理服務器級別的安全設置和權限。
  • 權限
    • 管理登錄名、角色成員資格和服務器級別的安全策略。
    • 進行服務器級別的登錄管理和安全設置。

4. setup admin

  • 作用:管理 SQL Server 的設置和配置。
  • 權限
    • 創建、配置和刪除 linked servers(鏈接服務器)。
    • 管理 SQL Server 代理設置及其他服務器配置選項。

5. processadmin

  • 作用:管理 SQL Server 實例的進程。
  • 權限
    • 終止(KILL)正在運行的會話和進程。
    • 查看當前的活動會話和進程。

6. diskadmin

  • 作用:管理 SQL Server 實例的磁盤文件。
  • 權限
    • 管理 SQL Server 實例的磁盤文件和文件組。
    • 創建和管理磁盤文件、文件組。

7. dbcreator

  • 作用:創建和刪除數據庫。
  • 權限
    • 創建和刪除 SQL Server 數據庫。
    • 修改現有數據庫的結構。

8. public

  • 作用:所有 SQL Server 登錄名和用戶的默認角色。
  • 權限
    • 沒有特殊的權限,但每個 SQL Server 登錄名或用戶都自動屬于 public 角色。
    • 可以授予 public 角色一些最基本的權限。
  1. bulkadmin
  • 作用:用于管理大批量數據導入操作。
  • 權限
    • 允許使用 BULK INSERTbcp 工具執行大批量數據的導入操作。
    • 具有對 BULK INSERT 操作的權限,但不包含對其他操作的權限。

權限概述

  • sysadmin:超級用戶,擁有所有權限。
  • serveradmin:管理服務器配置和實例。
  • securityadmin:管理安全設置和登錄。
  • setupadmin:管理服務器設置和配置。
  • processadmin:管理和終止進程。
  • diskadmin:管理磁盤和文件組。
  • dbcreator:創建和刪除數據庫。
  • public:所有用戶的默認角色,沒有特定的權限。
  • bulkadmin:允許執行大批量數據導入操作的角色。

  • 查看服務器角色的成員:
SELECT 
    role.name AS RoleName,
    member.name AS MemberName
FROM 
    sys.server_role_members AS srm
INNER JOIN 
    sys.server_principals AS role ON srm.role_principal_id = role.principal_id
INNER JOIN 
    sys.server_principals AS member ON srm.member_principal_id = member.principal_id
ORDER BY 
    RoleName, MemberName;
  • 查看服務器角色的權限:
SELECT * 
FROM sys.server_permissions
WHERE class_desc = 'SERVER';
  • 授予角色權限:
EXEC sp_addsrvrolemember 'login_name', 'role_name';
  • 撤銷角色權限:
EXEC sp_dropsrvrolemember 'login_name', 'role_name';

通過理解和合理使用這些服務器角色,可以有效地管理 SQL Server 實例的權限和安全性。

服務器權限

權限

SQL Server 提供了一系列服務器級別的權限,以管理和控制對服務器和數據庫的訪問。這些權限允許數據庫管理員和用戶在不同級別上執行特定的操作。以下是 SQL Server 中所有服務器級別權限及其作用說明:

  1. ADMINISTER BULK OPERATIONS
    • 允許執行批量導入操作(如 BULK INSERT)。
  1. ALTER ANY CONNECTION
    • 允許終止或更改其他用戶的連接。
  1. ALTER ANY CREDENTIAL
    • 允許創建、修改和刪除憑證(Credentials)。
  1. ALTER ANY DATABASE
    • 允許創建、修改、刪除和管理任何數據庫。
  1. ALTER ANY ENDPOINT
    • 允許創建、修改和刪除 SQL Server 端點(Endpoints)。
  1. ALTER ANY EVENT NOTIFICATION
    • 允許創建、修改和刪除事件通知。
  1. ALTER ANY EVENT SESSION
    • 允許創建、修改和刪除擴展事件會話。
  1. ALTER ANY LINKED SERVER
    • 允許創建、修改和刪除鏈接服務器。
  1. ALTER ANY LOGIN
    • 允許創建、修改和刪除 SQL Server 登錄名。
  1. ALTER ANY SERVER AUDIT
    • 允許創建、修改和刪除服務器審計。
  1. ALTER ANY SERVER ROLE
    • 允許創建、修改和刪除服務器角色。
  1. ALTER RESOURCES
    • 允許更改服務器資源設置。
  1. ALTER SERVER STATE
    • 允許更改服務器的運行狀態(例如啟動和停止 SQL Server Agent 作業)。
  1. ALTER SETTINGS
    • 允許更改服務器配置選項。
  1. ALTER TRACE
    • 允許啟用、禁用和修改跟蹤。
  1. AUTHENTICATE SERVER
    • 允許在服務器級別進行身份驗證操作。
  1. CONNECT SQL
    • 允許連接到 SQL Server 實例。
  1. CONTROL SERVER
    • 允許完全控制 SQL Server 實例,包括所有數據庫和所有服務器級別的權限。
  1. CREATE ANY DATABASE
    • 允許創建數據庫。
  1. CREATE DDL EVENT NOTIFICATION
    • 允許在服務器范圍內創建 DDL 事件通知。
  1. CREATE ENDPOINT
    • 允許創建端點。
  1. CREATE SERVER ROLE
    • 允許創建服務器角色。
  1. CREATE TRACE EVENT NOTIFICATION
    • 允許創建跟蹤事件通知。
  1. EXTERNAL ACCESS ASSEMBLY
    • 允許在數據庫中創建和運行外部訪問程序集。
  1. IMPERSONATE ANY LOGIN
    • 允許模擬任何 SQL Server 登錄名。
  1. SELECT ALL USER SECURABLES
    • 允許在所有用戶可訪問的對象上執行 SELECT 操作。
  1. SHUTDOWN
    • 允許關閉 SQL Server 實例。
  1. UNSAFE ASSEMBLY
    • 允許創建和運行不安全的 CLR 程序集。
  1. VIEW ANY DATABASE
    • 允許查看服務器上的所有數據庫。
  1. VIEW ANY DEFINITION
    • 允許查看服務器上的所有定義(元數據)。
  1. VIEW SERVER STATE
    • 允許查看服務器的運行狀態(例如活動的會話、內存使用情況)。

作用說明

  • ADMINISTER BULK OPERATIONS:用于允許用戶執行批量數據導入導出操作。
  • ALTER ANY CONNECTION:管理和終止其他用戶的連接。
  • ALTER ANY CREDENTIAL:管理安全憑證,適用于存儲和訪問外部資源。
  • ALTER ANY DATABASE:全面管理數據庫,包括修改和刪除。
  • ALTER ANY ENDPOINT:管理 SQL Server 網絡端點,控制連接配置。
  • ALTER ANY EVENT NOTIFICATION:管理事件通知,用于自動響應特定事件。
  • ALTER ANY EVENT SESSION:管理擴展事件會話,用于診斷和監視。
  • ALTER ANY LINKED SERVER:管理鏈接服務器配置,允許跨服務器查詢。
  • ALTER ANY LOGIN:管理登錄名和相關安全屬性。
  • ALTER ANY SERVER AUDIT:管理服務器級別的審計功能。
  • ALTER ANY SERVER ROLE:管理服務器角色,分配和修改權限。
  • ALTER RESOURCES:調整服務器資源分配和使用策略。
  • ALTER SERVER STATE:修改服務器狀態,如啟動和停止代理作業。
  • ALTER SETTINGS:修改服務器配置和全局設置。
  • ALTER TRACE:控制 SQL Server 跟蹤,用于性能監視和調試。
  • AUTHENTICATE SERVER:允許在服務器級別執行身份驗證操作。
  • CONNECT SQL:基本的連接權限,允許用戶連接到 SQL Server。
  • CONTROL SERVER:最高權限,允許完全控制服務器和所有數據庫。
  • CREATE ANY DATABASE:創建新數據庫的權限。
  • CREATE DDL EVENT NOTIFICATION:創建 DDL 事件通知,用于自動化管理任務。
  • CREATE ENDPOINT:創建新網絡端點,控制服務器的連接和通信。
  • CREATE SERVER ROLE:創建新服務器角色,便于權限管理。
  • CREATE TRACE EVENT NOTIFICATION:創建跟蹤事件通知,用于性能監視和診斷。
  • EXTERNAL ACCESS ASSEMBLY:運行外部程序集,允許更高的程序集權限。
  • IMPERSONATE ANY LOGIN:模擬其他登錄名,便于權限調試和測試。
  • SELECT ALL USER SECURABLES:允許用戶選擇所有可訪問對象。
  • SHUTDOWN:關閉 SQL Server 實例的權限,適用于緊急維護。
  • UNSAFE ASSEMBLY:運行不安全的 CLR 程序集,提供更高的權限和靈活性。
  • VIEW ANY DATABASE:查看服務器上的所有數據庫。
  • VIEW ANY DEFINITION:查看所有對象的定義和元數據。
  • VIEW SERVER STATE:查看服務器的運行狀態和性能信息。

這些服務器級別的權限允許數據庫管理員和高級用戶在不同級別上執行各種管理和控制操作,以確保 SQL Server 實例的安全性、性能和可管理性。

舉例:

-- 查詢服務器權限
SELECT 
    pr.name AS PrincipalName, 
    pr.type_desc AS PrincipalType, 
    p.permission_name AS PermissionName, 
    p.state_desc AS PermissionState 
FROM 
    sys.server_permissions AS p
    JOIN sys.server_principals AS pr 
    ON p.grantee_principal_id = pr.principal_id
WHERE 
    pr.name = 'xxx';


# with grant option
GRANT ALTER ANY DATABASE TO [YourLogin] WITH GRANT OPTION;

# 回收
REVOKE ALTER ANY LOGIN TO John;

# 拒絕權限
DENY ALTER ANY LOGIN TO John;

庫權限

在 SQL Server 中,數據庫級別的權限(也稱為數據庫權限)是授予數據庫中的 User 或數據庫角色的,用于管理對數據庫內對象(如表、視圖、存儲過程等)的訪問和操作。這些權限控制用戶在數據庫內的各種操作能力。

權限

以下是一些常見的數據庫級別權限:

1. 數據操作權限

  • SELECT: 允許用戶從表或視圖中讀取數據。
  • INSERT: 允許用戶向表或視圖中插入新數據。
  • UPDATE: 允許用戶更新表或視圖中的數據。
  • DELETE: 允許用戶刪除表或視圖中的數據。
  • MERGE: 允許用戶在目標表中執行合并操作(INSERT、UPDATE 或 DELETE)。

2. 架構操作權限

  • ALTER: 允許用戶修改表、視圖或其他數據庫對象的結構。
  • CREATE:
    • CREATE TABLE: 允許用戶創建新表。
    • CREATE VIEW: 允許用戶創建新視圖。
    • CREATE PROCEDURE: 允許用戶創建新存儲過程。
    • CREATE FUNCTION: 允許用戶創建新函數。
    • CREATE SCHEMA: 允許用戶創建新架構。
    • CREATE SYNONYM: 允許用戶創建同義詞。
  • DROP: 允許用戶刪除表、視圖或其他數據庫對象。
  • REFERENCES: 允許用戶創建引用其他表(外鍵)的約束。

3. 執行權限

  • EXECUTE: 允許用戶執行存儲過程和函數。

4. 安全性和訪問權限

  • CONTROL: 賦予用戶完全控制數據庫對象的權限,相當于所有權限的組合。
  • IMPERSONATE: 允許用戶假借另一個用戶的身份執行操作。
  • VIEW DEFINITION: 允許用戶查看對象的元數據定義(如查看存儲過程的源代碼)。
  • TAKE OWNERSHIP: 允許用戶成為數據庫對象的所有者。

5. 管理權限

  • BACKUP DATABASE: 允許用戶備份數據庫。
  • BACKUP LOG: 允許用戶備份事務日志。
  • CHECKPOINT: 允許用戶手動發起檢查點操作。
  • DBCC: 允許用戶執行 DBCC(數據庫一致性檢查器)命令,如 DBCC CHECKDB
  • SHUTDOWN: 允許用戶關閉 SQL Server 實例(通常不授予數據庫用戶)。
  • TAKE OWNERSHIP: 允許用戶更改數據庫或對象的所有者。

---查詢用戶的所有對象權限
USE YourDatabaseName;
SELECT 
    dp.name AS PrincipalName, 
    ob.name AS ObjectName, 
	ob.type_desc As ObjectType,
    p.permission_name AS PermissionName, 
    p.state_desc AS PermissionState
FROM 
    sys.database_permissions AS p
    JOIN sys.objects AS ob ON p.major_id = ob.object_id
    JOIN sys.database_principals AS dp ON p.grantee_principal_id = dp.principal_id
WHERE 
    dp.name = 'UserName';  -- 替換 'UserName' 為目標用戶名

-- 查詢表權限
SELECT 
    dp.name AS PrincipalName, 
    tb.name AS TableName, 
    p.permission_name AS PermissionName, 
    p.state_desc AS PermissionState
FROM 
    sys.database_permissions AS p
    JOIN sys.tables AS tb ON p.major_id = tb.object_id
    JOIN sys.database_principals AS dp ON p.grantee_principal_id = dp.principal_id
WHERE 
    dp.name = 'UserName';  -- 替換 'UserName' 為目標用戶名

-- 在master執行存儲過程遍歷其他庫的權限
	EXEC sp_msforeachdb N'
    USE [?];
    SELECT 
        DB_NAME() AS DatabaseName,
        dp.name AS PrincipalName,
        dp.type_desc AS PrincipalType,
        o.name AS ObjectName,
		o.type_desc As ObjectType,
        p.permission_name AS PermissionName,
        p.state_desc AS PermissionState
    FROM sys.database_permissions p
    LEFT JOIN sys.objects o ON p.major_id = o.object_id
    LEFT JOIN sys.database_principals dp ON p.grantee_principal_id = dp.principal_id
    ;
';


-- 授予用戶在特定表上的 SELECT 權限
GRANT SELECT ON [dbo].[YourTable] TO [YourUser];

-- 授予用戶在特定存儲過程上的 EXECUTE 權限
GRANT EXECUTE ON [dbo].[YourProcedure] TO [YourUser];

-- 授予用戶在數據庫中的所有表上的 INSERT 權限
GRANT INSERT ON SCHEMA::dbo TO [YourUser];

-- 授予用戶表上特定列的權限
GRANT UPDATE ON [schema_name].[table_name] ([column_name]) TO [user_or_role_name];

-- 授予某個用戶或角色對特定存儲過程或函數的 EXECUTE 權限
GRANT EXECUTE ON OBJECT::[schema_name].[object_name] TO [user_or_role_name];

-- 回收權限 REVOKE 收回已授予的權限。
REVOKE EXECUTE ON OBJECT::dbo.MyStoredProcedure FROM MyUser;

-- DENY 明確拒絕權限,優先級高于 GRANT
DENY EXECUTE ON OBJECT::dbo.MyStoredProcedure TO MyUser;

-- 撤銷 `DENY` 權限
REVOKE SELECT ON dbo.YourTable TO YourUserName;

-- 重新授予權限
GRANT SELECT ON dbo.YourTable TO YourUserName;


-- 注意: 使用 OBJECT:: 前綴來明確指定權限授予的具體數據庫對象,如表、視圖、存儲過程等,建議都加上。
-- 對于數據庫級別的權限設置,不需要使用 OBJECT:: 前綴。
-- SCHEMA:: 前綴用于授予權限于整個模式(schema),不能用 OBJECT::取代。

DENY與不配置權限的區別

在 SQL Server 中,DENY 權限和不配置權限之間有著重要的區別。盡管在某些情況下它們的效果可能看似相同,但在特定場景下,DENY 權限可以起到明確禁止訪問的作用,防止權限繼承或沖突。

DENY 與未配置權限的區別

  1. 明確拒絕訪問:
    • DENY 會顯式地拒絕某個用戶或角色對某資源的訪問權限,即使該用戶或角色通過其他途徑(如角色成員資格或更高級別的繼承)獲得了該權限。
    • 如果你不配置權限,用戶可能通過角色繼承或其他方式獲得該權限。
  1. 權限沖突:
    • 在 SQL Server 中,如果一個用戶通過多個角色或權限來源獲得了某個權限,而其中一個角色/來源對該權限使用了 DENY,那么 DENY 將優先生效,阻止該用戶訪問該權限。
    • 未配置權限不會產生這種沖突處理機制,可能導致用戶通過其他方式間接獲得訪問權限。
  1. 安全性:
    • 在安全性要求較高的場景下,使用 DENY 可以確保某些敏感操作絕對不會被某些用戶執行。這對于防止權限升級或錯誤配置導致的安全隱患尤為重要。
    • 未配置權限可能在管理員錯誤賦權或忘記撤銷權限時,留下安全漏洞。

實際應用場景

  1. 權限分離與防止意外權限提升:
    • 當你需要確保某個用戶絕對不能執行某些操作時,使用 DENY 是最好的做法。比如,你可能希望某個應用程序用戶不能執行 DROP DATABASE 操作,即使該用戶被臨時加入了具有此權限的角色中。
  1. 更精細的權限控制:
    • 在復雜的權限結構中,使用 DENY 可以實現更精細的控制。例如,你可以允許某用戶讀取大部分表,但顯式 DENY 某些敏感表的讀取權限,確保這些表不被訪問。
  1. 強制性安全策略:
    • DENY 常用于強制性安全策略,確保即使管理員錯誤配置了權限,也能通過 DENY 機制進行有效控制,避免安全事故。

總結

DENY 權限用于在復雜的權限結構中提供更精細的訪問控制和安全保障。通過顯式拒絕權限,可以確保某些操作或訪問在任何情況下都被禁止,從而防止不必要的權限提升和安全風險。而不配置權限并不等同于 DENY,因為它可能允許用戶通過其他方式間接獲得權限。

permission_clas

在 SQL Server 中,permission_class 是指系統權限分類的類型,用于表示特定對象或資源的權限類別。不同的權限類別用于管理和控制對數據庫對象、服務器對象及其屬性的訪問權限。

1. SERVER

  • 描述: 服務器級權限,作用于整個 SQL Server 實例。
  • 示例: GRANT ALTER ANY LOGIN TO [User1];

2. DATABASE

  • 描述: 數據庫級權限,作用于整個數據庫。
  • 示例: GRANT CREATE TABLE TO [User1];

3. OBJECT_OR_COLUMN

  • 描述: 對象或列級權限,作用于特定的數據庫對象或列。
  • 示例: GRANT SELECT ON OBJECT::dbo.YourTable TO [User1];

4. SCHEMA

  • 描述: 模式級權限,作用于數據庫中的特定模式。
  • 示例: GRANT CONTROL ON SCHEMA::dbo TO [User1];

5. ENDPOINT

  • 描述: 端點級權限,作用于 SQL Server 端點。
  • 示例: GRANT CONNECT ON ENDPOINT::YourEndpoint TO [User1];

6. ASSEMBLY

  • 描述: 程序集級權限,作用于數據庫中的程序集對象。
  • 示例: GRANT EXECUTE ON ASSEMBLY::YourAssembly TO [User1];

7. TYPE

  • 描述: 類型級權限,作用于用戶定義的數據類型。
  • 示例: GRANT REFERENCES ON TYPE::YourType TO [User1];

8. XML_SCHEMA_COLLECTION

  • 描述: XML 架構集合級權限,作用于數據庫中的 XML 架構集合。
  • 示例: GRANT REFERENCES ON XML SCHEMA COLLECTION::YourXmlSchema TO [User1];

9. FULLTEXT_CATALOG

  • 描述: 全文目錄級權限,作用于數據庫中的全文目錄。
  • 示例: GRANT ALTER ON FULLTEXT CATALOG::YourFullTextCatalog TO [User1];

10. CERTIFICATE

  • 描述: 證書級權限,作用于數據庫中的證書對象。
  • 示例: GRANT CONTROL ON CERTIFICATE::YourCertificate TO [User1];

11. SYMMETRIC_KEY

  • 描述: 對稱密鑰級權限,作用于數據庫中的對稱密鑰。
  • 示例: GRANT CONTROL ON SYMMETRIC KEY::YourSymmetricKey TO [User1];

12. ASYMMETRIC_KEY

  • 描述: 非對稱密鑰級權限,作用于數據庫中的非對稱密鑰。
  • 示例: GRANT CONTROL ON ASYMMETRIC KEY::YourAsymmetricKey TO [User1];

13. CONTRACT

  • 描述: 服務合約級權限,作用于服務代理的合約對象。
  • 示例: GRANT CONTROL ON CONTRACT::YourContract TO [User1];

14. SERVICE

  • 描述: 服務代理服務級權限,作用于數據庫中的服務代理服務。
  • 示例: GRANT CONTROL ON SERVICE::YourService TO [User1];

15. REMOTE_SERVICE_BINDING

  • 描述: 遠程服務綁定級權限,作用于遠程服務綁定。
  • 示例: GRANT CONTROL ON REMOTE SERVICE BINDING::YourRemoteServiceBinding TO [User1];

16. ROUTE

  • 描述: 服務代理路由級權限,作用于數據庫中的路由對象。
  • 示例: GRANT CONTROL ON ROUTE::YourRoute TO [User1];

17. FULLTEXT_STOPLIST

  • 描述: 全文停止詞列表級權限,作用于全文停止詞列表對象。
  • 示例: GRANT ALTER ON FULLTEXT STOPLIST::YourFullTextStopList TO [User1];

18. DATABASE_PRINCIPAL

  • 描述: 數據庫主體級權限,作用于數據庫主體(如用戶、角色)。
  • 示例: GRANT CONTROL ON DATABASE PRINCIPAL::[YourPrincipal] TO [User1];

19. DATABASE_ROLE

  • 描述: 數據庫角色級權限,作用于數據庫中的角色。
  • 示例: GRANT CONTROL ON ROLE::YourRole TO [User1];

20. APPLICATION_ROLE

  • 描述: 應用角色級權限,作用于數據庫中的應用角色。
  • 示例: GRANT CONTROL ON APPLICATION ROLE::YourAppRole TO [User1];

21. USER

  • 描述: 用戶級權限,作用于數據庫中的用戶對象。
  • 示例: GRANT ALTER ON USER::YourUser TO [User1];

22. USER_DEFINED_FUNCTION

  • 描述: 用戶定義函數級權限,作用于數據庫中的用戶定義函數。
  • 示例: GRANT EXECUTE ON FUNCTION::YourFunction TO [User1];

23. TABLE

  • 描述: 表級權限,作用于數據庫中的表對象。
  • 示例: GRANT SELECT ON TABLE::YourTable TO [User1];

24. VIEW

  • 描述: 視圖級權限,作用于數據庫中的視圖對象。
  • 示例: GRANT SELECT ON VIEW::YourView TO [User1];

25. STORED_PROCEDURE

  • 描述: 存儲過程級權限,作用于數據庫中的存儲過程。
  • 示例: GRANT EXECUTE ON PROCEDURE::YourProcedure TO [User1];

26. SEQUENCE

  • 描述: 序列級權限,作用于數據庫中的序列對象。
  • 示例: GRANT SELECT ON SEQUENCE::YourSequence TO [User1];

27. SERVER_PRINCIPAL

  • 描述: 服務器主體級權限,作用于服務器主體(如登錄名)。
  • 示例: GRANT CONTROL ON SERVER PRINCIPAL::YourServerPrincipal TO [User1];

28. DATABASE_SCOPED_CREDENTIAL

  • 描述: 數據庫范圍憑據級權限。
  • 示例: GRANT ALTER ON DATABASE SCOPED CREDENTIAL::YourCredential TO [User1];

29. EXTERNAL_LIBRARY

  • 描述: 外部庫級權限,作用于數據庫中的外部庫對象。
  • 示例: GRANT EXECUTE ON EXTERNAL LIBRARY::YourExternalLibrary TO [User1];

30. AVAILABILITY_GROUP

  • 描述: 可用性組級權限,作用于數據庫中的可用性組對象。
  • 示例: GRANT ALTER ANY AVAILABILITY GROUP TO [User1];

31. COLUMN_MASTER_KEY

  • 描述: 列主密鑰級權限,作用于數據庫中的列主密鑰對象。
  • 示例: GRANT CONTROL ON COLUMN MASTER KEY::YourColumnMasterKey TO [User1];

32. COLUMN_ENCRYPTION_KEY

  • 描述: 列加密密鑰級權限,作用于數據庫中的列加密密鑰對象。
  • 示例: GRANT CONTROL ON COLUMN ENCRYPTION KEY::YourColumnEncryptionKey TO [User1];

33. EXTERNAL_DATA_SOURCE

  • 描述: 外部數據源級權限,作用于數據庫中的外部數據源對象。
  • 示例: GRANT CONTROL ON EXTERNAL DATA SOURCE::YourExternalDataSource TO [User1];

34. EXTERNAL_FILE_FORMAT

  • 描述: 外部文件格式級權限,作用于數據庫中的外部文件格式對象。
  • 示例: GRANT CONTROL ON EXTERNAL FILE FORMAT::YourExternalFileFormat TO [User1];

35. FULLTEXT_CATALOG

  • 描述: 全文目錄級權限,作用于數據庫中的全文目錄。
  • 示例: GRANT ALTER ON FULLTEXT CATALOG::YourFullTextCatalog TO [User1];

36. SEARCH_PROPERTY_LIST

  • 描述: 搜索屬性列表權限。
  • 示例: GRANT ALTER ON SEARCH PROPERTY LIST::YourSearchPropertyList TO [User1];

37. SERVER_AUDIT

  • 描述: 服務器審計權限。
  • 示例: GRANT CONTROL SERVER TO [User1];

38. AVAILABILITY_GROUP

  • 描述: 可用性組權限。
  • 示例: GRANT CONTROL AVAILABILITY GROUP::YourAvailabilityGroup TO [User1];

39. EXTERNAL_RESOURCE_POOL

  • 描述: 外部資源池權限。
  • 示例: GRANT CONTROL EXTERNAL RESOURCE POOL::YourExternalResourcePool TO [User1];

40. SERVER

_PRINCIPAL

  • 描述: 服務器主體級權限。
  • 示例: GRANT CONTROL ON SERVER::YourServerPrincipal TO [User1];

這就是 SQL Server 中所有的 permission_class 及其示例 GRANT 語句。每個 permission_class 對應著不同的 SQL Server 對象或作用范圍,你可以根據實際需求進行授權。

示例查詢權限類別

以下是一個查詢 SQL Server 權限類別的 T-SQL 語句示例:

SELECT 
    permission_name,
    permission_class,
    class_desc
FROM 
    sys.database_permissions;

總結

SQL Server 的 permission_class 值用于分類和描述權限的類型,不同的值表示不同級別的權限管理。了解這些權限類別有助于有效地配置和管理 SQL Server 的安全性及訪問控制。

0條評論
0 / 1000
lawen
12文章數
1粉絲數
lawen
12 文章 | 1 粉絲
原創

TeleDB-Sqlserver權限及角色解析

2024-08-05 09:31:31
88
0

-- 查詢login服務器角色
SELECT 
    role.name AS RoleName,
    member.name AS MemberName
FROM 
    sys.server_role_members AS srm
INNER JOIN 
    sys.server_principals AS role ON srm.role_principal_id = role.principal_id
INNER JOIN 
    sys.server_principals AS member ON srm.member_principal_id = member.principal_id
where member.name = 'rdsuser'
ORDER BY 
    RoleName, MemberName;
   
-- 查詢login服務器權限
SELECT 
    pr.name AS PrincipalName, 
    pr.type_desc AS PrincipalType, 
    p.permission_name AS PermissionName, 
    p.state_desc AS PermissionState 
FROM 
    sys.server_permissions AS p
    JOIN sys.server_principals AS pr 
    ON p.grantee_principal_id = pr.principal_id
WHERE 
    pr.name = 'rdsuser'
ORDER BY PermissionName, PermissionState;
	
-- 查詢user庫權限 (在不同庫執行)

SELECT 
    dp.name AS UserName,
    dp.type_desc AS UserType,
    sc.name AS SchemaName,
    o.name AS ObjectName,
    o.type_desc AS ObjectType,
    c.name AS ColumnName,
    p.class_desc AS PermissionClass,
    p.permission_name AS PermissionName,
    p.state_desc AS PermissionState
FROM 
    sys.database_permissions p
INNER JOIN 
    sys.database_principals dp 
    ON p.grantee_principal_id = dp.principal_id
LEFT JOIN 
    sys.objects o 
    ON o.object_id = p.major_id
LEFT JOIN 
    sys.schemas sc 
    ON o.schema_id = sc.schema_id
LEFT JOIN 
    sys.columns c 
    ON c.object_id = o.object_id AND c.column_id = p.minor_id
WHERE 
    dp.name = 'user1' 
ORDER BY 
    dp.name, o.name, c.name;

服務器角色

SQL Server 中的服務器角色是一些預定義的角色,用于管理服務器級別的權限。每個服務器角色都有一組特定的權限,這些權限允許角色成員執行特定的任務。下面是 SQL Server 中所有服務器角色及其作用和對應的權限的詳細列表。

角色

1. sysadmin

  • 作用:具有 SQL Server 實例的完全控制權限。
  • 權限
    • 完全控制 SQL Server 實例及其所有數據庫。
    • 可以執行所有服務器級別的操作,包括創建、刪除和修改數據庫和對象。
    • 無需顯式授予權限即可執行所有任務。

2. serveradmin

  • 作用:用于管理服務器的配置。
  • 權限
    • 管理服務器級別的配置選項(如通過 sp_configure)。
    • 啟動、停止和重啟 SQL Server 實例。
    • 更改 SQL Server 實例的全局設置。

3. securityadmin

  • 作用:管理服務器級別的安全設置和權限。
  • 權限
    • 管理登錄名、角色成員資格和服務器級別的安全策略。
    • 進行服務器級別的登錄管理和安全設置。

4. setup admin

  • 作用:管理 SQL Server 的設置和配置。
  • 權限
    • 創建、配置和刪除 linked servers(鏈接服務器)。
    • 管理 SQL Server 代理設置及其他服務器配置選項。

5. processadmin

  • 作用:管理 SQL Server 實例的進程。
  • 權限
    • 終止(KILL)正在運行的會話和進程。
    • 查看當前的活動會話和進程。

6. diskadmin

  • 作用:管理 SQL Server 實例的磁盤文件。
  • 權限
    • 管理 SQL Server 實例的磁盤文件和文件組。
    • 創建和管理磁盤文件、文件組。

7. dbcreator

  • 作用:創建和刪除數據庫。
  • 權限
    • 創建和刪除 SQL Server 數據庫。
    • 修改現有數據庫的結構。

8. public

  • 作用:所有 SQL Server 登錄名和用戶的默認角色。
  • 權限
    • 沒有特殊的權限,但每個 SQL Server 登錄名或用戶都自動屬于 public 角色。
    • 可以授予 public 角色一些最基本的權限。
  1. bulkadmin
  • 作用:用于管理大批量數據導入操作。
  • 權限
    • 允許使用 BULK INSERTbcp 工具執行大批量數據的導入操作。
    • 具有對 BULK INSERT 操作的權限,但不包含對其他操作的權限。

權限概述

  • sysadmin:超級用戶,擁有所有權限。
  • serveradmin:管理服務器配置和實例。
  • securityadmin:管理安全設置和登錄。
  • setupadmin:管理服務器設置和配置。
  • processadmin:管理和終止進程。
  • diskadmin:管理磁盤和文件組。
  • dbcreator:創建和刪除數據庫。
  • public:所有用戶的默認角色,沒有特定的權限。
  • bulkadmin:允許執行大批量數據導入操作的角色。

  • 查看服務器角色的成員:
SELECT 
    role.name AS RoleName,
    member.name AS MemberName
FROM 
    sys.server_role_members AS srm
INNER JOIN 
    sys.server_principals AS role ON srm.role_principal_id = role.principal_id
INNER JOIN 
    sys.server_principals AS member ON srm.member_principal_id = member.principal_id
ORDER BY 
    RoleName, MemberName;
  • 查看服務器角色的權限:
SELECT * 
FROM sys.server_permissions
WHERE class_desc = 'SERVER';
  • 授予角色權限:
EXEC sp_addsrvrolemember 'login_name', 'role_name';
  • 撤銷角色權限:
EXEC sp_dropsrvrolemember 'login_name', 'role_name';

通過理解和合理使用這些服務器角色,可以有效地管理 SQL Server 實例的權限和安全性。

服務器權限

權限

SQL Server 提供了一系列服務器級別的權限,以管理和控制對服務器和數據庫的訪問。這些權限允許數據庫管理員和用戶在不同級別上執行特定的操作。以下是 SQL Server 中所有服務器級別權限及其作用說明:

  1. ADMINISTER BULK OPERATIONS
    • 允許執行批量導入操作(如 BULK INSERT)。
  1. ALTER ANY CONNECTION
    • 允許終止或更改其他用戶的連接。
  1. ALTER ANY CREDENTIAL
    • 允許創建、修改和刪除憑證(Credentials)。
  1. ALTER ANY DATABASE
    • 允許創建、修改、刪除和管理任何數據庫。
  1. ALTER ANY ENDPOINT
    • 允許創建、修改和刪除 SQL Server 端點(Endpoints)。
  1. ALTER ANY EVENT NOTIFICATION
    • 允許創建、修改和刪除事件通知。
  1. ALTER ANY EVENT SESSION
    • 允許創建、修改和刪除擴展事件會話。
  1. ALTER ANY LINKED SERVER
    • 允許創建、修改和刪除鏈接服務器。
  1. ALTER ANY LOGIN
    • 允許創建、修改和刪除 SQL Server 登錄名。
  1. ALTER ANY SERVER AUDIT
    • 允許創建、修改和刪除服務器審計。
  1. ALTER ANY SERVER ROLE
    • 允許創建、修改和刪除服務器角色。
  1. ALTER RESOURCES
    • 允許更改服務器資源設置。
  1. ALTER SERVER STATE
    • 允許更改服務器的運行狀態(例如啟動和停止 SQL Server Agent 作業)。
  1. ALTER SETTINGS
    • 允許更改服務器配置選項。
  1. ALTER TRACE
    • 允許啟用、禁用和修改跟蹤。
  1. AUTHENTICATE SERVER
    • 允許在服務器級別進行身份驗證操作。
  1. CONNECT SQL
    • 允許連接到 SQL Server 實例。
  1. CONTROL SERVER
    • 允許完全控制 SQL Server 實例,包括所有數據庫和所有服務器級別的權限。
  1. CREATE ANY DATABASE
    • 允許創建數據庫。
  1. CREATE DDL EVENT NOTIFICATION
    • 允許在服務器范圍內創建 DDL 事件通知。
  1. CREATE ENDPOINT
    • 允許創建端點。
  1. CREATE SERVER ROLE
    • 允許創建服務器角色。
  1. CREATE TRACE EVENT NOTIFICATION
    • 允許創建跟蹤事件通知。
  1. EXTERNAL ACCESS ASSEMBLY
    • 允許在數據庫中創建和運行外部訪問程序集。
  1. IMPERSONATE ANY LOGIN
    • 允許模擬任何 SQL Server 登錄名。
  1. SELECT ALL USER SECURABLES
    • 允許在所有用戶可訪問的對象上執行 SELECT 操作。
  1. SHUTDOWN
    • 允許關閉 SQL Server 實例。
  1. UNSAFE ASSEMBLY
    • 允許創建和運行不安全的 CLR 程序集。
  1. VIEW ANY DATABASE
    • 允許查看服務器上的所有數據庫。
  1. VIEW ANY DEFINITION
    • 允許查看服務器上的所有定義(元數據)。
  1. VIEW SERVER STATE
    • 允許查看服務器的運行狀態(例如活動的會話、內存使用情況)。

作用說明

  • ADMINISTER BULK OPERATIONS:用于允許用戶執行批量數據導入導出操作。
  • ALTER ANY CONNECTION:管理和終止其他用戶的連接。
  • ALTER ANY CREDENTIAL:管理安全憑證,適用于存儲和訪問外部資源。
  • ALTER ANY DATABASE:全面管理數據庫,包括修改和刪除。
  • ALTER ANY ENDPOINT:管理 SQL Server 網絡端點,控制連接配置。
  • ALTER ANY EVENT NOTIFICATION:管理事件通知,用于自動響應特定事件。
  • ALTER ANY EVENT SESSION:管理擴展事件會話,用于診斷和監視。
  • ALTER ANY LINKED SERVER:管理鏈接服務器配置,允許跨服務器查詢。
  • ALTER ANY LOGIN:管理登錄名和相關安全屬性。
  • ALTER ANY SERVER AUDIT:管理服務器級別的審計功能。
  • ALTER ANY SERVER ROLE:管理服務器角色,分配和修改權限。
  • ALTER RESOURCES:調整服務器資源分配和使用策略。
  • ALTER SERVER STATE:修改服務器狀態,如啟動和停止代理作業。
  • ALTER SETTINGS:修改服務器配置和全局設置。
  • ALTER TRACE:控制 SQL Server 跟蹤,用于性能監視和調試。
  • AUTHENTICATE SERVER:允許在服務器級別執行身份驗證操作。
  • CONNECT SQL:基本的連接權限,允許用戶連接到 SQL Server。
  • CONTROL SERVER:最高權限,允許完全控制服務器和所有數據庫。
  • CREATE ANY DATABASE:創建新數據庫的權限。
  • CREATE DDL EVENT NOTIFICATION:創建 DDL 事件通知,用于自動化管理任務。
  • CREATE ENDPOINT:創建新網絡端點,控制服務器的連接和通信。
  • CREATE SERVER ROLE:創建新服務器角色,便于權限管理。
  • CREATE TRACE EVENT NOTIFICATION:創建跟蹤事件通知,用于性能監視和診斷。
  • EXTERNAL ACCESS ASSEMBLY:運行外部程序集,允許更高的程序集權限。
  • IMPERSONATE ANY LOGIN:模擬其他登錄名,便于權限調試和測試。
  • SELECT ALL USER SECURABLES:允許用戶選擇所有可訪問對象。
  • SHUTDOWN:關閉 SQL Server 實例的權限,適用于緊急維護。
  • UNSAFE ASSEMBLY:運行不安全的 CLR 程序集,提供更高的權限和靈活性。
  • VIEW ANY DATABASE:查看服務器上的所有數據庫。
  • VIEW ANY DEFINITION:查看所有對象的定義和元數據。
  • VIEW SERVER STATE:查看服務器的運行狀態和性能信息。

這些服務器級別的權限允許數據庫管理員和高級用戶在不同級別上執行各種管理和控制操作,以確保 SQL Server 實例的安全性、性能和可管理性。

舉例:

-- 查詢服務器權限
SELECT 
    pr.name AS PrincipalName, 
    pr.type_desc AS PrincipalType, 
    p.permission_name AS PermissionName, 
    p.state_desc AS PermissionState 
FROM 
    sys.server_permissions AS p
    JOIN sys.server_principals AS pr 
    ON p.grantee_principal_id = pr.principal_id
WHERE 
    pr.name = 'xxx';


# with grant option
GRANT ALTER ANY DATABASE TO [YourLogin] WITH GRANT OPTION;

# 回收
REVOKE ALTER ANY LOGIN TO John;

# 拒絕權限
DENY ALTER ANY LOGIN TO John;

庫權限

在 SQL Server 中,數據庫級別的權限(也稱為數據庫權限)是授予數據庫中的 User 或數據庫角色的,用于管理對數據庫內對象(如表、視圖、存儲過程等)的訪問和操作。這些權限控制用戶在數據庫內的各種操作能力。

權限

以下是一些常見的數據庫級別權限:

1. 數據操作權限

  • SELECT: 允許用戶從表或視圖中讀取數據。
  • INSERT: 允許用戶向表或視圖中插入新數據。
  • UPDATE: 允許用戶更新表或視圖中的數據。
  • DELETE: 允許用戶刪除表或視圖中的數據。
  • MERGE: 允許用戶在目標表中執行合并操作(INSERT、UPDATE 或 DELETE)。

2. 架構操作權限

  • ALTER: 允許用戶修改表、視圖或其他數據庫對象的結構。
  • CREATE:
    • CREATE TABLE: 允許用戶創建新表。
    • CREATE VIEW: 允許用戶創建新視圖。
    • CREATE PROCEDURE: 允許用戶創建新存儲過程。
    • CREATE FUNCTION: 允許用戶創建新函數。
    • CREATE SCHEMA: 允許用戶創建新架構。
    • CREATE SYNONYM: 允許用戶創建同義詞。
  • DROP: 允許用戶刪除表、視圖或其他數據庫對象。
  • REFERENCES: 允許用戶創建引用其他表(外鍵)的約束。

3. 執行權限

  • EXECUTE: 允許用戶執行存儲過程和函數。

4. 安全性和訪問權限

  • CONTROL: 賦予用戶完全控制數據庫對象的權限,相當于所有權限的組合。
  • IMPERSONATE: 允許用戶假借另一個用戶的身份執行操作。
  • VIEW DEFINITION: 允許用戶查看對象的元數據定義(如查看存儲過程的源代碼)。
  • TAKE OWNERSHIP: 允許用戶成為數據庫對象的所有者。

5. 管理權限

  • BACKUP DATABASE: 允許用戶備份數據庫。
  • BACKUP LOG: 允許用戶備份事務日志。
  • CHECKPOINT: 允許用戶手動發起檢查點操作。
  • DBCC: 允許用戶執行 DBCC(數據庫一致性檢查器)命令,如 DBCC CHECKDB
  • SHUTDOWN: 允許用戶關閉 SQL Server 實例(通常不授予數據庫用戶)。
  • TAKE OWNERSHIP: 允許用戶更改數據庫或對象的所有者。

---查詢用戶的所有對象權限
USE YourDatabaseName;
SELECT 
    dp.name AS PrincipalName, 
    ob.name AS ObjectName, 
	ob.type_desc As ObjectType,
    p.permission_name AS PermissionName, 
    p.state_desc AS PermissionState
FROM 
    sys.database_permissions AS p
    JOIN sys.objects AS ob ON p.major_id = ob.object_id
    JOIN sys.database_principals AS dp ON p.grantee_principal_id = dp.principal_id
WHERE 
    dp.name = 'UserName';  -- 替換 'UserName' 為目標用戶名

-- 查詢表權限
SELECT 
    dp.name AS PrincipalName, 
    tb.name AS TableName, 
    p.permission_name AS PermissionName, 
    p.state_desc AS PermissionState
FROM 
    sys.database_permissions AS p
    JOIN sys.tables AS tb ON p.major_id = tb.object_id
    JOIN sys.database_principals AS dp ON p.grantee_principal_id = dp.principal_id
WHERE 
    dp.name = 'UserName';  -- 替換 'UserName' 為目標用戶名

-- 在master執行存儲過程遍歷其他庫的權限
	EXEC sp_msforeachdb N'
    USE [?];
    SELECT 
        DB_NAME() AS DatabaseName,
        dp.name AS PrincipalName,
        dp.type_desc AS PrincipalType,
        o.name AS ObjectName,
		o.type_desc As ObjectType,
        p.permission_name AS PermissionName,
        p.state_desc AS PermissionState
    FROM sys.database_permissions p
    LEFT JOIN sys.objects o ON p.major_id = o.object_id
    LEFT JOIN sys.database_principals dp ON p.grantee_principal_id = dp.principal_id
    ;
';


-- 授予用戶在特定表上的 SELECT 權限
GRANT SELECT ON [dbo].[YourTable] TO [YourUser];

-- 授予用戶在特定存儲過程上的 EXECUTE 權限
GRANT EXECUTE ON [dbo].[YourProcedure] TO [YourUser];

-- 授予用戶在數據庫中的所有表上的 INSERT 權限
GRANT INSERT ON SCHEMA::dbo TO [YourUser];

-- 授予用戶表上特定列的權限
GRANT UPDATE ON [schema_name].[table_name] ([column_name]) TO [user_or_role_name];

-- 授予某個用戶或角色對特定存儲過程或函數的 EXECUTE 權限
GRANT EXECUTE ON OBJECT::[schema_name].[object_name] TO [user_or_role_name];

-- 回收權限 REVOKE 收回已授予的權限。
REVOKE EXECUTE ON OBJECT::dbo.MyStoredProcedure FROM MyUser;

-- DENY 明確拒絕權限,優先級高于 GRANT
DENY EXECUTE ON OBJECT::dbo.MyStoredProcedure TO MyUser;

-- 撤銷 `DENY` 權限
REVOKE SELECT ON dbo.YourTable TO YourUserName;

-- 重新授予權限
GRANT SELECT ON dbo.YourTable TO YourUserName;


-- 注意: 使用 OBJECT:: 前綴來明確指定權限授予的具體數據庫對象,如表、視圖、存儲過程等,建議都加上。
-- 對于數據庫級別的權限設置,不需要使用 OBJECT:: 前綴。
-- SCHEMA:: 前綴用于授予權限于整個模式(schema),不能用 OBJECT::取代。

DENY與不配置權限的區別

在 SQL Server 中,DENY 權限和不配置權限之間有著重要的區別。盡管在某些情況下它們的效果可能看似相同,但在特定場景下,DENY 權限可以起到明確禁止訪問的作用,防止權限繼承或沖突。

DENY 與未配置權限的區別

  1. 明確拒絕訪問:
    • DENY 會顯式地拒絕某個用戶或角色對某資源的訪問權限,即使該用戶或角色通過其他途徑(如角色成員資格或更高級別的繼承)獲得了該權限。
    • 如果你不配置權限,用戶可能通過角色繼承或其他方式獲得該權限。
  1. 權限沖突:
    • 在 SQL Server 中,如果一個用戶通過多個角色或權限來源獲得了某個權限,而其中一個角色/來源對該權限使用了 DENY,那么 DENY 將優先生效,阻止該用戶訪問該權限。
    • 未配置權限不會產生這種沖突處理機制,可能導致用戶通過其他方式間接獲得訪問權限。
  1. 安全性:
    • 在安全性要求較高的場景下,使用 DENY 可以確保某些敏感操作絕對不會被某些用戶執行。這對于防止權限升級或錯誤配置導致的安全隱患尤為重要。
    • 未配置權限可能在管理員錯誤賦權或忘記撤銷權限時,留下安全漏洞。

實際應用場景

  1. 權限分離與防止意外權限提升:
    • 當你需要確保某個用戶絕對不能執行某些操作時,使用 DENY 是最好的做法。比如,你可能希望某個應用程序用戶不能執行 DROP DATABASE 操作,即使該用戶被臨時加入了具有此權限的角色中。
  1. 更精細的權限控制:
    • 在復雜的權限結構中,使用 DENY 可以實現更精細的控制。例如,你可以允許某用戶讀取大部分表,但顯式 DENY 某些敏感表的讀取權限,確保這些表不被訪問。
  1. 強制性安全策略:
    • DENY 常用于強制性安全策略,確保即使管理員錯誤配置了權限,也能通過 DENY 機制進行有效控制,避免安全事故。

總結

DENY 權限用于在復雜的權限結構中提供更精細的訪問控制和安全保障。通過顯式拒絕權限,可以確保某些操作或訪問在任何情況下都被禁止,從而防止不必要的權限提升和安全風險。而不配置權限并不等同于 DENY,因為它可能允許用戶通過其他方式間接獲得權限。

permission_clas

在 SQL Server 中,permission_class 是指系統權限分類的類型,用于表示特定對象或資源的權限類別。不同的權限類別用于管理和控制對數據庫對象、服務器對象及其屬性的訪問權限。

1. SERVER

  • 描述: 服務器級權限,作用于整個 SQL Server 實例。
  • 示例: GRANT ALTER ANY LOGIN TO [User1];

2. DATABASE

  • 描述: 數據庫級權限,作用于整個數據庫。
  • 示例: GRANT CREATE TABLE TO [User1];

3. OBJECT_OR_COLUMN

  • 描述: 對象或列級權限,作用于特定的數據庫對象或列。
  • 示例: GRANT SELECT ON OBJECT::dbo.YourTable TO [User1];

4. SCHEMA

  • 描述: 模式級權限,作用于數據庫中的特定模式。
  • 示例: GRANT CONTROL ON SCHEMA::dbo TO [User1];

5. ENDPOINT

  • 描述: 端點級權限,作用于 SQL Server 端點。
  • 示例: GRANT CONNECT ON ENDPOINT::YourEndpoint TO [User1];

6. ASSEMBLY

  • 描述: 程序集級權限,作用于數據庫中的程序集對象。
  • 示例: GRANT EXECUTE ON ASSEMBLY::YourAssembly TO [User1];

7. TYPE

  • 描述: 類型級權限,作用于用戶定義的數據類型。
  • 示例: GRANT REFERENCES ON TYPE::YourType TO [User1];

8. XML_SCHEMA_COLLECTION

  • 描述: XML 架構集合級權限,作用于數據庫中的 XML 架構集合。
  • 示例: GRANT REFERENCES ON XML SCHEMA COLLECTION::YourXmlSchema TO [User1];

9. FULLTEXT_CATALOG

  • 描述: 全文目錄級權限,作用于數據庫中的全文目錄。
  • 示例: GRANT ALTER ON FULLTEXT CATALOG::YourFullTextCatalog TO [User1];

10. CERTIFICATE

  • 描述: 證書級權限,作用于數據庫中的證書對象。
  • 示例: GRANT CONTROL ON CERTIFICATE::YourCertificate TO [User1];

11. SYMMETRIC_KEY

  • 描述: 對稱密鑰級權限,作用于數據庫中的對稱密鑰。
  • 示例: GRANT CONTROL ON SYMMETRIC KEY::YourSymmetricKey TO [User1];

12. ASYMMETRIC_KEY

  • 描述: 非對稱密鑰級權限,作用于數據庫中的非對稱密鑰。
  • 示例: GRANT CONTROL ON ASYMMETRIC KEY::YourAsymmetricKey TO [User1];

13. CONTRACT

  • 描述: 服務合約級權限,作用于服務代理的合約對象。
  • 示例: GRANT CONTROL ON CONTRACT::YourContract TO [User1];

14. SERVICE

  • 描述: 服務代理服務級權限,作用于數據庫中的服務代理服務。
  • 示例: GRANT CONTROL ON SERVICE::YourService TO [User1];

15. REMOTE_SERVICE_BINDING

  • 描述: 遠程服務綁定級權限,作用于遠程服務綁定。
  • 示例: GRANT CONTROL ON REMOTE SERVICE BINDING::YourRemoteServiceBinding TO [User1];

16. ROUTE

  • 描述: 服務代理路由級權限,作用于數據庫中的路由對象。
  • 示例: GRANT CONTROL ON ROUTE::YourRoute TO [User1];

17. FULLTEXT_STOPLIST

  • 描述: 全文停止詞列表級權限,作用于全文停止詞列表對象。
  • 示例: GRANT ALTER ON FULLTEXT STOPLIST::YourFullTextStopList TO [User1];

18. DATABASE_PRINCIPAL

  • 描述: 數據庫主體級權限,作用于數據庫主體(如用戶、角色)。
  • 示例: GRANT CONTROL ON DATABASE PRINCIPAL::[YourPrincipal] TO [User1];

19. DATABASE_ROLE

  • 描述: 數據庫角色級權限,作用于數據庫中的角色。
  • 示例: GRANT CONTROL ON ROLE::YourRole TO [User1];

20. APPLICATION_ROLE

  • 描述: 應用角色級權限,作用于數據庫中的應用角色。
  • 示例: GRANT CONTROL ON APPLICATION ROLE::YourAppRole TO [User1];

21. USER

  • 描述: 用戶級權限,作用于數據庫中的用戶對象。
  • 示例: GRANT ALTER ON USER::YourUser TO [User1];

22. USER_DEFINED_FUNCTION

  • 描述: 用戶定義函數級權限,作用于數據庫中的用戶定義函數。
  • 示例: GRANT EXECUTE ON FUNCTION::YourFunction TO [User1];

23. TABLE

  • 描述: 表級權限,作用于數據庫中的表對象。
  • 示例: GRANT SELECT ON TABLE::YourTable TO [User1];

24. VIEW

  • 描述: 視圖級權限,作用于數據庫中的視圖對象。
  • 示例: GRANT SELECT ON VIEW::YourView TO [User1];

25. STORED_PROCEDURE

  • 描述: 存儲過程級權限,作用于數據庫中的存儲過程。
  • 示例: GRANT EXECUTE ON PROCEDURE::YourProcedure TO [User1];

26. SEQUENCE

  • 描述: 序列級權限,作用于數據庫中的序列對象。
  • 示例: GRANT SELECT ON SEQUENCE::YourSequence TO [User1];

27. SERVER_PRINCIPAL

  • 描述: 服務器主體級權限,作用于服務器主體(如登錄名)。
  • 示例: GRANT CONTROL ON SERVER PRINCIPAL::YourServerPrincipal TO [User1];

28. DATABASE_SCOPED_CREDENTIAL

  • 描述: 數據庫范圍憑據級權限。
  • 示例: GRANT ALTER ON DATABASE SCOPED CREDENTIAL::YourCredential TO [User1];

29. EXTERNAL_LIBRARY

  • 描述: 外部庫級權限,作用于數據庫中的外部庫對象。
  • 示例: GRANT EXECUTE ON EXTERNAL LIBRARY::YourExternalLibrary TO [User1];

30. AVAILABILITY_GROUP

  • 描述: 可用性組級權限,作用于數據庫中的可用性組對象。
  • 示例: GRANT ALTER ANY AVAILABILITY GROUP TO [User1];

31. COLUMN_MASTER_KEY

  • 描述: 列主密鑰級權限,作用于數據庫中的列主密鑰對象。
  • 示例: GRANT CONTROL ON COLUMN MASTER KEY::YourColumnMasterKey TO [User1];

32. COLUMN_ENCRYPTION_KEY

  • 描述: 列加密密鑰級權限,作用于數據庫中的列加密密鑰對象。
  • 示例: GRANT CONTROL ON COLUMN ENCRYPTION KEY::YourColumnEncryptionKey TO [User1];

33. EXTERNAL_DATA_SOURCE

  • 描述: 外部數據源級權限,作用于數據庫中的外部數據源對象。
  • 示例: GRANT CONTROL ON EXTERNAL DATA SOURCE::YourExternalDataSource TO [User1];

34. EXTERNAL_FILE_FORMAT

  • 描述: 外部文件格式級權限,作用于數據庫中的外部文件格式對象。
  • 示例: GRANT CONTROL ON EXTERNAL FILE FORMAT::YourExternalFileFormat TO [User1];

35. FULLTEXT_CATALOG

  • 描述: 全文目錄級權限,作用于數據庫中的全文目錄。
  • 示例: GRANT ALTER ON FULLTEXT CATALOG::YourFullTextCatalog TO [User1];

36. SEARCH_PROPERTY_LIST

  • 描述: 搜索屬性列表權限。
  • 示例: GRANT ALTER ON SEARCH PROPERTY LIST::YourSearchPropertyList TO [User1];

37. SERVER_AUDIT

  • 描述: 服務器審計權限。
  • 示例: GRANT CONTROL SERVER TO [User1];

38. AVAILABILITY_GROUP

  • 描述: 可用性組權限。
  • 示例: GRANT CONTROL AVAILABILITY GROUP::YourAvailabilityGroup TO [User1];

39. EXTERNAL_RESOURCE_POOL

  • 描述: 外部資源池權限。
  • 示例: GRANT CONTROL EXTERNAL RESOURCE POOL::YourExternalResourcePool TO [User1];

40. SERVER

_PRINCIPAL

  • 描述: 服務器主體級權限。
  • 示例: GRANT CONTROL ON SERVER::YourServerPrincipal TO [User1];

這就是 SQL Server 中所有的 permission_class 及其示例 GRANT 語句。每個 permission_class 對應著不同的 SQL Server 對象或作用范圍,你可以根據實際需求進行授權。

示例查詢權限類別

以下是一個查詢 SQL Server 權限類別的 T-SQL 語句示例:

SELECT 
    permission_name,
    permission_class,
    class_desc
FROM 
    sys.database_permissions;

總結

SQL Server 的 permission_class 值用于分類和描述權限的類型,不同的值表示不同級別的權限管理。了解這些權限類別有助于有效地配置和管理 SQL Server 的安全性及訪問控制。

文章來自個人專欄
文章 | 訂閱
0條評論
0 / 1000
請輸入你的評論
1
0