Настройка изолированного доступа для именованных реплик гипермасштабирования
Применимо к: База данных 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
Ошибки не возвращаются, и на именованной реплике могут выполняться запросы, разрешенные предоставленными разрешениями уровня объекта.
Связанный контент
- Логические серверы SQL Azure см. в статье "Что такое сервер в База данных SQL Azure?"
- Управление доступом к базе данных и именами входа см. в разделе База данных SQL безопасности. Управление доступом к базе данных и безопасностью входа.
- Разрешения ядра СУБД см. в разделе "Разрешения".
- Предоставление разрешений объекта см. в разделе "Разрешения объекта GRANT".