2012-01-27 10 views
0

SQLCLRを学習しようとしていて、本質的にいくつかのperfmonカウンタを収集するテーブル値関数を書くことを選択しました。私はそれを正常に実行し、データベースインスタンスをホストするサーバーからカウンターを収集することができます。しかし、別のサーバーのカウンターにアクセスしようとすると、「アクセスが拒否されました」というメッセージが表示されます。 SQL Serverを実行するアカウントをリモートサーバー上の "Performance Monitor Users"グループに追加すると機能するようになりますが、この機能を別のWindowsアカウントとして実行できるかどうかを知りたいのですが?つまり、このタスク専用のWindowsアカウントを作成して、そのコンテキストでSQL Serverに関数を実行させることができますか?SQL CLRからリモートperfmonカウンタにアクセスするために必要なアクセス

答えて

1

いいえ、SQLCLR関数を特定のユーザーとして実行することはできません。 LogonUser APIを使用してSQLCLR関数でユーザーを偽装することがよく聞かれるかもしれませんが、その方法は特にパスワード保管の問題のために問題を抱えています。正しい解決策は、まさにあなたがやったことです。必要なセキュリティグループに彼を追加することによって、SQL Serverアカウントに必要な特権を与えます。ところで、SQLCLR関数が現在のWindowsログインを偽装する場合は、constrained delegationを設定する必要があります。

SQLCLRを使用してのリモートマシンに接続すると、は賢明ではありません。貴重なSQL Server workersを盗んで、低速のネットワークアクセスで待機させようとすると、サーバーが負荷のかかる状態で停止することになります。これを行う方法を学ぶ方法としてこれを行うことはできますが、実稼働環境での展開については考えていません。外部プロセスによってカウンタの収集を行い、カウンタをデータベースに保存します。実際には、すでにlogman.exeというツールを使用しています。

最後に、C#APIのパフォーマンスカウンタを照会するのが効率的ではありません。はるかに高速なAP​​I、PDH libraryがすぐに見つかるでしょう。しかし、PDHには同等の管理機能がないので、正方形に戻ります。のツールを使用して、すぐにPDHを利用します:logman.exe

+0

ラット。私は信用証明書でできることがあることを期待していましたが、そうではないようです。ありがとう! –

関連する問題