管理已連結的伺服器

本頁面說明如何管理 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 登入,則必須直接或透過具有存取權的 Windows 群組成員,才能存取 SQL Server。
  • 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 也支援使用四部分名稱查詢已連結的伺服器 (伺服器名稱、資料庫名稱、結構描述名稱和物件名稱):

  • OPENQUERY 會在指定伺服器上執行查詢。
  • EXECUTE 可讓您針對已連結的伺服器執行動態 SQL。

詳情請參閱「比較查詢遠端執行選項」。

在已連結的伺服器上啟用遠端程序呼叫

遠端程序呼叫 (RPC) 可讓您在已連結的伺服器上執行儲存程序。如要新增 RPC,請搭配 RPC 引數執行 Transact-SQL sp_serveroption 指令。有兩個 RPC 引數:

  • rpc 會啟用來自指定伺服器的 RPC。
  • rpc out 可啟用對指定伺服器的 RPC。

使用下列 sp_serveroption 指令搭配 rpc 引數,即可啟用 LINKED_SERVER_NAME 的 RPC:

EXEC sp_serveroption
    @server='LINKED_SERVER_NAME',
    @optname='rpc',
    @optvalue='TRUE'

LINKED_SERVER_NAME 替換為已連結的伺服器名稱。

使用下列 sp_serveroption 指令搭配 rpc out 引數,即可啟用 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 登入,則該登入帳戶必須直接或透過其在具有存取權的 Windows 群組中的成員資格,才能存取 SQL Server。

從允許連結的伺服器中移除已註冊的執行個體

如要移除已連結的伺服器,請按照下列步驟操作:

  • 使用 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

Server 'LINKED_SERVER_NAME' is not configured for DATA ACCESS.
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'

替換下列內容:

  • LINKED_SERVER_NAME 與已連結伺服器的名稱。
  • TARGET_SERVER_ID 搭配目標伺服器名稱,或目標伺服器的 IP 位址和連接埠號碼。
  • USER_ID 與登入的使用者。

後續步驟