Настройка доступа только для чтения к вторичной реплике в группе доступности Always OnConfigure read-only access to a secondary replica of an Always On availability group

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server нетБаза данных SQL AzureнетХранилище данных SQL AzureнетParallel Data WarehouseAPPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

По умолчанию и доступ для чтения и записи, и доступ только для чтения разрешены в первичной реплике, а подключения к вторичным репликам группы доступности AlwaysOn запрещены.By default both read-write and read-intent access are allowed to the primary replica and no connections are allowed to secondary replicas of an Always On availability group. В этом разделе описывается настройка доступа к соединениям реплики доступности в группе доступности AlwaysOn в SQL Server 2017SQL Server 2017 с помощью SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQLили PowerShell.This topic describes how to configure connection access on an availability replica of an Always On availability group in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQL, or PowerShell.

Сведения о последствиях включения доступа только для чтения во вторичной реплике и обзор доступа к соединениям см. в статьях Сведения о доступе клиентского подключения к репликам доступности (SQL Server) и Активные вторичные реплики: вторичные реплики для чтения (группы доступности Always On).For information about the implications of enabling read-only access for a secondary replica and for an introduction to connection access, see About Client Connection Access to Availability Replicas (SQL Server) and Active Secondaries: Readable Secondary Replicas (Always On Availability Groups).

Требования и ограниченияPrerequisites and Restrictions

  • Если нужно настроить разный доступ к подключениям, необходимо подключиться к экземпляру сервера, на котором размещается первичная реплика.To configure different connection access, you must be connected to the server instance that hosts the primary replica.

PermissionsPermissions

ЗадачаTask РазрешенияPermissions
Настройка реплик при создании группы доступностиTo configure replicas when creating an availability group Требуется членство в фиксированной роли сервера sysadmin и одно из разрешений: CREATE AVAILABILITY GROUP, ALTER ANY AVAILABILITY GROUP или CONTROL SERVER.Requires membership in the sysadmin fixed server role and either CREATE AVAILABILITY GROUP server permission, ALTER ANY AVAILABILITY GROUP permission, or CONTROL SERVER permission.
Изменение реплики доступностиTo modify an availability replica Необходимо разрешение ALTER AVAILABILITY GROUP для группы доступности, разрешение CONTROL AVAILABILITY GROUP, разрешение ALTER ANY AVAILABILITY GROUP или разрешение CONTROL SERVER.Requires ALTER AVAILABILITY GROUP permission on the availability group, CONTROL AVAILABILITY GROUP permission, ALTER ANY AVAILABILITY GROUP permission, or CONTROL SERVER permission.

Использование среды SQL Server Management StudioUsing SQL Server Management Studio

Настройка доступа к реплике доступностиTo configure access on an availability replica

  1. В обозревателе объектов подключитесь к экземпляру сервера, на котором размещена первичная реплика, и разверните дерево сервера.In Object Explorer, connect to the server instance that hosts the primary replica, and expand the server tree.

  2. Разверните узел Высокий уровень доступности AlwaysOn и узел Группы доступности .Expand the Always On High Availability node and the Availability Groups node.

  3. Щелкните группу доступности, реплику которой нужно изменить.Click the availability group whose replica you want to change.

  4. Щелкните правой кнопкой мыши реплику доступности и выберите пункт Свойства.Right-click the availability replica, and click Properties.

  5. В диалоговом окне Свойства реплики доступности можно изменить доступ к соединению для первичной и вторичной роли следующим образом:In the Availability Replica Properties dialog box, you can change the connection access for the primary role and for the secondary role, as follows:

    • Для вторичной роли выберите новое значение в раскрывающемся списке Доступная для чтения вторичная следующим образом.For the secondary role, select a new value from the Readable secondary drop list, as follows:

      НетNo
      Для баз данных-получателей этой реплики соединения пользователя не разрешаются.No user connections are allowed to secondary databases of this replica. Для них не разрешен доступ для чтения.They are not available for read access. Это параметр по умолчанию.This is the default setting.

      Назначение — только чтениеRead-intent only
      Для баз данных-получателей этой реплики разрешены лишь подключения только для чтения.Only read-only connections are allowed to secondary databases of this replica. Для всех баз данных-получателей разрешен доступ для чтения.The secondary database(s) are all available for read access.

      ДаYes
      Для баз данных-получателей этой реплики разрешены все соединения, но только с доступом для чтения.All connections are allowed to secondary databases of this replica, but only for read access. Для всех баз данных-получателей разрешен доступ для чтения.The secondary database(s) are all available for read access.

    • Для первичной роли выберите новое значение в раскрывающемся списке Соединения в первичной роли следующим образом:For the primary role, select a new value from the Connections in primary role drop list, as follows:

      разрешить все соединения.Allow all connections
      Разрешаются все соединения с базами данных в первичной реплике.All connections are allowed to the databases in the primary replica. Это параметр по умолчанию.This is the default setting.

      разрешить соединения с доступом на чтение и запись;Allow read/write connections
      Если свойство «Назначение приложения» имеет значение ReadWrite или не задано, то соединение разрешено.When the Application Intent property is set to ReadWrite or the Application Intent connection property is not set, the connection is allowed. Соединения, у которых свойство соединения «Назначение приложения» равно ReadOnly , не разрешены.Connections where the Application Intent connection property is set to ReadOnly are not allowed. Таким образом, клиент не сможет по ошибке подключить рабочую нагрузку с намерением чтения к первичной реплике.This can help prevent customers from connecting a read-intent work load to the primary replica by mistake. Дополнительные сведения о свойстве соединения «Назначение приложения» см. в разделе Using Connection String Keywords with SQL Server Native Client.For more information about Application Intent connection property, see Using Connection String Keywords with SQL Server Native Client.

