2014-12-11 22 views
0

我想將日誌存儲在我們數據庫中的某些存儲過程中,以監視存儲過程的工作情況。我是SQL Server 2008的新手。日誌應該在生產服務器上創建。如何在存儲過程中創建日誌

我試過此鏈接: http://www.codeproject.com/Articles/18469/Creating-Log-file-for-Stored-Procedure

,但得到的錯誤信息:

執行權限被拒絕的對象 '的xp_cmdshell',數據庫 'mssqlsystemresource',架構 'SYS'。

請給我一些必要的。

回答

0

首先,你確定你想將數據記錄到文本文件授予權限?可能將日誌存儲到單獨的表格會更好嗎?

如果你想與文本文件的工作:

Windows進程使用xp_cmdshell催生具有相同的安全權限的SQL Server服務帳戶。

檢查此帳戶的安全權限。

可以使用基於策略的管理或通過執行sp_configure來啓用和禁用xp_cmdshell。

檢查確保已啓用。

EXEC sp_configure 'show advanced options', 1 
GO 
RECONFIGURE 
GO 
EXEC sp_configure 'xp_cmdshell', 1 
GO 
RECONFIGURE 
GO 

當由不是sysadmin固定服務器角色成員的用戶調用xp_cmdshell的使用存儲在一個名爲## xp_cmdshell_proxy_account ##憑據的帳戶名和密碼連接到Windows。如果此代理憑證不存在,則xp_cmdshell將失敗。

您需要create proxy account

EXEC sp_xp_cmdshell_proxy_account [MyDomain\SQLServerProxy], 'usdcu&34&23' 

添加權限使用該SP:

USE master; 
GRANT EXECUTE on xp_cmdshell to Current_user 

這裏是一個更detailed information

+0

hi @demas,我沒有權限執行此操作,它有任何方法可以跟蹤storeprocedure的工作而不使用xp_cmdshell – 2014-12-11 09:27:22

+0

您可以更改sp的代碼並將所需的所有信息存儲在表中,您將爲此任務創建 – demas 2014-12-11 09:55:02

0

使用數據庫對象應該做

Use Master  
grant execute on xp_cmdshell to 'user' 
+0

http://stackoverflow.com/questions/2016669/getting-execute-permission-to-xp-cmdshell您也可以參考此鏈接。這已經被回答了。 – msgpdev10 2014-12-11 05:56:07

0

使用xp_cmdshell進行日誌記錄對安全性和性能都不利。請從您的瀏覽器中刪除codeproject鏈接,並忘記您曾經看到過它。嚴重的是,這是壞事。

如果你想登錄到特效的呼叫,包括:

  • 擺一張桌子,這(如德馬斯還建議)。您可以將DATETIME字段默認爲GETDATE()或GETUTCDATE()。您可以爲Proc Name(參數字段)提供一個字段。隨你。

  • 使用SQLCLR來創建一個存儲過程,做了信息的簡單File.Write。您可以使用模擬(xp_cmdshell不能這樣做)使安全上下文成爲運行proc的人員的安全上下文,而不是SQL Server進程的登錄帳戶。即使未使用模擬,此方法的效率也高於xp_cmdshell

  • 執行日誌表+ SQL CLR [或別的]的組合:您可以登錄到表上寫。然後設置一個SQL Agent作業,使用SQLCLR或其他方法將超過X天的條目歸檔到文件中。通過這種方式,表格不會變得太大,因爲信息可能比您目前正在研究的問題所需的信息要舊得多。

+0

i我也覺得使用xp_cmdshell不是一個好主意,因爲我還需要一個管理員權限。因此,你能告訴我如何通過sqlclr創建一個storedprocedure。 – 2014-12-11 09:20:47