查找数据库中所有用户的所有权限/访问权限的 SQL Server 查询


简介

在 SQL Server 中,权限用于控制对数据库对象(如表和视图)的访问。数据库中的每个用户都有一组权限,这些权限决定他们可以在数据库中执行的操作,例如 SELECT、INSERT、UPDATE、DELETE 和 EXECUTE。要查看已授予数据库中用户的权限,可以使用 sys.database_permissions 视图。此视图提供有关已授予或拒绝特定数据库数据库级可保护对象的权限的信息。sys.objects 视图包含有关数据库中所有对象的信息,sys.database_principals 视图包含有关数据库用户的信息。

您可以将这三个视图连接在一起,以获取数据库中所有用户的权限列表。查询将返回一个包含三列的结果集:“用户名”、“权限”和“对象名”。“用户名”列将包含用户名,“权限”列将包含用户拥有的权限类型,“对象名”列将包含权限适用的对象(如表或视图)的名称。

定义

查找 SQL Server 数据库中所有用户的所有权限/访问权限的查询是一个查询,您可以使用它来查找已授予 SQL Server 中特定数据库中所有用户的权限/访问权限。查询将返回一个结果集,其中列出了用户名、权限以及权限适用的对象(如表和视图)的名称。该查询使用了 SQL Server 中的三个系统视图:`sys.database_permissions`、`sys.objects` 和 `sys.database_principals`。

`sys.database_permissions` 视图提供有关已授予或拒绝特定数据库数据库级可保护对象的权限的信息。`sys.objects` 视图包含有关数据库中所有对象的信息,`sys.database_principals` 视图包含有关数据库用户的信息。

查询基于上述三个视图之间的关系使用 INNER JOIN 来获取结果。查询将使用 WHERE 子句仅筛选数据库主体中的 SQL 用户。

请记住,此查询仅适用于您已连接到的特定数据库。如果您需要检查所有数据库中所有用户的权限,则需要针对每个数据库分别运行查询。

重要事项

使用查找 SQL Server 数据库中所有用户的所有权限/访问权限的 SQL 查询时,请记住以下几点:

  • 该查询使用 `sys.database_permissions`、`sys.objects` 和 `sys.database_principals` 视图,因此它仅适用于您已连接到的特定数据库。如果您需要检查所有数据库中所有用户的权限,则需要针对每个数据库分别运行查询。

  • 该查询返回有关已授予或拒绝数据库级可保护对象的权限的信息,因此它不会返回有关服务器级或对象级权限的信息。

  • 该查询仅返回有关 SQL 用户的信息,而不是 Windows 用户或角色。如果您想查看其他类型用户的权限,则需要相应地调整查询。

  • 该查询仅显示权限,但不提供有关受这些权限保护的对象的信息。如果您想查看有关对象的更多详细信息,您可以与其他系统视图(如 sys.tables、sys.procedures 等)进行 JOIN。

  • 请记住,此查询仅显示查询运行时的权限。如果之后修改了权限,则可能无法反映当前情况。

  • 如果数据库中有很多用户或对象,执行查询可能需要一些时间。您可能还需要考虑在相关视图列上添加索引以提高性能。

SQL 查询

以下是一个查询,您可以使用它来查找 SQL Server 中特定数据库中所有用户的权限/访问权限:

SELECT u.name as 'User Name', p.name as 'Permission', o.name as 'Object Name' FROM sys.database_permissions p INNER JOIN sys.objects o ON p.major_id = o.object_id INNER JOIN sys.database_principals u ON p.grantee_principal_id = u.principal_id WHERE u.type_desc = 'SQL_USER'

此查询将返回一个包含三列的结果集:“用户名”、“权限”和“对象名”。“用户名”列将包含用户名,“权限”列将包含用户拥有的权限类型,“对象名”列将包含权限适用的对象(如表或视图)的名称。

您可以根据您的需求更改 WHERE 子句以按用户名、权限、对象名称等进行筛选。

请注意,此查询仅适用于您已连接到的特定数据库。如果您需要检查所有数据库中所有用户的权限,则需要针对每个数据库分别运行查询。

结论

  • 查找 SQL Server 数据库中所有用户的所有权限/访问权限的 SQL 查询是一个有用的查询,用于识别已授予特定数据库中用户的权限。

  • 通过连接 `sys.database_permissions`、`sys.objects` 和 `sys.database_principals` 视图,该查询返回用户名、权限以及权限适用的对象(如表和视图)的名称列表。

更新于:2023年1月27日

43K+ 浏览量

启动您的职业生涯

通过完成课程获得认证

开始
广告