【问题标题】:How to create logs in a stored procedure如何在存储过程中创建日志
【发布时间】:2014-12-11 14:12:59
【问题描述】:

我想把日志放在我们数据库的一些存储过程中,以监控存储过程的工作情况。我是 SQL Server 2008 的新手。日志应该在生产服务器上创建。

我试过这个链接: http://www.codeproject.com/Articles/18469/Creating-Log-file-for-Stored-Procedure

但得到错误信息:

对象“xp_cmdshell”、数据库“mssqlsystemresource”、架构“sys”的执行权限被拒绝。

请给我一些需要的。

【问题讨论】:

    标签: sql-server-2008 stored-procedures


    【解决方案1】:

    首先,您确定要将数据记录到文本文件吗?将日志存储到单独的表中会更好吗?

    如果你想使用文本文件:

    由 xp_cmdshell 生成的 Windows 进程与 SQL Server 服务帐户具有相同的安全权限。

    检查此帐户的安全权限。

    xp_cmdshell 可以通过使用基于策略的管理或执行 sp_configure 来启用和禁用。

    检查您是否已启用它。

    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

    【讨论】:

    • 嗨@demas,我没有执行此操作的权限,是否有任何方法可以在不使用 xp_cmdshell 的情况下跟踪 storeprocedure 的工作
    • 您可以更改 sp 的代码并将您需要的所有信息存储在您将为此任务创建的表中
    【解决方案2】:

    应该使用 ma​​ster 数据库向对象授予权限

    Use Master    
    grant execute on xp_cmdshell to 'user'
    

    【讨论】:

    【解决方案3】:

    使用xp_cmdshell 进行日志记录不利于安全性和性能。请从您的浏览器中删除该 codeproject 链接,然后忘记您曾经看过它。说真的,这很糟糕。

    如果您想记录对 procs 的调用,则:

    • 为此设置一张桌子(正如 demas 也建议的那样)。您可以将 DATETIME 字段默认为 GETDATE() 或 GETUTCDATE()。您可以有一个用于 Proc Name 的字段,一个用于参数的字段。随便。

    • 使用 SQLCLR 创建一个执行简单 File.Write 信息的存储过程。您可以使用模拟(xp_cmdshell 不能做的事情)让安全上下文成为运行 proc 的人的安全上下文,而不是 SQL Server 进程的登录帐户。这种方法比xp_cmdshell 更有效和更包容,即使不使用模拟也是如此。

    • 做一个日志表+SQL CLR [或其他]的组合:您可以将日志记录到表中以便立即写入。然后设置一个 SQL 代理作业,使用 SQLCLR 或其他方式将 X 天前的条目归档到文件中。这样,表格就不会变得太大,其中的信息可能比您研究当前正在发生的问题所需的信息更早。

    【讨论】:

    • 我也觉得使用 xp_cmdshell 不是一个好主意,因为我还需要管理员权限。因此,能否请您告诉我如何通过 sqlclr 创建存储过程。
    猜你喜欢
    • 2011-05-09
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 2011-03-18
    • 1970-01-01
    相关资源
    最近更新 更多