この記事では、SQL Serverでリンクサーバーを構成して、1つのローカルログインのみがアクセスできるようにします。これを行うには、単一のローカルログインのログインマッピングを追加する前に、リンクサーバーの作成時に自動的に作成されるマッピングをすべて削除します。
リンクサーバーとログインマッピングの構成
EXEC sp_addlinkedserver @server=N'Homer', @srvproduct=N'', @provider=N'MSOLEDBSQL', @datasrc=N'172.17.0.2', @catalog='Music'; EXEC sp_droplinkedsrvlogin 'Homer', NULL; EXEC sp_addlinkedsrvlogin @rmtsrvname=N'Homer', @useself=N'FALSE', @locallogin='Milhouse', @rmtuser=N'Maggie', @rmtpassword=N'BigStrong#Passw0rd';
この例では、Homerというリンクサーバーを作成します。次に、Milhouseと呼ばれる特定のローカルログインのログインを追加する前に、自動的に作成されたすべてのログインマッピングを削除します。
この例の関連行は、@locallogin='Milhouse'
です。 。これは、指定されたローカルログイン(この場合は「Milhouse」)に対してログインマッピングを作成することを指定する行です。
これで、リンクサーバーに接続できるローカルログインはMilhouseだけになります。
仕組み
sp_addlinkedserver
を使用する場合 SQL Serverでリンクサーバーを作成するために、ローカルサーバーのすべてのログインとリンクサーバーのリモートログインの間のデフォルトのマッピングが自動的に作成されます。 SQL Serverは、ログインに代わってリンクサーバーに接続するときに、ローカルログインの資格情報を使用します。
これは、これらのマッピングが実際に必要な場合に最適です。明示的に作成する必要がなくなります。ただし、しない それらが必要な場合は、sp_droplinkedsrvlogin
を使用する必要があります それらを削除します。それが上記の例で私がしたことです。
自動的に作成されたログインマッピングをすべて削除したら、sp_addlinkedsrvlogin
を自由に使用できます。 特定のローカルログインのマッピングを追加します。
すべてのローカルログインにログインマッピングの共有を許可する
すべてのローカルログインが同じログインマッピングを使用するように構成することもできます(たとえば、Milhouseだけに限定されないようにするため)。また、各ローカルログインを対応するリモートログインにマップするのではなく、リンクサーバー用に構成したログインを使用できます。これを行うには、@locallogin=NULL
を設定するだけです。 。これにより、リンクサーバーに対応するリモートログインがあるかどうかに関係なく、すべてのローカルログインがリンクサーバーに接続できます。
さまざまなシナリオでリンクサーバーログインにアクセスしようとするさまざまなローカルログインの例については、リンクサーバーでのログインのしくみを参照してください。