Condividi tramite


sp_link_publication (Transact-SQL)

Si applica a: SQL Server

Imposta le informazioni di configurazione e sicurezza utilizzate dai trigger di sincronizzazione dei server di sottoscrizione ad aggiornamento immediato durante la connessione al server di pubblicazione. Questa stored procedure viene eseguita nel database di sottoscrizione del Sottoscrittore.

Importante

Quando si configura un server di pubblicazione con un server di distribuzione remoto, i valori specificati per tutti i parametri, inclusi @job_login e @job_password, vengono inviati al server di distribuzione come testo normale. È consigliabile crittografare la connessione tra il server di pubblicazione e il server di distribuzione remoto prima di eseguire questa stored procedure. Per ulteriori informazioni, vedere Configurare il motore di database di SQL Server per la crittografia delle connessioni.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

sp_link_publication
    [ @publisher = ] N'publisher'
    , [ @publisher_db = ] N'publisher_db'
    , [ @publication = ] N'publication'
    , [ @security_mode = ] security_mode
    [ , [ @login = ] N'login' ]
    [ , [ @password = ] N'password' ]
    [ , [ @distributor = ] N'distributor' ]
[ ; ]

Argomenti

[ @publisher = ] N'publisher'

Nome del server di pubblicazione a cui collegarsi. @publisher è sysname, senza impostazione predefinita.

[ @publisher_db = ] N'publisher_db'

Nome del database del server di pubblicazione a cui collegarsi. @publisher_db è sysname, senza impostazione predefinita.

[ @publication = ] N'publication'

Nome della pubblicazione a cui collegarsi. @publication è sysname, senza impostazione predefinita.

[ @security_mode = ] security_mode

Modalità di sicurezza utilizzata dal Sottoscrittore per connettersi a un server di pubblicazione remoto per l'aggiornamento immediato. @security_mode è int e può essere uno di questi valori. Se possibile, usare l'autenticazione di Windows.

valore Descrizione
0 Usa l'autenticazione di SQL Server con l'account di accesso specificato in questa stored procedure come @login e @password.

Nota: nelle versioni precedenti di SQL Server questa opzione è stata usata per specificare una chiamata di procedura remota dinamica (RPC).
1 Usa il contesto di sicurezza (autenticazione di SQL Server o autenticazione di Windows) dell'utente che apporta la modifica nel Sottoscrittore.

Nota: questo account deve esistere anche nel server di pubblicazione con privilegi sufficienti. Quando si usa l'autenticazione di Windows, è necessario supportare la delega dell'account di sicurezza.
2 Usa un account di accesso al server collegato definito dall'utente esistente creato con sp_link_publication.

[ @login = ] N'login'

Account di accesso. @login è sysname, con il valore predefinito NULL. Questo parametro deve essere specificato quando @security_mode è 0.

[ @password = ] N'password'

Password. @password è sysname, con un valore predefinito .NULL Questo parametro deve essere specificato quando @security_mode è 0.

[ @distributor = ] N'distributor'

Nome del server di distribuzione. @distributor è sysname, con un valore predefinito di una stringa vuota.

Valori del codice restituito

0 (esito positivo) o 1 (errore).

Osservazioni:

sp_link_publication viene usato dalle sottoscrizioni ad aggiornamento immediato nella replica transazionale.

sp_link_publication può essere usato sia per le sottoscrizioni push che per le sottoscrizioni pull. Questa stored procedure può essere chiamata prima o dopo la creazione della sottoscrizione. Una voce viene inserita o aggiornata nella tabella di sistema MSsubscription_properties .

Per le sottoscrizioni push, la voce può essere pulita da sp_subscription_cleanup. Per le sottoscrizioni pull, la voce può essere pulita sp_droppullsubscription o sp_subscription_cleanup. È anche possibile chiamare sp_link_publication con una NULL password per cancellare la voce nella tabella di sistema MSsubscription_properties per problemi di sicurezza.

La modalità predefinita utilizzata da un Sottoscrittore ad aggiornamento immediato quando si connette al server di pubblicazione non consente una connessione tramite l'autenticazione di Windows. Per eseguire la connessione con questa modalità di autenticazione, è necessario configurare un server collegato per il server di pubblicazione e il Sottoscrittore ad aggiornamento immediato deve utilizzare questa connessione per l'aggiornamento del Sottoscrittore. È quindi necessario sp_link_publication eseguire con @security_mode impostato su 2. Quando si usa l'autenticazione di Windows, è necessario supportare la delega dell'account di sicurezza.

Esempi

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables  
-- on the command line and in SQL Server Management Studio, see the 
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".

-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @publisher AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS nvarchar(512);
SET @publication = N'AdvWorksProductTran';
SET @publicationDB = N'AdventureWorks2022';
SET @publisher = $(PubServer);
SET @login = $(Login);
SET @password = $(Password);

-- At the subscription database, create a pull subscription to a transactional 
-- publication using immediate updating with queued updating as a failover.
EXEC sp_addpullsubscription 
    @publisher = @publisher, 
    @publication = @publication, 
    @publisher_db = @publicationDB, 
    @update_mode = N'failover', 
    @subscription_type = N'pull';

-- Add an agent job to synchronize the pull subscription, 
-- which uses Windows Authentication when connecting to the Distributor.
EXEC sp_addpullsubscription_agent 
    @publisher = @publisher, 
    @publisher_db = @publicationDB, 
    @publication = @publication,
    @job_login = @login,
    @job_password = @password; 
 
-- Add a Windows Authentication-based linked server that enables the 
-- Subscriber-side triggers to make updates at the Publisher. 
EXEC sp_link_publication 
    @publisher = @publisher, 
    @publication = @publication,
    @publisher_db = @publicationDB, 
    @security_mode = 0,
    @login = @login,
    @password = @password;
GO

USE AdventureWorks2022;
GO

-- Execute this batch at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @subscriber AS sysname;
SET @publication = N'AdvWorksProductTran'; 
SET @subscriptionDB = N'AdventureWorks2022Replica'; 
SET @subscriber = $(SubServer);

-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks2022]
EXEC sp_addsubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @destination_db = @subscriptionDB, 
    @subscription_type = N'pull', 
    @update_mode = N'failover';
GO

Autorizzazioni

Solo i membri del ruolo predefinito del server sysadmin possono eseguire sp_link_publication.