2012-03-23 14 views
1

私はSQL Server 2005を使用しています 私はユーザーがいます。私たちは彼をUser1と呼ぶでしょう。下のサーバープリンシパル「SA」はデータベースにアクセスすることはできません、SQL権限Conundrum

DB1..Table1 (can read, just fine) 
DB1..Proc1 (reads Table1. works fine) 
DB2..Table2 (can read, works) 
DB2..Proc2 (reads Table2, works) 
DB1..Proc3 (reads Table1 with a join on DB2..Table2... 

をメッセージ916、レベル14、状態1「DB2」:ここでは

DB1 (read,write,execute) 
DB2 (read,execute) 

は何が起こるかです:彼はそうのようなアクセス権を持っています現在のセキュリティコンテキスト)

BUT!

同じSELECT ... JOINは、ストアドプロシージャの一部ではない場合にはきわめて有効です。

これは深刻な頭を傷つける者であり、私の仕事を支えています。何か案は?

+0

これらは両方とも同じサーバー上にあり、ユーザーのデフォルトのスキーマでもあるデフォルトのDBOスキーマを使用しています。 – Patrick

+0

"sa"への参照は困惑しています。 DB1..Proc3は 'sa'というEXECUTEで作成されましたか? –

+0

いいえ、私はちょっと変わったことに気づいただけです。 "sa"は、すべてのデータベース上のユーザー "dbo"にリンクされています。ただし、DB2にはログイン名が空白です。おそらくそれが再付着することができればうまくいくでしょうか? – Patrick

答えて

0

私はそれを得ました。 DB1は信頼できるとマークする必要がありました。インストーラはそれを行いましたが、アップデータは実行を終えた時点で再びそれを行う必要がありました。

0

上記のコメントに基づいて、dboがサーバー上のログインにマップされていないという事実が問題の可能性があります。 alter authorization on database::[yourdb] to [login]を試してください(明らかにyourdbとloginを適切な値に置き換えてください)。