Como exibir e modificar as configurações de segurança de assinatura (programação RMO)
As configurações de conta de segurança (logons e senhas) requeridas pela replicação são definidas quando são criadas as publicações e as assinaturas. Você pode alterar essas configurações mais tarde usando o RMO (Replication Management Objects). As classes e propriedades RMO que você usa dependem do tipo de agente e do tipo de conexão de servidor.
Observação sobre segurança |
---|
Quando possível, solicite que os usuários insiram as credenciais de segurança em tempo de execução. Se for preciso armazenar credenciais, use os serviços criptográficos fornecidos pelo Microsoft Windows .NET Framework. |
Para alterar todas as instâncias de uma senha armazenada em um servidor de replicação
Crie uma conexão com o servidor de replicação usando a classe ServerConnection.
Crie uma instância da classe ReplicationServer usando a conexão da Etapa 1.
Chame o método ChangeReplicationServerPasswords. Especifique os seguintes parâmetros:
O valor security_mode - a ReplicationSecurityModeque especifica o tipo de autenticação para a qual todas as instâncias da senha estão sendo alteradas.
login - o logon para a qual todas as instâncias da senha estão sendo alteradas.
password- o novo valor de senha.
Observação sobre segurança Quando possível, solicite que os usuários insiram as credenciais de segurança em tempo de execução. Se for preciso armazenar credenciais, use os serviços criptográficos fornecidos pelo Windows .NET Framework.
Observação Só um membro da sysadmin função de servidor fixa pode chamar este método.
Repita as Etapas 1-3 em todo servidor, na topologia de replicação, onde a senha deve ser atualizada.
Para alterar as configurações de segurança para o Distribution Agent de uma assinatura push para uma publicação transacional
Crie uma conexão com o Publicador usando a classe ServerConnection.
Crie uma instância da classe TransSubscription.
Defina o PublicationName, DatabaseName, SubscriberName, e as propriedades SubscriptionDBName para a assinatura, e defina a conexão da Etapa 1 para a propriedade. ConnectionContext.
Chame o método LoadProperties para obter as propriedades do objeto. Se esse método retornar false, as propriedades de assinatura na etapa 3 foram definidas incorretamente ou a assinatura não existe.
Defina uma ou mais das seguintes propriedades de segurança na instância de TransSubscription:
Para alterar as credenciais para a conta do Windows sob a qual o agente é executado, defina a Login e os campos Password de SynchronizationAgentProcessSecurity.
Para especificar a Autenticação Integrada do Windows como o tipo de autenticação que o agente usa ao conectar-se ao Assinante, defina o campo de WindowsAuthenticationSubscriberSecurity propriedade para true.
Para especificar a Autenticação do SQL Server como o tipo de autenticação que o agente usa ao conectar-se ao Assinante, defina o campo de WindowsAuthentication da propriedade SubscriberSecurity para false, e especifique as credenciais de logon do Assinante para os campos SqlStandardLogin e SqlStandardPassword.
Observação A conexão de agente para o Distribuidor sempre é feita usando as credenciais de Windows especificadas por SynchronizationAgentProcessSecurity. Essa conta é também usada para fazer conexões remotas que usam a Autenticação do Windows.
(Opcional) Se você especificar um valor de true para CachePropertyChanges, chame o método CommitPropertyChanges para confirmar as alterações no servidor. (Opcional) Se você especificar um valor de false para CachePropertyChanges (padrão), as alterações serão enviadas imediatamente ao servidor.
Para alterar as configurações de segurança para o Distribution Agent de uma assinatura pull para uma publicação transacional
Crie uma conexão com o Assinante usando a classe ServerConnection.
Crie uma instância da classe TransPullSubscription.
Defina o PublicationName, DatabaseName, PublisherName, e as propriedades PublicationDBName para a assinatura, e defina a conexão da Etapa 1 para a propriedade ConnectionContext.
Chame o método LoadProperties para obter as propriedades do objeto. Se esse método retornar false, as propriedades de assinatura na etapa 3 foram definidas incorretamente ou a assinatura não existe.
Defina uma ou mais das seguintes propriedades de segurança na instância de TransPullSubscription:
Para alterar as credenciais para a conta do Windows sob a qual o agente é executado, defina a Login e os campos Password de SynchronizationAgentProcessSecurity.
Para especificar a Autenticação Integrada do Windows como o tipo de autenticação que o agente usa ao conectar-se ao Distribuidor, defina o campo WindowsAuthentication da propriedade DistributorSecurity para true.
Para especificar a Autenticação do SQL Server como o tipo de autenticação que o agente usa ao conectar-se ao Distribuidor, defina o campo de WindowsAuthentication da propriedade DistributorSecurity para false, e especifique as credenciais de logon do Distribuidor para os campos SqlStandardLogin e SqlStandardPassword.
Observação A conexão de agente para o Assinante sempre é feita usando as credenciais de Windows especificadas por SynchronizationAgentProcessSecurity. Essa conta é também usada para fazer conexões remotas que usam a Autenticação do Windows.
(Opcional) Se você especificar um valor de true para CachePropertyChanges, chame o método CommitPropertyChanges para confirmar as alterações no servidor. (Opcional) Se você especificar um valor de false para CachePropertyChanges (padrão), as alterações serão enviadas imediatamente ao servidor.
Para alterar as configurações de segurança para o Merge Agent para uma assinatura pull para uma publicação de mesclagem
Crie uma conexão com o Assinante usando a classe ServerConnection.
Crie uma instância da classe MergePullSubscription.
Defina o PublicationName, DatabaseName, PublisherName, e as propriedades PublicationDBName para a assinatura, e defina a conexão da Etapa 1 para a propriedade ConnectionContext.
Chame o método LoadProperties para obter as propriedades do objeto. Se esse método retornar false, as propriedades de assinatura na etapa 3 foram definidas incorretamente ou a assinatura não existe.
Defina uma ou mais das seguintes propriedades de segurança na instância de MergePullSubscription:
Para alterar as credenciais para a conta do Windows sob a qual o agente é executado, defina a Login e os campos Password de SynchronizationAgentProcessSecurity.
Para especificar a Autenticação Integrada do Windows como o tipo de autenticação que o agente usa ao conectar-se ao Distribuidor, defina o campo WindowsAuthentication da propriedade DistributorSecurity para true.
Para especificar a Autenticação do SQL Server como o tipo de autenticação que o agente usa ao conectar-se ao Distribuidor, defina o campo de WindowsAuthentication da propriedade DistributorSecurity para false, e especifique as credenciais de logon do Distribuidor para os campos SqlStandardLogin e SqlStandardPassword.
Para especificar a Autenticação Integrada do Windows como o tipo de autenticação que o agente usa ao se conectar ao Publicador, defina o campo WindowsAuthentication da propriedade PublisherSecurity como true.
Para especificar a Autenticação do SQL Server como o tipo de autenticação que o agente usa ao se conectar ao Publicador, defina o campo WindowsAuthentication da propriedade PublisherSecurity como false, e especifique as credenciais de logon do Publicador para os campos SqlStandardLogin e SqlStandardPassword.
Observação A conexão de agente para o Assinante sempre é feita usando as credenciais de Windows especificadas por SynchronizationAgentProcessSecurity. Essa conta é também usada para fazer conexões remotas que usam a Autenticação do Windows.
(Opcional) Se você especificar um valor de true para CachePropertyChanges, chame o método CommitPropertyChanges para confirmar as alterações no servidor. (Opcional) Se você especificar um valor de false para CachePropertyChanges (padrão), as alterações serão enviadas imediatamente ao servidor.
Para alterar as configurações de segurança para o Merge Agent para uma assinatura push para uma publicação de mesclagem
Crie uma conexão com o Publicador usando a classe ServerConnection.
Crie uma instância da classe MergeSubscription.
Defina o PublicationName, DatabaseName, SubscriberName, e as propriedades SubscriptionDBName para a assinatura, e defina a conexão da Etapa 1 para a propriedade ConnectionContext.
Chame o método LoadProperties para obter as propriedades do objeto. Se esse método retornar false, as propriedades de assinatura na etapa 3 foram definidas incorretamente ou a assinatura não existe.
Defina uma ou mais das seguintes propriedades de segurança na instância de MergeSubscription:
Para alterar as credenciais para a conta do Windows sob a qual o agente é executado, defina a Login e os campos Password de SynchronizationAgentProcessSecurity.
Para especificar a Autenticação Integrada do Windows como o tipo de autenticação que o agente usa ao conectar-se ao Assinante, defina o campo de WindowsAuthenticationSubscriberSecurity propriedade para true.
Para especificar a Autenticação do SQL Server como o tipo de autenticação que o agente usa ao conectar-se ao Assinante, defina o campo de WindowsAuthentication da propriedade SubscriberSecurity para false, e especifique as credenciais de logon do Assinante para os campos SqlStandardLogin e SqlStandardPassword.
Para especificar a Autenticação Integrada do Windows como o tipo de autenticação que o agente usa ao se conectar ao Publicador, defina o campo WindowsAuthentication da propriedade PublisherSecurity como true.
Para especificar a Autenticação do SQL Server como o tipo de autenticação que o agente usa ao se conectar ao Publicador, defina o campo WindowsAuthentication da propriedade PublisherSecurity como false, e especifique as credenciais de logon do Publicador para os campos SqlStandardLogin e SqlStandardPassword.
Observação A conexão de agente para o Distribuidor sempre é feita usando as credenciais de Windows especificadas por SynchronizationAgentProcessSecurity. Essa conta é também usada para fazer conexões remotas que usam a Autenticação do Windows.
(Opcional) Se você especificar um valor de true para CachePropertyChanges, chame o método CommitPropertyChanges para confirmar as alterações no servidor. (Opcional) Se você especificar um valor de false para CachePropertyChanges (padrão), as alterações serão enviadas imediatamente ao servidor.
Para alterar a informação de logon usada por um Assinante de atualização imediata ao se conectar ao publicador transacional
Crie uma conexão com o Assinante usando a classe ServerConnection.
Crie uma instância da classe ReplicationDatabase para o banco de dados de assinatura. Especifique Name e o ServerConnection da Etapa 1 para ConnectionContext.
Chame o método LoadProperties para obter as propriedades do objeto. Se esse método retornar false, as propriedades de banco de dados na etapa 2 foram definidas incorretamente ou o banco de dados não existe.
Chame o método LinkPublicationForUpdateableSubscription, passando os parâmetros seguintes:
Publisher - o nome do Publicador.
PublisherDB - o nome do banco de dados de publicação.
Publication - o nome da publicação para a qual o Assinante de atualização imediata fez sua assinatura.
Distributor - o nome do Distribuidor.
PublisherSecurity - A PublisherConnectionSecurityContext objeto que especifica o tipo de modo de segurança usado pelo Assinante de atualização imediata ao se conectar ao Publicador e as credenciais de logon para a conexão.
Exemplo
Este exemplo verifica o valor do logon fornecido e altera todas as senhas para o logon do Windows fornecido ou o logon do SQL Server armazenado por replicação no servidor.
// Set the Distributor and distribution database names.
string serverName = publisherInstance;
ReplicationServer server;
// Create a connection to the Distributor using Windows Authentication.
ServerConnection conn = new ServerConnection(serverName);
try
{
// Open the connection.
conn.Connect();
server = new ReplicationServer(conn);
// Load server properties, if it exists.
if (server.LoadProperties())
{
string[] slash = new string[1];
slash[1] = @"\";
// If the login is in the form string\string, assume we are
// changing the password for a Windows login.
if (login.Split(slash, StringSplitOptions.None).Length == 2)
{
//Change the password for the all connections that use
// the Windows login.
server.ChangeReplicationServerPasswords(
ReplicationSecurityMode.Integrated, login, password);
}
else
{
// Change the password for the all connections that use
// the SQL Server login.
server.ChangeReplicationServerPasswords(
ReplicationSecurityMode.SqlStandard, login, password);
}
}
else
{
throw new ApplicationException(String.Format(
"Properties for {0} could not be retrieved.", publisherInstance));
}
}
catch (Exception ex)
{
// Implement the appropriate error handling here.
throw new ApplicationException(String.Format(
"An error occured when changing agent login " +
" credentials on {0}.",serverName), ex);
}
finally
{
conn.Disconnect();
}
' Set the Distributor and distribution database names.
Dim serverName As String = publisherInstance
Dim server As ReplicationServer
' Create a connection to the Distributor using Windows Authentication.
Dim conn As ServerConnection = New ServerConnection(serverName)
Try
' Open the connection.
conn.Connect()
server = New ReplicationServer(conn)
' Load server properties, if it exists.
If server.LoadProperties() Then
' If the login is in the form string\string, assume we are
' changing the password for a Windows login.
If login.Split("\").Length = 2 Then
' Change the password for the all connections that use
' the Windows login.
server.ChangeReplicationServerPasswords( _
ReplicationSecurityMode.Integrated, login, password)
Else
' Change the password for the all connections that use
' the SQL Server login.
server.ChangeReplicationServerPasswords( _
ReplicationSecurityMode.SqlStandard, login, password)
End If
Else
Throw New ApplicationException(String.Format( _
"Properties for {0} could not be retrieved.", publisherInstance))
End If
Catch ex As Exception
' Implement the appropriate error handling here.
Throw New ApplicationException(String.Format( _
"An error occured when changing agent login " + _
" credentials on {0}.", serverName), ex)
Finally
conn.Disconnect()
End Try
Consulte também