このページでは、インスタンスの登録、リンクサーバーの追加、リンクサーバーのクエリなど、Cloud SQL インスタンスでリンクサーバーを管理する方法について説明します。
インスタンスを登録して、リンクサーバーを許可する
インスタンスに cloudsql enable linked servers
フラグを追加するには、次のコマンドを使用します。
gcloud sql instances patch INSTANCE_NAME --database-flags="cloudsql enable linked servers"=on
INSTANCE_NAME
は、リンクするサーバーに使用するインスタンスの名前に置き換えます。
詳細については、データベース フラグを構成するをご覧ください。
リンクサーバーを追加する
リンクサーバーを追加するには、Transact-SQL の sp_addlinkedserver
コマンドを実行します。
EXEC master.dbo.sp_addlinkedserver @server = N'LINKED_SERVER_NAME', @srvproduct=N'', @provider=N'SQLNCLI', @datasrc=N'TARGET_SERVER_ID'
次のように置き換えます。
- LINKED_SERVER_NAME は、作成するリンクサーバーの名前に置き換えます。
- TARGET_SERVER_ID は、リンクサーバーのネットワーク名、DNS 名、または IP アドレスに置き換えます。インスタンス名には、
servername\instancename
の形式を使用します。インスタンスが標準以外のポートを使用している場合は、ポート番号を追加します。例:servername\instancename, 8080
現在ログインしているユーザーのユーザー マッピングを追加するには、次のコマンドを実行します。
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LINKED_SERVER_NAME', @useself=N'True'
LINKED_SERVER_NAME は、リンクサーバーの名前に置き換えます。
デフォルトのリモート ログインとパスワードを作成または更新して、すべてのローカル ログインに適用するには、次のコマンドを実行します。
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LINKED_SERVER_NAME', @useself=N'False', @locallogin=N'LOGIN', @rmtuser=N'USER_ID', @rmtpassword='PASSWORD';
次のように置き換えます。
- LINKED_SERVER_NAME は、リンクサーバーの名前に置き換えます。
- LOGIN は、ローカル サーバーのログインに置き換えます。
locallogin
は sysname で、デフォルトは NULL です。NULL は、このエントリがrmtsrvname
に接続するすべてのローカル ログインに適用されることを指定します。NULL 以外の場合、locallogin
は SQL Server ログインまたは Windows ログインです。Windows ログインを使用する場合は、SQL Server に直接アクセスするか、アクセス権を持つ Windows グループのメンバーシップを通じてアクセスする必要があります。 - USER_ID は、ログインするユーザーに置き換えます。
- PASSWORD は、ユーザー パスワードに置き換えます。
暗号化された接続でリンクサーバーを追加する
暗号化された接続を使用してリンクサーバーを追加するには、Transact-SQL の sp_addlinkedserver
コマンドを実行します。
EXEC master.dbo.sp_addlinkedserver @server = N'LINKED_SERVER_NAME', @srvproduct=N'', @provider=N'SQLNCLI', @datasrc=N'TARGET_SERVER_ID, @provstr=N'Encrypt=yes;'
次のように置き換えます。
- LINKED_SERVER_NAME は、作成するリンクサーバーの名前に置き換えます。
- TARGET_SERVER_ID は、ターゲット サーバーの名前、またはターゲット サーバーの IP アドレスとポート番号に置き換えます。
サーバーの名前が証明書の名前と異なる場合は、SQL Server がサーバー証明書を信頼できることを示す必要があります。プロバイダ文字列を更新するには、次のコマンドを実行します。
EXEC master.dbo.sp_addlinkedserver @server = N'LINKED_SERVER_NAME', @srvproduct=N'', @provider=N'SQLNCLI', @datasrc=N'TARGET_SERVER_ID, @provstr=N'Encrypt=yes;TrustServerCertificate=yes;'
次のように置き換えます。
- LINKED_SERVER_NAME は、作成するリンクサーバーの名前に置き換えます。
- TARGET_SERVER_ID は、ターゲット サーバーの名前、またはターゲット サーバーの IP アドレスとポート番号に置き換えます。
リンクサーバーのクエリ
Cloud SQL では、次のコマンドに加えて、リンクサーバー(サーバー名、データベース名、スキーマ名、オブジェクト名)をクエリするために 4 つの部分の名前を使用できます。
詳細については、クエリのリモート実行オプションを比較するをご覧ください。
リンクサーバーでリモート プロシージャ コールを有効にする
リモート プロシージャ コール(RPC)を使用すると、リンクサーバーでストアド プロシージャを実行できます。RPC を追加するには、RPC 引数を指定して Transact-SQL の sp_serveroption
コマンドを実行します。RPC の引数は 2 つあります。
rpc
は、指定したサーバーからの RPC を有効にします。rpc out
は、指定したサーバーへの RPC を有効にします。
LINKED_SERVER_NAME から RPC を有効にするには、rpc
引数を指定して次の sp_serveroption
コマンドを使用します。
EXEC sp_serveroption @server='LINKED_SERVER_NAME', @optname='rpc', @optvalue='TRUE'
LINKED_SERVER_NAME は、リンクサーバーの名前に置き換えます。
rpc out
引数を指定して次の sp_serveroption
コマンドを使用して、RPC を有効にします。
EXEC sp_serveroption @server='LINKED_SERVER_NAME', @optname='rpc out', @optvalue='TRUE'
LINKED_SERVER_NAME は、リンクサーバーの名前に置き換えます。
リンクサーバーのユーザー マッピングを削除する
以前に追加したユーザー マッピングを削除するには、次のコマンドを実行します。
EXEC master.dbo.sp_droplinkedsrvlogin @rmtsrvname=N'LINKED_SERVER_NAME', @locallogin=N'LOGIN';
次のように置き換えます。
- LINKED_SERVER_NAME は、ドロップするリンクサーバーの名前に置き換えます。
- LOGIN は、ローカル サーバーのログインに置き換えます。
locallogin
は sysname で、デフォルトは NULL です。NULL は、このエントリがrmtsrvname
に接続するすべてのローカル ログインに適用されることを指定します。NULL 以外の場合、locallogin
は SQL Server ログインまたは Windows ログインです。Windows ログインを使用する場合は、SQL Server に直接アクセスするか、アクセス権を持つ Windows グループのメンバーシップを通じてアクセスする必要があります。
登録済みのインスタンスをリンクサーバーから削除する
リンクサーバーを削除するには、次のようにします。
- Transact-SQL の sp_dropserver ストアド プロシージャを使用して、既存のリンクサーバーを削除します。
登録済みのインスタンスを削除するには、
cloudsql enable linked servers
フラグを削除します。gcloud sql instances patch INSTANCE_NAME --database-flags="cloudsql enable linked servers"=off
INSTANCE_NAME
は、リンクサーバーを削除するインスタンスの名前に置き換えます。または、次のコマンドを実行して、すべてのデータベース フラグをクリアすることもできます。
gcloud sql instances patch INSTANCE_NAME --clear-database-flags
INSTANCE_NAME
は、リンクサーバーを削除するインスタンスの名前に置き換えます。
トラブルシューティング
エラー メッセージ | トラブルシューティング |
---|---|
Msg 7411, Level 16, State 1, Line 25
|
DataAccess オプションが無効になっている。次のコマンドを実行して、データアクセスを有効にします。EXEC sp_serveroption @server='LINKED_SERVER_NAME', @optname='data access', @optvalue='TRUE' LINKED_SERVER_NAME は、リンクされたサーバーの名前に置き換えます。 |
Access to the remote server is denied because no
login-mapping exists. (Microsoft SQL Server, Error: 7416)
|
暗号化された接続を確立する際にこの問題が発生した場合は、リンクされたサーバーにアクセスするときに別の方法でユーザー ID を指定する必要があります。これを行うには、次のコマンドを実行します。EXEC master.dbo.sp_addlinkedserver @server = N'LINKED_SERVER_NAME', @srvproduct= N'', @provider= N'SQLNCLI', @datasrc= N'TARGET_SERVER_ID', @provstr= N'Encrypt=yes;TrustServerCertificate=yes;User ID=USER_ID' 次のように置き換えます。
|
次のステップ
- リンクサーバーの使用について学習する。