この記事では、SQLServerでリンクサーバーのログインを作成します。この場合、(SSMSなどのGUIを使用するのではなく)Transact-SQLを使用します。
リンクサーバーのログインを作成するには、sp_addlinkedsrvloginを使用します システムストアドプロシージャ。
構文
構文は次のようになります:
sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname'
[ , [ @useself = ] { 'TRUE' | 'FALSE' | NULL } ]
[ , [ @locallogin = ] 'locallogin' ]
[ , [ @rmtuser = ] 'rmtuser' ]
[ , [ @rmtpassword = ] 'rmtpassword' ]
次の例は、これがどのように機能するかを示しています。各引数の詳細については、Microsoftの公式ドキュメントを参照してください。
例1-リンクサーバーのログインを追加する
次に、HomerというリンクサーバーにMaggieというSQLServerログインを追加する例を示します。
EXEC sp_addlinkedsrvlogin
@rmtsrvname=N'Homer',
@useself=N'FALSE',
@locallogin=NULL,
@rmtuser=N'Maggie',
@rmtpassword=N'BigStrong#Passw0rd';
リンクサーバーを作成した後、ローカルサーバーでこれを実行します。実際のリモートサーバーに同じクレデンシャルで対応するログインが必要です。
例2–リンクサーバーを含める
完全を期すために、ここでも説明しますが、今回は最初にリンクサーバーを作成します:
EXEC sp_addlinkedserver
@server=N'Homer',
@srvproduct=N'',
@provider=N'MSOLEDBSQL',
@datasrc=N'172.17.0.2',
@catalog='Music';
EXEC sp_addlinkedsrvlogin
@rmtsrvname=N'Homer',
@useself=N'FALSE',
@locallogin=NULL,
@rmtuser=N'Maggie',
@rmtpassword=N'BigStrong#Passw0rd';
実際の(リモート)リンクサーバーが同じ資格情報でログインしている限り、ローカルサーバーはリンクサーバーにログインできます。
例3–リモートサーバーにログイン/ユーザーを追加する
前述のように、リモートサーバーに対応するログインがあることを確認する必要があります。また、このログインが適切な権限を持つデータベースユーザーにマップされていることを確認する必要があります。
したがって、この場合、リモートサーバーにジャンプしてこれを実行することにより、リモートサーバーにログインを作成できます。
CREATE LOGIN Maggie
WITH PASSWORD = 'BigStrong#Passw0rd';
USE Music;
CREATE USER Maggie FOR LOGIN Maggie;
GRANT SELECT ON DATABASE::Music TO Maggie;
これにより、Maggieというログインと、Maggieという対応するデータベースユーザーが作成されます。また、SELECTを付与します 音楽データベースのMaggieへのアクセス許可。
これで、このログインを使用する分散クエリはすべてミュージックデータベースに制限されます。
GRANT SELECT ON DATABASEを使用する代わりの方法 、ユーザーを db_datareaderに追加します 固定データベースの役割、またはおそらくカスタムの役割に。
リモートサーバーでログインとデータベースユーザーを作成する前にリンクサーバーを作成した場合は、リンクサーバーを削除して再度作成する必要がある場合があります。もしそうなら、あなたはそれをこのように落とすことができます:
EXEC sp_dropserver 'Homer', 'droplogins';
ドロップすると、リンクサーバーとそれに関連付けられたログインを再度作成できます。
本当にリンクサーバーログインが必要ですか?
上記の例のようにログインを追加する必要がない可能性もあります。
SQL Serverで最初にリンクサーバーを作成すると、ローカルサーバーのすべてのログインとリンクサーバーのリモートログインの間のデフォルトのマッピングが自動的に作成されます。 SQL Serverは、ログインに代わってリンクサーバーに接続するときに、ローカルログインの資格情報を使用します。
したがって、ローカルログインに、リンクされたサーバーに同じ資格情報を持つ対応するログインがあり、適切な権限がある場合は、問題ありません。リンクサーバーのログインを追加する必要はありません。
そうは言っても、他のユーザーのためにログインを追加するなど、別のログインを追加する理由は他にもあるかもしれません。
単一のローカルユーザーのログインマッピングを作成することもできます。その場合は、@localloginを使用できます。 マップするローカルログインを指定する引数。
さまざまなシナリオでリンクサーバーログインにアクセスしようとするさまざまなローカルログインの例については、リンクサーバーでのログインのしくみを参照してください。