Konfigurowanie izolowanego dostępu dla replik nazwanych w warstwie Hiperskala

Dotyczy:Azure SQL Database

W tym artykule opisano procedurę udzielania dostępu do repliki o nazwie Hiperskala usługi Azure SQL Database bez udzielania dostępu do repliki podstawowej lub innych nazwanych replik. Ten scenariusz umożliwia izolację zasobów i zabezpieczeń nazwanej repliki — ponieważ nazwana replika będzie działać przy użyciu własnego węzła obliczeniowego — i jest przydatna przy każdym izolowanym dostępie tylko do odczytu do bazy danych Azure SQL Hiperskala. Izolowane, w tym kontekście oznacza, że procesor CPU i pamięć nie są współużytkowane między repliką podstawową a nazwaną repliką, zapytania uruchomione w nazwanej repliki nie używają zasobów obliczeniowych podstawowego lub innych replik, a podmioty zabezpieczeń, które uzyskują dostęp do nazwanej repliki, nie mogą uzyskać dostępu do innych replik, w tym repliki podstawowej.

Uwaga

Microsoft Entra ID był wcześniej znany jako Azure Active Directory (Azure AD).

Tworzenie identyfikatora logowania na serwerze podstawowym

master W bazie danych na serwerze logicznym obsługującym podstawową bazę danych wykonaj następujące czynności, aby utworzyć nowe dane logowania.

Użyj własnego silnego i unikatowego hasła, zastępując strong_password_here ciąg silnym hasłem.

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

Pobierz wartość szesnastkowa identyfikatora SID dla utworzonego identyfikatora logowania z sys.sql_logins widoku systemu:

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

Wyłącz logowanie. Zapobiega to uzyskiwaniu dostępu do dowolnej bazy danych na serwerze hostujący replikę podstawową.

ALTER LOGIN [third-party-login] DISABLE;

Tworzenie użytkownika w podstawowej bazie danych odczytu i zapisu

Po utworzeniu logowania nawiąż połączenie z podstawową repliką odczytu i zapisu bazy danych, na przykład WideWorldImporters (możesz znaleźć przykładowy skrypt, aby przywrócić go tutaj: Przywróć bazę danych w usłudze Azure SQL) i utworzyć użytkownika bazy danych dla tego identyfikatora logowania:

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

Opcjonalnie po utworzeniu użytkownika bazy danych możesz usunąć identyfikator logowania serwera utworzony w poprzednim kroku, jeśli w jakikolwiek sposób wystąpią obawy dotyczące ponownego włączenia logowania. Połączenie do master bazy danych na serwerze logicznym hostowym podstawowej bazy danych i wykonaj następujące przykładowe skrypty:

DROP LOGIN [third-party-login];

Tworzenie nazwanej repliki na innym serwerze logicznym

Utwórz nowy serwer logiczny usługi Azure SQL, który ma być używany do izolowania dostępu do nazwanej repliki. Postępuj zgodnie z instrukcjami dostępnymi w temacie Tworzenie serwerów i pojedynczych baz danych oraz zarządzanie nimi w usłudze Azure SQL Database. Aby utworzyć nazwaną replikę, ten serwer musi znajdować się w tym samym regionie świadczenia usługi Azure, co serwer hostująca replikę podstawową.

W poniższym przykładzie zastąp strong_password_here ciąg silnym hasłem. Na przykład przy użyciu interfejsu wiersza polecenia platformy Azure:

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

Następnie utwórz nazwaną replikę dla podstawowej bazy danych na tym serwerze. Na przykład przy użyciu interfejsu wiersza polecenia platformy Azure:

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

Tworzenie identyfikatora logowania na nazwanym serwerze repliki

Połączenie do master bazy danych na serwerze logicznym hostująca nazwaną replikę utworzoną w poprzednim kroku. Zastąp strong_password_here ciąg silnym hasłem. Dodaj identyfikator logowania przy użyciu identyfikatora SID pobranego z repliki podstawowej:

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

W tym momencie użytkownicy i aplikacje używające third-party-login nazwy lub bob@contoso.com mogą łączyć się z nazwaną repliką, ale nie z repliką podstawową.

Udzielanie uprawnień na poziomie obiektu w bazie danych

Po skonfigurowaniu uwierzytelniania logowania zgodnie z opisem możesz użyć zwykłych GRANTDENY instrukcji i REVOKE do zarządzania uprawnieniami autoryzacji lub na poziomie obiektu w bazie danych. W tych instrukcjach należy odwołać się do nazwy użytkownika utworzonego w bazie danych lub roli bazy danych zawierającego tego użytkownika jako członka. Pamiętaj, aby wykonać te polecenia w repliki podstawowej. Zmiany są propagowane do wszystkich replik pomocniczych, ale będą skuteczne tylko w nazwanej repliki, w której utworzono identyfikator logowania na poziomie serwera.

Pamiętaj, że domyślnie nowo utworzony użytkownik ma minimalny zestaw uprawnień przyznanych (na przykład nie może uzyskać dostępu do żadnych tabel użytkowników). Jeśli chcesz zezwolić na third-party-user odczytywanie danych w tabeli lub bob@contoso.com odczytywać je, musisz jawnie udzielić SELECT uprawnienia:

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

Alternatywą dla udzielania uprawnień indywidualnie dla każdej tabeli jest dodanie użytkownika do db_datareadersroli bazy danych, aby zezwolić na dostęp do odczytu do wszystkich tabel lub użyć schematów , aby zezwolić na dostęp do wszystkich istniejących i nowych tabel w schemacie.

Testowanie dostępu

Tę konfigurację można przetestować przy użyciu dowolnego narzędzia klienckiego i spróbować nawiązać połączenie z repliką podstawową i nazwaną. Na przykład przy użyciu polecenia sqlcmdmożesz spróbować nawiązać połączenie z repliką podstawową przy użyciu third-party-login użytkownika. Zastąp strong_password_here ciąg silnym hasłem.

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

Spowoduje to błąd, ponieważ użytkownik nie może nawiązać połączenia z serwerem:

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

Próba nawiązania połączenia z nazwaną repliką powiedzie się. Zastąp strong_password_here ciąg silnym hasłem.

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

Nie są zwracane żadne błędy, a zapytania mogą być wykonywane na nazwanej replice zgodnie z dozwolonymi uprawnieniami na poziomie obiektu.