Использование Transact-SQLUsing Transact-SQL

Настройка доступа к реплике доступностиTo configure access on an availability replica

Примечание

Пример этой процедуры см. в подразделе Примеры (Transact-SQL)далее в этом разделе.For an example of this procedure, see Example (Transact-SQL), later in this section.

  1. Подключитесь к экземпляру сервера, на котором находится первичная реплика.Connect to the server instance that hosts the primary replica.

  2. Если вы указываете реплику для новой группы доступности, воспользуйтесь инструкцией CREATE AVAILABILITY GROUPTransact-SQLTransact-SQL .If you are specifying a replica for a new availability group, use the CREATE AVAILABILITY GROUPTransact-SQLTransact-SQL statement. Если вы добавляете или изменяете реплику существующей группы доступности, воспользуйтесь инструкцией ALTER AVAILABILITY GROUPTransact-SQLTransact-SQL .If you are adding or modifying a replica of an existing availability group, use the ALTER AVAILABILITY GROUPTransact-SQLTransact-SQL statement.

    • Чтобы настроить доступ к соединению для вторичной роли, укажите в предложении ADD REPLICA или MODIFY REPLICA WITH параметр SECONDARY_ROLE следующим образом:To configure connection access for the secondary role, in the ADD REPLICA or MODIFY REPLICA WITH clause, specify the SECONDARY_ROLE option, as follows:

      SECONDARY_ROLE ( ALLOW_CONNECTIONS = { NO | READ_ONLY | ALL } )SECONDARY_ROLE ( ALLOW_CONNECTIONS = { NO | READ_ONLY | ALL } )

      гдеwhere,

      НетNO
      Прямые подключения для баз данных-получателей этой реплики не разрешаются.No direct connections are allowed to secondary databases of this replica. Для них не разрешен доступ для чтения.They are not available for read access. Это параметр по умолчанию.This is the default setting.

      READ_ONLYREAD_ONLY
      Для баз данных-получателей этой реплики разрешены лишь подключения только для чтения.Only read-only connections are allowed to secondary databases of this replica. Для всех баз данных-получателей разрешен доступ для чтения.The secondary database(s) are all available for read access.

      ALLALL
      Для баз данных-получателей этой реплики разрешены все соединения, но только с доступом для чтения.All connections are allowed to secondary databases of this replica, but only for read access. Для всех баз данных-получателей разрешен доступ для чтения.The secondary database(s) are all available for read access.

  3. Чтобы настроить доступ к соединению для первичной роли, укажите в предложении ADD REPLICA или MODIFY REPLICA WITH параметр PRIMARY_ROLE следующим образом:To configure connection access for the primary role, in the ADD REPLICA or MODIFY REPLICA WITH clause, specify the PRIMARY_ROLE option, as follows:

    PRIMARY_ROLE ( ALLOW_CONNECTIONS = { READ_WRITE | ALL } )PRIMARY_ROLE ( ALLOW_CONNECTIONS = { READ_WRITE | ALL } )

    гдеwhere,

    READ_WRITEREAD_WRITE
    Соединения, у которых свойство "Назначение приложения" равно ReadOnly , не разрешены.Connections where the Application Intent connection property is set to ReadOnly are disallowed. Если свойство «Назначение приложения» имеет значение ReadWrite или не задано, то соединение разрешено.When the Application Intent property is set to ReadWrite or the Application Intent connection property is not set, the connection is allowed. Дополнительные сведения о свойстве соединения «Назначение приложения» см. в разделе Using Connection String Keywords with SQL Server Native Client.For more information about Application Intent connection property, see Using Connection String Keywords with SQL Server Native Client.

    ALLALL
    Разрешаются все соединения с базами данных в первичной реплике.All connections are allowed to the databases in the primary replica. Это параметр по умолчанию.This is the default setting.

