2016-07-07 5 views
0

同じサーバー上の別のデータベースBに対してSELECTクエリを実行するMicrosoft SQL Server上のデータベースAのビューを使用するアプリケーションがあります。これは運用SQLサーバーです。問題は、サーバーのユーザーアカウントにデータベースAにアクセスするためのアクセス許可のみがあることです。したがって、サーバーがビューの選択クエリを実行すると、エラーが発生します。ストアドプロシージャ/ビューは同じサーバー上の別のデータベースにアクセスします(セキュリティの問題)

"サーバープリンシパル" .... "はできません現在のセキュリティコンテキストで、データベースBにアクセスすることができます。

我々がVIEWこの方法を使用する必要がありますように思えるし、それがサーバー(アプリケーションをホストするIIS)のためのデータベースBへのアクセスを許可するには余りにも危険なのです

証明書などのようにVIEW選択クエリを使用してサーバーがデータを取得する方法はありますか

I誰かが私を正しい方向に向けることができれば感謝します。ありがとう!

+0

管理者権限を持つストアドプロシージャをgt結果に設定するか、SQLCMD.EXEを使用してbat cmdを実行して結果を得ることができます。 batファイルは異なる権限で実行できます。 – jdweng

答えて

1

これは短いコメントです。

SQL Serverには、execute asという句があり、欲しいものを正確に実行できます(here参照)。この節は、スタンドアロンでも、create procedurecreate function、およびexecのオプションとしても使用できます。たとえば、フルアクセス許可を持つユーザー(セキュリティコンテキスト)を使用してクエリを実行できます。

呼び出し元ではなく所有者のセキュリティコンテキストで実行する関数を定義することもできます(here、特に例Aを参照)。ビューをインラインテーブル値関数に置き換えることは簡単です。完全なテーブル値関数を定義する必要があります。

0

ユーザーを2番目のデータベースに追加することはできますが、その中から選択する以外は何もしないようにすることができます。VIEW特殊ロールを作成し、ビューにそのロールに対するアクセス許可をSELECTに付与してから、そのロールにユーザーを追加します(publicと他のすべてのロールから削除します)。

関連する問題