【问题标题】:Permissions required to access remote perfmon counters from SQL CLR从 SQL CLR 访问远程性能计数器所需的权限
【发布时间】:2012-01-28 03:29:58
【问题描述】:

所以我正在尝试学习 SQLCLR,并选择编写一个表值函数,该函数基本上收集了一些性能计数器。我能够成功运行它并从托管数据库实例的服务器收集计数器。但是,当我尝试访问另一台服务器上的计数器时,我得到“拒绝访问”。如果我将运行 SQL Server 的帐户添加到远程服务器上的“性能监视器用户”组中,我就能让它工作,但我想知道我是否可以让该功能作为不同的 Windows 帐户运行?也就是说,我可以专门为此任务创建一个 Windows 帐户,并让 SQL Server 在该上下文中运行该函数吗?

【问题讨论】:

    标签: sql-server sqlclr


    【解决方案1】:

    不,您不能让 SQLCLR 函数以特定用户身份运行。您可能听说过在 SQLCLR 函数中使用LogonUser API 来模拟用户,但这种方法存在欺诈问题,特别是由于密码存储问题。正确的解决方案正是您所做的,通过将 SQL Server 帐户添加到所需的安全组来授予他所需的权限。顺便说一句,如果您的 SQLCLR 函数模拟当前的 Windows 登录,您将需要设置 constrained delegation

    话虽如此,使用 SQLCLR 连接到远程计算机以执行任何事情并不是一件明智的事情。窃取宝贵的 SQL Server workers 让他们等待缓慢的网络访问将使您的服务器在负载下停止运行。您可以通过这样做来学习如何做到这一点,但甚至不要考虑在生产中部署它。让计数器收集由外部进程完成,并将计数器保存在数据库中。事实上,已经有一个工具可以完全做到这一点:logman.exe

    最后:从 C# API 查询性能计数器效率极低。您会很快发现有一个更快的 API,PDH library。但是 PDH 没有等效的管理工具,因此您将回到第一方,即使用确实利用 PDH 开箱即用的工具:logman.exe

    【讨论】:

    • 老鼠。我希望我可以用凭证做一些事情,但似乎没有。谢谢!
    猜你喜欢
    • 2013-01-02
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    相关资源
    最近更新 更多