Примеры (Transact-SQL)Example (Transact-SQL)

В следующем примере вторичная реплика добавляется в группу доступности с именем AG2.The following example adds a secondary replica to an availability group named AG2. Для размещения новой реплики доступности указывается отдельный экземпляр сервера COMPUTER03\HADR_INSTANCE.A stand-alone server instance, COMPUTER03\HADR_INSTANCE, is specified to host the new availability replica. В этой реплике разрешены только соединения для чтения и записи для первичной роли, а для вторичной роли разрешены соединения с намерением чтения.This replica configured to allow only read-write connections for the primary role and to allow only read-intent connections for secondary role.

ALTER AVAILABILITY GROUP AG2   
   ADD REPLICA ON   
      'COMPUTER03\HADR_INSTANCE' WITH   
         (  
         ENDPOINT_URL = 'TCP://COMPUTER03:7022',  
         PRIMARY_ROLE ( ALLOW_CONNECTIONS = READ_WRITE ),  
         SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY )  
         );   
GO  

Использование PowerShellUsing PowerShell

Настройка доступа к реплике доступностиTo configure access on an availability replica

Примечание

Пример кода см. в подразделе Пример (PowerShell)далее в этом разделе.For a code example, see Example (PowerShell), later in this section.

  1. Перейдите в каталог (cd) экземпляра сервера, в котором находится первичная реплика.Change directory (cd) to the server instance that hosts the primary replica.

  2. При добавлении реплики доступности в группу доступности воспользуйтесь командлетом New-SqlAvailabilityReplica .When adding an availability replica to an availability group, use the New-SqlAvailabilityReplica cmdlet. При изменении существующей реплики доступности воспользуйтесь командлетом Set-SqlAvailabilityReplica .When modifying an existing availability replica, use the Set-SqlAvailabilityReplica cmdlet. Соответствующие параметры:The relevant parameters are as follows:

    • Чтобы настроить доступ к соединению для вторичной роли, укажите параметр ConnectionModeInSecondaryRolesecondary_role_keyword , где secondary_role_keyword равно одному из следующих значений:To configure connection access for the secondary role, specify the ConnectionModeInSecondaryRolesecondary_role_keyword parameter, where secondary_role_keyword equals one of the following values:

      AllowNoConnectionsAllowNoConnections
      Не допускаются прямые соединения с базами данных во вторичной реплике, кроме того, к базам данных также нельзя получить доступ только для чтения.No direct connections are allowed to the databases in the secondary replica and the databases are not available for read access. Это параметр по умолчанию.This is the default setting.

      AllowReadIntentConnectionsOnlyAllowReadIntentConnectionsOnly
      Разрешаются только соединения с базами данных во вторичной реплике, у которых свойство "Назначение приложения" равно ReadOnly.Connections are allowed only to the databases in the secondary replica where the Application Intent property is set to ReadOnly. Дополнительные сведения об этом свойстве см. в разделе Using Connection String Keywords with SQL Server Native Client.For more information about this property, see Using Connection String Keywords with SQL Server Native Client.

      AllowAllConnectionsAllowAllConnections
      К базам данных во вторичной реплике разрешаются все соединения на доступ только для чтения.All connections are allowed to the databases in the secondary replica for read-only access.

    • Чтобы настроить доступ к соединению для первичной роли, укажите параметр ConnectionModeInPrimaryRoleprimary_role_keyword, где primary_role_keyword равно одному из следующих значений:To configure connection access for the primary role, specify ConnectionModeInPrimaryRoleprimary_role_keyword, where primary_role_keyword equals one of the following values:

      AllowReadWriteConnectionsAllowReadWriteConnections
      Соединения, у которых свойство «Назначение приложения» равно ReadOnly, разрешены.Connections where the Application Intent connection property is set to ReadOnly are disallowed. Если свойство «Назначение приложения» имеет значение ReadWrite либо оно не задано, то соединение разрешено.When the Application Intent property is set to ReadWrite or the Application Intent connection property is not set, the connection is allowed. Дополнительные сведения о свойстве соединения «Назначение приложения» см. в разделе Using Connection String Keywords with SQL Server Native Client.For more information about Application Intent connection property, see Using Connection String Keywords with SQL Server Native Client.

      AllowAllConnectionsAllowAllConnections
      Разрешаются все соединения с базами данных в первичной реплике.All connections are allowed to the databases in the primary replica. Это параметр по умолчанию.This is the default setting.

    Примечание

    Чтобы просмотреть синтаксис командлета, воспользуйтесь командлетом Get-Help в среде SQL Server 2017SQL Server 2017 PowerShell.To view the syntax of a cmdlet, use the Get-Help cmdlet in the SQL Server 2017SQL Server 2017 PowerShell environment. Дополнительные сведения см. в разделе Get Help SQL Server PowerShell.For more information, see Get Help SQL Server PowerShell.

