Настройка изолированного доступа для гипермасштабирования с именем реплика
Применимо к:База данных 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".
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по