単一の SqlServer インスタンス内に 2 つのデータベースがあります。ServiceBroker サービスを使用して、あるデータベースから別のデータベースにメッセージを送信する必要があります。私の場合、セキュリティリスクのためにこれはオプションではないため、データベースでTRUSTWORTHYを「ON」に設定せずにどのように行うことができますか?
1 に答える
証明書を使用してダイアログ セキュリティを設定する必要があります。ダイアログ セキュリティの証明書を参照してください。
- 関連する両方のDBでDBマスターキーを作成します
イニシエータ サービス オーナー (dbo の可能性が高い) の証明書を作成してエクスポートする
USE <initiatordb>;
CREATE CERTIFICATE [<initiatorservicename>] AUTHORIZATION [<initiatorserviceowner>] WITH SUBJECT = '<initiatorservicename>';
BACKUP CERTIFICATE [<initiatorservicename>] TO FILE = 'c:\temp\<initiatorservicename>.cer'
;ターゲット サービスに対して、同じことを行います。
USE <targetdb>;
CREATE CERTIFICATE [<targetservicename>] AUTHORIZATION [<targetserviceowner>] WITH SUBJECT = '<targetservicename>';
BACKUP CERTIFICATE [<targetservicename>] TO FILE = 'c:\temp\<targetservicename>.cer'
;イニシエータ サービス所有者の証明書をターゲット DB にインポートし、プロキシ ユーザーを作成して、SEND 権限を付与します。
USE <targetdb>;
CREATE USER [<initiatorserviceproxyuser>] WITHOUT LOGIN;
CREATE CERTIFICATE [<initiatorservicename>] AUTHORIZATION [<initiatorserviceproxyuser>] FROM FILE='c:\temp\<initiatorservicename>.cer'
GRANT SEND ON SERVICE::[<targetservicename>] TO [<initiatorserviceproxyuser>];
ターゲット サービス オーナーの証明書をイニシエーター DB にインポートし、そのプロキシ ユーザーを作成して、リモート サービス バインディングをマップします。
USE <initiatordb>;
CREATE USER [<targetserviceproxyuser>] WITHOUT LOGIN;
CREATE CERTIFICATE [<targetservicename>] AUTHORIZATION [<targetserviceproxyuser>] FROM FILE='c:\temp\<targetservicename>.cer'
CREATE REMOTE SERVICE BINDING [<targetservicename>] WITH SERVICE_NAME = '<targetservicename>', USER = [<targetserviceproxyuser>];
これはすべてメモリから入力したもので、構文が正しいことを願っています。