Настройка и использование поставщика SQL Server PowerShellTo set up and use the SQL Server PowerShell provider

Пример (PowerShell)Example (PowerShell)

В следующем примере параметры ConnectionModeInSecondaryRole и ConnectionModeInPrimaryRole устанавливаются в значение AllowAllConnections.The following example, sets the both the ConnectionModeInSecondaryRole and ConnectionModeInPrimaryRole parameters to AllowAllConnections.

Set-Location SQLSERVER:\SQL\PrimaryServer\default\AvailabilityGroups\MyAg  
$primaryReplica = Get-Item "AvailabilityReplicas\PrimaryServer"  
Set-SqlAvailabilityReplica -ConnectionModeInSecondaryRole "AllowAllConnections" `   
-InputObject $primaryReplica  
Set-SqlAvailabilityReplica -ConnectionModeInPrimaryRole "AllowAllConnections" `   
-InputObject $primaryReplica  
  

Дальнейшие действия. После настройки доступа только для чтения для реплики доступностиFollow Up: After Configuring Read-Only Access for an Availability Replica

Доступ только для чтения к к доступным для чтения вторичным репликам.Read-only access to a readable secondary replica

Факторы, которые могут повлиять на триггеры и задания после отработки отказа.Factors that might affect triggers and jobs after a failover

Если имеются триггеры и задания, которые не могут выполняться в недоступной или доступной для чтения базы данных-получателе, то в скриптах триггеров и заданий следует проверять, какой базой данных является искомая реплика, базой данных-источником или базой данных-получателем, доступной для чтения.If you have triggers and jobs that will fail when running on a non-readable secondary database or on a readable secondary database, you need to script the triggers and jobs to check on a given replica to determine whether the database is a primary database or is a readable secondary database. Для получения этих сведений используйте функцию DATABASEPROPERTYEX, возвращающую свойство Updateability базы данных.To obtain this information, use the DATABASEPROPERTYEX function to return the Updateability property of the database. Чтобы определить базу данных, доступную только для чтения, задайте в качестве значения READ_ONLY, как в примере ниже:To identify a read-only database, specify READ_ONLY as the value, as follows:

DATABASEPROPERTYEX([db name],'UpdateAbility') = N'READ_ONLY'  

Чтобы определить базу данных для чтения и записи, укажите в качестве значения READ_WRITE.To identify a read-write database, specify READ_WRITE as the value.

Связанные задачиRelated Tasks

См. такжеRelated Content

См. также:See Also

Обзор групп доступности AlwaysOn (SQL Server) Overview of Always On Availability Groups (SQL Server)
Активные вторичные реплики: вторичные реплики для чтения (группы доступности Always On) Active Secondaries: Readable Secondary Replicas (Always On Availability Groups)
Сведения о доступе клиентского подключения к репликам доступности (SQL Server)About Client Connection Access to Availability Replicas (SQL Server)