短いバージョン:外部データベースへのアクセスをロールに付与できますか?別のユーザー/ロールに1つのデータベースへのアクセスを許可する
ロングバージョン:
私は、アプリケーションのSQL Serverインスタンス(database1
)からデータを取得しているクリスタルを使用してレポートに取り組んでいます。
アプリケーションがレポートを実行しており、レポート内の接続を上書きすると、アプリケーションコードにアクセスできません。
電話交換機から情報を収集しているサーバーに新しいDBを追加しました。この情報の一部をアプリケーションデータ(database1
)に追加します。
私はデータに参加することができ、デザイナー(SAとしてログイン)で実行されたときにレポートが機能しますが、アプリケーションから外部でレポートを実行すると、かなり一般的なエラー(データの取得に失敗しました)で失敗します。
私は、エラーがなくなるとSAとしてアプリケーションにログインしたようなエラーが新しいDB権限によって引き起こされていると仮定しています。
アプリケーションには、テーブル/ビュー/ spをアプリケーションdb(database1
)に追加するときに、レポートを実行するユーザーに特別なDBロールがあります。このロールにselect/executeを付与するだけで、 。
今は別のデータベースにオブジェクトがありますが、役割には簡単にアクセスできません。
既存のロールで2番目のdb(database2
)を参照できる方法はありますか?
例:
USE [database1]
GRANT EXECUTE ON [database2].[dbo].[CUSTOM_PROCEDURE] TO [applicationrole1]
OR
USE [database2]
GRANT EXECUTE ON [dbo].[CUSTOM_PROCEDURE] TO [database1].[dbo].[applicationrole1]
は、理想的には私が役割にリンク何とかではなく、ロールが新しいユーザーを追加/設定されている定期的にアプリケーションによって更新され、新しい役割を再作成することができるようにしたいです。
(これは問題に関連していないとして、クリスタル・レポートでタグ付けされていない)
編集:
のようなものを行うにはどのような方法があります:
INSERT INTO Database2.sys.database_principals
SELECT * FROM Database1.sys.database_principals
WHERE [type] = 'S'
ユーザー(ログインではなく)をコピーして役割メンバーを追加するには?
これは、 'database1'に追加された新しいユーザに対して行うことができますか? – bendataclear
追加する必要のあるユーザは、各データベースで 'CREATE USER [ユーザ名] FOR LOGIN [ログイン名]'と 'exec sp_addrolemember ...'部分を使用するだけです(CREATE USER部分は省略できます管理スタジオを介して、各データベースのユーザーを作成しました)。 – HackedByChinese
新規ユーザーは非常に定期的に追加され、毎回これらのスクリプトを実行しなければならない場合があります。ログインをミラーリングする方法はありますか? – bendataclear