2011-09-12 4 views
0

同じSQL2008サーバー上に2つのデータベースがあり、1つのデータベースの複数のストアドプロシージャ(Aと呼ぶ)が別のデータベースのテーブルにアクセスする必要がありますB)。私は、AのSQLユーザーがAのプロシージャーを実行する権限を持っていることを確認しましたが、セキュリティを試すためにDENY ALL ON mytablenameも実行しました。 I上MYPROCを実行しているときにかかわらず、ダムのどこかにいる...データベースAのストアドプロシージャに対するアクセス許可が必要データベースBのテーブルから選択する

が、私はこのエラーを取得しています:ODBCドライバーエラーのため
のMicrosoft OLE DBプロバイダ '80040e09'
[Microsoft]の[ODBC SQL Serverドライバー] [SQLサーバー] SELECT権限がオブジェクト 'mytablename'、データベース 'B'、スキーマ 'dbo'で拒否されました。

私はGRANT SELECTのテーブルにアクセスできましたが、これは実際に解決策ではありませんか?私はいずれかのデータベースのprocsがテーブルへのSELECTアクセスを持つことができます、ユーザーがテーブルから直接選択することができないようにしたいと思います。

データベースAを有する:
表 - mytablename
ユーザ - myuserA(ログインに連結されたのdb_datareaderのメンバー、いわゆる 'ボブ')

データベースBが有する:
PROC - MYPROC(これA..mytablenameから選択)
ユーザー - 同じログインボブ」にリンクされmyuserB(のdb_datareaderのメンバー、)

私たちは本当にDBAを必要と実現が、我々は2人の従業員しか持たない!

答えて

1

DENY ALL ON tableを実行すると、SELECTを明示的に付与しても、実質的に許可が拒否されます。 DENYはすべてを超越しています。

次に、データベースBのビューを作成し、データベースAのSPを実行できるユーザーにSELECTを付与します。DB AのSPが実行されると、セキュリティはDB AからDB Bに伝播されます。

+0

私はすべてのDENYのものを取り除き、再び始めなければならないようですね!ビューを使わずに私が望むものを達成する方法はありますか? –

関連する問題