我使用的是SQL Server 2005,我想找出所有表在特定数据库上的所有授权。这也将有助于找出所有已为特定用户提供删除授权的表。
给定的解决方案未涵盖针对架构或数据库本身授予权限的位置,也针对表格或数据库本身授予了权限。这也会给您带来这些情况。您可以对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或其派生类中看到它。