一尘不染

如何查看SQL数据库的所有拨款?

sql

我使用的是SQL Server 2005,我想找出所有表在特定数据库上的所有授权。这也将有助于找出所有已为特定用户提供删除授权的表。


阅读 161

收藏
2021-03-17

共1个答案

一尘不染

给定的解决方案未涵盖针对架构或数据库本身授予权限的位置,也针对表格或数据库本身授予了权限。这也会给您带来这些情况。您可以对permission_name使用WHERE子句以将其限制为仅DELETE。

SELECT 
    class_desc 
  , CASE WHEN class = 0 THEN DB_NAME()
         WHEN class = 1 THEN OBJECT_NAME(major_id)
         WHEN class = 3 THEN SCHEMA_NAME(major_id) END [Securable]
  , USER_NAME(grantee_principal_id) [User]
  , permission_name
  , state_desc
FROM sys.database_permissions

另外,还需要检查db_datawriter的成员资格,因为它提供了隐式的INSERT,UPDATE和DELETE权限,这意味着您不会在权限DMV或其派生类中看到它。

2021-03-17