Настройка изолированного доступа для гипермасштабирования с именем реплика

Применимо к:База данных SQL Azure

В этой статье описывается процедура предоставления доступа к гипермасштабированию База данных SQL Azure с именем реплика без предоставления доступа к основному реплика или другим именованным реплика. В этом сценарии обеспечивается изоляция ресурсов и системы безопасности для именованной реплики, так как именованная реплика будет запускаться с помощью собственного вычислительного узла. Это удобно, когда требуется изолированный доступ только для чтения к базе данных Гипермасштабирования Azure SQL. В этом контексте изоляция означает, что ЦП и память не являются общими для первичной и именованной реплики, запросы, выполняющиеся в именованной реплике, не используют вычислительные ресурсы первичной или любой другой реплики, а участники с доступом к этой реплике, не могут получить доступ к другим репликам, в том числе первичной.

Примечание.

Идентификатор Microsoft Entra ранее был известен как Azure Active Directory (Azure AD).

Создание имени входа на первичном сервере

В базе данных master на логическом сервере, где размещена база данных-источник, выполните следующие действия, чтобы создать новое имя для входа.

Используйте собственный надежный и уникальный пароль, заменив strong_password_here его надежным паролем.

CREATE LOGIN [third-party-login] WITH PASSWORD = 'strong_password_here';

Получите шестнадцатеричное значение SID для созданного имени для входа из системного представления sys.sql_logins.

SELECT SID FROM sys.sql_logins WHERE name = 'third-party-login';

Отключите вход. Это предотвращает доступ к любой базе данных на сервере, на котором размещен основной реплика.

ALTER LOGIN [third-party-login] DISABLE;

Создание пользователя в базе данных-источнике для чтения и записи

После создания имени для входа подключитесь к используемой для чтения и записи первичной реплике базы данных, например WideWorldImporters (пример скрипта для восстановления см. на странице Восстановление базы данных в Azure SQL) и создайте пользователя базы данных для этого имени для входа.

CREATE USER [third-party-user] FROM LOGIN [third-party-login];

В качестве дополнительного шага после создания пользователя базы данных можно удалить имя для входа на сервер, созданное на предыдущем шаге, если есть опасение, что оно может быть активировано повторно. Подключение в master базу данных на логическом сервере, на котором размещена база данных-источник, и выполните следующие примеры скриптов:

DROP LOGIN [third-party-login];

Создание именованной реплики на другом логическом сервере

Создайте новый логический сервер SQL Azure, который будет использоваться для изоляции доступа к именованной реплика. Выполните инструкции, приведенные в статье Создание серверов и отдельных баз данных в Базе данных SQL Azure и управление ими. Чтобы создать именованную реплику, этот сервер должен находиться в том же регионе Azure, что и сервер, на котором размещается первичная реплика.

В следующем примере замените strong_password_here надежный пароль. Например, с помощью Azure CLI:

az sql server create -g MyResourceGroup -n MyNamedReplicaServer -l MyLocation --admin-user MyAdminUser --admin-password strong_password_here

Затем создайте на этом сервере именованную реплику для базы данных-источника. Например, с помощью Azure CLI:

az sql db replica create -g MyResourceGroup -n WideWorldImporters -s MyPrimaryServer --secondary-type Named --partner-database WideWorldImporters_NR --partner-server MyNamedReplicaServer

Создание имени входа на именованном сервере реплика

Подключитесь к базе данных master на логическом сервере, где размещается именованная реплика, созданная на предыдущем шаге. Замените strong_password_here надежный пароль. Добавьте имя для входа, используя идентификатор безопасности, полученный из первичной реплики:

CREATE LOGIN [third-party-login] WITH PASSWORD = 'strong_password_here', sid = 0x0...1234;

На этом этапе пользователи и приложения, использующие third-party-login или bob@contoso.com могут подключаться к именованной реплика, но не к основному реплика.

Предоставление разрешений на уровне объектов в базе данных

После настройки проверки подлинности имени для входа в соответствии с приведенными здесь указаниями можно использовать инструкции GRANT, DENY и REVOKE для управления авторизацией или разрешениями на уровне объектов в базе данных. В этих инструкциях укажите имя пользователя, созданного в базе данных, или роль базы данных, членом которой является этот пользователь. Не забудьте выполнить эти команды в первичной реплике. Изменения распространяются на все вторичные реплика, но они будут эффективны только в именованных реплика, где был создан вход на уровне сервера.

Помните, что по умолчанию созданному новому пользователю предоставляется минимальный набор разрешений (например, он не может получить доступ ни к одной из пользовательских таблиц). Если вы хотите разрешить third-party-user или bob@contoso.com считывать данные в таблице, необходимо явно предоставить SELECT разрешение:

GRANT SELECT ON [Application].[Cities] to [third-party-user];

В качестве альтернативы предоставлению разрешений по отдельности для каждой таблицы можно добавить пользователя в качестве участника роли базы данныхdb_datareaders, чтобы разрешить доступ на чтение для всех таблиц, или использовать схемы, чтобы разрешить доступ ко всем имеющимся и новым таблицам в схеме.

Проверка доступа

Эту конфигурацию можно проверить с помощью любого клиентского средства и попытаться подключиться к первичной и именованной реплике. Например, с помощью sqlcmdможно попытаться подключиться к основному реплика с помощью third-party-login пользователя. Замените strong_password_here надежный пароль.

sqlcmd -S MyPrimaryServer.database.windows.net -U third-party-login -P strong_password_here -d WideWorldImporters

Это приведет к ошибке, так как пользователю не разрешено подключаться к серверу.

Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : Login failed for user 'third-party-login'. Reason: The account is disabled.

Попытка подключиться к именованной реплика завершается успешно. Замените strong_password_here надежный пароль.

sqlcmd -S MyNamedReplicaServer.database.windows.net -U third-party-login -P strong_password_here -d WideWorldImporters_NR

Ошибки не возвращаются, и на именованной реплике могут выполняться запросы, разрешенные предоставленными разрешениями уровня объекта.