我正在使用SQL Server 2005,我想知道所有表的特定数据库上的所有授权。这也有助于找出为特定用户提供删除资助的所有表格。如何查看SQL数据库的所有授权?
注:这可能是类似于this question,但我不能让所选答案的解决方案时(如果有人可以提供如何使用一个更好的例子,这将有助于为好)
我正在使用SQL Server 2005,我想知道所有表的特定数据库上的所有授权。这也有助于找出为特定用户提供删除资助的所有表格。如何查看SQL数据库的所有授权?
注:这可能是类似于this question,但我不能让所选答案的解决方案时(如果有人可以提供如何使用一个更好的例子,这将有助于为好)
给定的解决方案不包括对模式或数据库本身授予权限的位置,这也授予针对表的权限。这也会给你这些情况。您可以使用针对permission_name的WHERE子句来限制为仅删除。
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或其衍生物出现。
要查看所有特定的数据库上的许可使用:
Select * from INFORMATION_SCHEMA.TABLE_PRIVILEGES
来只查看删除特定的数据库使用赠款这样的:
Select * from INFORMATION_SCHEMA.TABLE_PRIVILEGES WHERE PRIVILEGE_TYPE = 'DELETE'
要查看的补助金整个数据库,选择有问题的数据库,打开一个新的查询窗口,输入 - sp_helprotect
,执行查询
要列出所有可以控制的权限,可以使用函数fn_my_permission
。此查询列出服务器的所有权限:
select * from fn_my_permissions(NULL, NULL)
你必须使用具有系统管理员角色的帐户登录。
您可以使用以下参数改进函数调用。
有关数据库的所有权限:在表
对于所有权限:
select * from fn_my_permissions('dbo.test', 'object')
select * from fn_my_permissions(NULL, 'database')
有关DBO所有权限模式
我喜欢K.布赖恩凯利的答案,但我想要更多的信息(如架构)以及生成相应的GRANT和REVOKE语句,以便我可以将它们应用于不同的环境中(例如dev/test/prod )。
注意,您可以轻松地排除系统对象,见注释where子句
select
class_desc
,USER_NAME(grantee_principal_id) as user_or_role
,CASE WHEN class = 0 THEN DB_NAME()
WHEN class = 1 THEN ISNULL(SCHEMA_NAME(o.uid)+'.','')+OBJECT_NAME(major_id)
WHEN class = 3 THEN SCHEMA_NAME(major_id) END [Securable]
,permission_name
,state_desc
,'revoke ' + permission_name + ' on ' +
isnull(schema_name(o.uid)+'.','')+OBJECT_NAME(major_id)+ ' from [' +
USER_NAME(grantee_principal_id) + ']' as 'revokeStatement'
,'grant ' + permission_name + ' on ' +
isnull(schema_name(o.uid)+'.','')+OBJECT_NAME(major_id)+ ' to ' +
USER_NAME(grantee_principal_id) + ']' as 'grantStatement'
FROM sys.database_permissions dp
LEFT OUTER JOIN sysobjects o
ON o.id = dp.major_id
-- where major_id >= 1 -- ignore sysobjects
order by
class_desc desc
,USER_NAME(grantee_principal_id)
,CASE WHEN class = 0 THEN DB_NAME()
WHEN class = 1 THEN isnull(schema_name(o.uid)+'.','')+OBJECT_NAME(major_id)
WHEN class = 3 THEN SCHEMA_NAME(major_id) end
,permission_name
则sp_helprotect在SQL 2005和更高弃用。请参阅http://msdn.microsoft.com/en-us/library/ms190310.aspx – 2011-11-30 14:58:00