Export (0) Print
Expand All

PullSubscription.SynchronizationAgentProcessSecurity Property

 

Applies To: SQL Server 2016 Preview

Gets the security context that is used to specify the Microsoft Windows account under which the Synchronization Agent job runs to synchronize the subscription.

Namespace:   Microsoft.SqlServer.Replication
Assembly:  Microsoft.SqlServer.Rmo (in Microsoft.SqlServer.Rmo.dll)

public IProcessSecurityContext SynchronizationAgentProcessSecurity { get; }

Property Value

Type: Microsoft.SqlServer.Replication.IProcessSecurityContext

An IProcessSecurityContext object that represents a Windows account.

You must specify Windows account information using the IProcessSecurityContext interface returned by the SynchronizationAgentProcessSecurity property. This is not required if the subscription is created by a member of the sysadmin fixed server role at the Subscriber.

The Synchronization Agent for a pull subscription always connects locally to the Subscriber using the Windows Authentication credentials supplied using the SynchronizationAgentProcessSecurity property. For information about the connections that agents make and the permissions that are required for those connections, see Replication Agent Security Model.

The SynchronizationAgentProcessSecurity property can only be retrieved by members of the sysadmin fixed server role at the Subscriber or by members of the db_owner fixed database role on the subscription database.

The SynchronizationAgentProcessSecurity property can only be set by members of the sysadmin fixed server role at the Subscriber or by members of the db_owner fixed database role on the subscription database.

Retrieving the SynchronizationAgentProcessSecurity property is equivalent to executing sp_helppullsubscription (Transact-SQL) or sp_helpmergepullsubscription (Transact-SQL).

Setting the SynchronizationAgentProcessSecurity property is equivalent to executing sp_addpullsubscription_agent (Transact-SQL), sp_addmergepullsubscription_agent (Transact-SQL), sp_change_subscription_properties (Transact-SQL), or sp_changemergepullsubscription (Transact-SQL).

Legacy Code Example

			// Define the Publisher, publication, and databases.
			string publicationName = "AdvWorksProductTran";
			string publisherName = publisherInstance;
			string subscriberName = subscriberInstance;
			string subscriptionDbName = "AdventureWorks2012Replica";
			string publicationDbName = "AdventureWorks2012";

			//Create connections to the Publisher and Subscriber.
			ServerConnection subscriberConn = new ServerConnection(subscriberName);
			ServerConnection publisherConn = new ServerConnection(publisherName);

			// Create the objects that we need.
			TransPublication publication;
			TransPullSubscription subscription;

			try
			{
				// Connect to the Publisher and Subscriber.
				subscriberConn.Connect();
                publisherConn.Connect();

				// Ensure that the publication exists and that 
				// it supports pull subscriptions.
				publication = new TransPublication();
				publication.Name = publicationName;
				publication.DatabaseName = publicationDbName;
				publication.ConnectionContext = publisherConn;

				if (publication.IsExistingObject)
				{
					if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)
					{
						publication.Attributes |= PublicationAttributes.AllowPull;
					}

					// Define the pull subscription.
					subscription = new TransPullSubscription();
					subscription.ConnectionContext = subscriberConn;
					subscription.PublisherName = publisherName;
					subscription.PublicationName = publicationName;
					subscription.PublicationDBName = publicationDbName;
					subscription.DatabaseName = subscriptionDbName;

					// Specify the Windows login credentials for the Distribution Agent job.
					subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
					subscription.SynchronizationAgentProcessSecurity.Password = winPassword;

					// Make sure that the agent job for the subscription is created.
					subscription.CreateSyncAgentByDefault = true;

                    // By default, subscriptions to transactional publications are synchronized 
                    // continuously, but in this case we only want to synchronize on demand.
                    subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.OnDemand;

                    // Create the pull subscription at the Subscriber.
					subscription.Create();

					Boolean registered = false;

					// Verify that the subscription is not already registered.
					foreach (TransSubscription existing
						in publication.EnumSubscriptions())
					{
						if (existing.SubscriberName == subscriberName
							&& existing.SubscriptionDBName == subscriptionDbName)
						{
							registered = true;
						}
					}
					if (!registered)
					{
						// Register the subscription with the Publisher.
						publication.MakePullSubscriptionWellKnown(
							subscriberName, subscriptionDbName,
							SubscriptionSyncType.Automatic,
							TransSubscriberType.ReadOnly);
					}
				}
				else
				{
					// Do something here if the publication does not exist.
					throw new ApplicationException(String.Format(
						"The publication '{0}' does not exist on {1}.",
						publicationName, publisherName));
				}
			}
			catch (Exception ex)
			{
				// Implement the appropriate error handling here.
				throw new ApplicationException(String.Format(
					"The subscription to {0} could not be created.", publicationName), ex);
			}
			finally
			{
				subscriberConn.Disconnect();
				publisherConn.Disconnect();
			}
Return to top
Was this page helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2015 Microsoft