Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: База данных SQL Azure
В этой статье описывается процедура предоставления доступа к именованной реплике с гипермасштабированием База данных SQL Azure без предоставления доступа к первичной реплике или другим именованным репликам. Этот сценарий позволяет обеспечить изоляцию ресурсов и безопасности именованной реплики, так как именованная реплика будет работать с помощью собственного вычислительного узла, и это удобно, когда требуется изолированный доступ только для чтения к гипермасштабируемой базе данных SQL Azure. Изолированный в этом контексте означает, что ЦП и память не совместно используются между первичной и именованной репликой, запросы, выполняемые в именованной реплике, не используют вычислительные ресурсы первичной или любой другой реплики, а субъекты, обращающиеся к именованной реплике, не могут получить доступ к другим репликам, включая основную.
Примечание.
Идентификатор Microsoft Entra ранее был известен как Azure Active Directory (Azure AD).
Создание имени входа на первичном сервере
master В базе данных на логическом сервере, на котором размещена база данных-источник, выполните следующую команду, чтобы создать новое имя входа.
Замените <password>строгим паролем.
CREATE LOGIN [third-party-login]
WITH PASSWORD = '<password>';
Получите шестнадцатеричное значение SID для созданного имени для входа из системного представления sys.sql_logins.
SELECT SID
FROM sys.sql_logins
WHERE name = 'third-party-login';
Отключите вход. Это предотвращает доступ к любой базе данных на сервере, на котором размещена первичная реплика.
ALTER LOGIN [third-party-login] DISABLE;
Создание пользователя в базе данных-источнике для чтения и записи
После создания логина подключитесь к первичной реплике с возможностью записи и чтения вашей базы данных. Например, восстановите WideWorldImporters с подробностями, доступными в Установке и конфигурации. Затем создайте пользователя базы данных для этой учетной записи.
CREATE USER [third-party-user] FOR LOGIN [third-party-login];
В качестве дополнительного шага после создания пользователя базы данных можно удалить имя для входа на сервер, созданное на предыдущем шаге, если есть опасение, что оно может быть активировано повторно. Подключитесь к master базе данных на логическом сервере, на котором размещена база данных-источник, и выполните следующие примеры скриптов:
DROP LOGIN [third-party-login];
Создание именованной реплики на другом логическом сервере
Создайте логический сервер SQL Azure, который будет использоваться для изоляции доступа к именованной реплике. Выполните инструкции, приведенные в статье Создание серверов и отдельных баз данных в Базе данных SQL Azure и управление ими. Чтобы создать именованную реплику, этот сервер должен находиться в том же регионе Azure, что и сервер, на котором размещается первичная реплика.
Замените <password> строгим паролем. Например, с помощью Azure CLI:
az sql server create -g MyResourceGroup -n MyNamedReplicaServer -l MyLocation --admin-user MyAdminUser --admin-password <password>
Затем создайте на этом сервере именованную реплику для базы данных-источника. Например, с помощью Azure CLI:
az sql db replica create -g MyResourceGroup -n WideWorldImporters -s MyPrimaryServer --secondary-type Named --partner-database WideWorldImporters_NR --partner-server MyNamedReplicaServer
Создание имени входа на именованном сервере реплики
Подключитесь к базе данных master на логическом сервере, где размещается именованная реплика, созданная на предыдущем шаге. Замените <password> строгим паролем. Добавьте имя для входа, используя идентификатор безопасности, полученный из первичной реплики:
CREATE LOGIN [third-party-login] WITH PASSWORD = '<password>', 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 пользователя. Замените <password> строгим паролем.
sqlcmd -S MyPrimaryServer.database.windows.net -U third-party-login -P <password> -d WideWorldImporters
Это приведет к ошибке, так как пользователь не может подключиться к серверу:
Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : Login failed for user 'third-party-login'. Reason: The account is disabled.
Попытка подключения к именованной реплике завершается успешно. Замените <password> строгим паролем.
sqlcmd -S MyNamedReplicaServer.database.windows.net -U third-party-login -P <password> -d WideWorldImporters_NR
Ошибки не возвращаются, и на именованной реплике могут выполняться запросы, разрешенные предоставленными разрешениями уровня объекта.