我正在使用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