searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

TeleDB-Sqlserver权限及角色解析

2024-08-05 09:31:31
65
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
10文章数
1粉丝数
lawen
10 文章 | 1 粉丝
原创

TeleDB-Sqlserver权限及角色解析

2024-08-05 09:31:31
65
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 的安全性及访问控制。

文章来自个人专栏
SQL Server
8 文章 | 2 订阅
0条评论
0 / 1000
请输入你的评论
1
0