2013-09-30 78 views
1

在Sql Server中是否有默認報告將輸出給定用戶或登錄的權限/安全歷史記錄?如果沒有,是否有人知道如何製作這樣的查詢?最近我們遇到了一個事件,那就是用戶神祕地丟失了對錶的插入權限,我們想知道究竟是什麼原因造成的。SQL Server - 用戶權限/安全更改報告

+0

我不認爲歷史是保留在任何表格。您必須使用日誌審查員,如Apex或Red Gate提供。你想檢查日誌的系統表將是'sys.database_permissions' –

回答

1

解決此問題的唯一方法是讀取存儲每個事務的詳細信息的事務日誌。如果你的數據庫處於完全恢復模式,那麼信息就在那裏。

不幸的是,你不能使用標準工具來做這件事,因爲MS不支持這一點。

你可以讓自己成爲一個商業日誌閱讀器或嘗試使用未記錄的命令(如fn_dblog)來破解它。

檢查這些了更多細節

Read the log file (*.LDF) in sql server 2008

SQL Server Transaction Log Explorer/Analyzer

How to view transaction logs in sql server 2008

+0

謝謝,我知道它會在那裏。 – matt

0

這是查詢數據庫權限的查詢。我們一直在使用此查詢的變體將權限從一個表複製到另一個表。

select * 
    FROM sys.database_permissions AS dp 
    INNER JOIN sys.objects AS o ON dp.major_id=o.object_id 
    INNER JOIN sys.schemas AS s ON o.schema_id = s.schema_id 
    INNER JOIN sys.database_principals AS dpr ON dp.grantee_principal_id=dpr.principal_id 
+0

謝謝,但我實際上更期待審計查詢 - 我想知道什麼進程/人員完全改變了這個用戶的權限。 – matt

+0

如果這些信息存儲在SQL中,我還沒有看到它/不知道在哪裏可以找到它。接下來我想到的是寫觸發器。但我不知道如何與模式信息一起工作。 – orgtigger