この質問が既に尋ねられた別の質問が繰り返される場合、私は謝罪します。私は何時間も検索しましたが、自分の状況に合うものを見つけていません。
望ましい結果
SQL認証を使用するユーザーは、Server1(デフォルトのインスタンス)上のDatabase1に対する実行権限を持っています。ユーザーは、プロセスの一部として、Server1 \ Instance2上のデータベース2にアクセスするストアドプロシージャを実行します。安全でシンプルなものにしたいと思います(どちらも重要です)。
より詳しい情報
私のWindows資格情報は、(同じサーバー上にある)両方のインスタンスにアクセスできます。したがって、ログインの下で問題なくストアドプロシージャを実行できます。ただし、ユーザーに自分のアクセスレベルを付与したくありません。ユーザーがドメインにいないため、SQLログインも使用する必要があります。
ストアドプロシージャに、そのプロシージャだけのアクセスレベルを与えたいと思います。私はシステム管理者なので、その手順に必要なすべてをユーザーに提供します。それが機能するようになったら、おそらく私の目的ではなく、その目的のためだけにアカウントを作成しますが、ストアドプロシージャの動作を制御するので、どちらにしても安全です。
"WITH EXECUTE AS"ステートメントをストアドプロシージャに入れてみましたが、Windowsログイン情報を取得できませんでした。私がそれを入れると、ストアドプロシージャをコンパイルすると次のエラーが発生します:
ユーザー 'domain \ jdoe'は、存在しないか、権限がないため、実行できません。
私が言ったように、ユーザーは両方のサーバーのsysadminなので、それ以上何が必要かわかりません。
私は以下を調べました:
- 信頼できる-データベースを公開しないほうがいい
- リンクサーバー-追加のアクセス許可を与えたくありません。他のデータベースが自分のデータベースにアクセスすることを信頼していません。また、自分のデータベースが他のすべてのデータベースにアクセスすることを信頼していません。
- 証明書-これは複雑で難しいようです。これを実行し、維持するための非常に簡単な方法を見つけられない限り、問題の価値があるかどうかはわかりません。
- 所有権の連鎖-繰り返しますが、怖いです。私の目標がセキュリティ問題を防ぐことであるとき、これはより多くのセキュリティ問題を引き起こすようです。
- ミラー化されたユーザー-他のサーバーインスタンスに同じ(明らかに異なるSID)ユーザーを作成し、同じパスワードを与えました。立ち入り禁止。
私は明白な何かを見逃しているように感じますが、それが何かはわかりません。一日中壁に頭をぶつけてきたので、近すぎて見られないだろう。ここで誰かが私に手を差し伸べるか、私を正しい方向に向けてくれれば幸いです。私は多くのMSDN記事を読んだと言います(男の子は嫌いですか?私が知りたいことを教えてくれないようです)。私が本当に欲しいのは、これを行う方法を順を追って説明するシンプルで簡単なチュートリアルです。それ以外に、私が進むべき方向の一般的な表示でさえ役立つでしょう。