Konfigurowanie izolowanego dostępu do repliki o nazwie Hiperskala

DOTYCZY: Azure SQL Database

W tym artykule opisano procedurę udzielania dostępu do Azure SQL hiperskala nazwanej repliki 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ółdzielone między repliką podstawową a nazwaną repliką, zapytania uruchomione na nazwanej repliki nie używają zasobów obliczeniowych podstawowej lub innych replik, a podmioty zabezpieczeń, które uzyskują dostęp do nazwanej repliki, nie mogą uzyskać dostępu do innych replik, w tym podstawowej.

Tworzenie logowania w bazie danych master na serwerze podstawowym

master W bazie danych na serwerze logicznym hostująca podstawową bazę danych wykonaj następujące czynności, aby utworzyć nowe dane logowania. Użyj własnego silnego i unikatowego hasła.

create login [third-party-login] with password = 'Just4STRONG_PAZzW0rd!';

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

select sid from sys.sql_logins where name = 'third-party-login';

Wyłącz logowanie. Uniemożliwi to logowanie dostępu do dowolnej bazy danych na serwerze hostujących replikę podstawową.

alter login [third-party-login] disable;

Tworzenie użytkownika w podstawowej bazie danych odczytu i zapisu

Po utworzeniu logowania połącz się 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 Azure SQL) i utwórz 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 istnieją obawy dotyczące ponownego włączenia logowania. Połączenie do głównej bazy danych na serwerze logicznym hostowym podstawowej bazy danych i wykonaj następujące czynności:

drop login [third-party-login];

Tworzenie nazwanej repliki na innym serwerze logicznym

Utwórz nowy serwer logiczny Azure SQL, który będzie 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 Azure SQL Database. Aby utworzyć nazwaną replikę, ten serwer musi znajdować się w tym samym regionie świadczenia usługi Azure co serwer hostowania repliki podstawowej.

Na przykład przy użyciu interfejsu wiersza polecenia az:

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

Następnie utwórz nazwę repliki dla podstawowej bazy danych na tym serwerze. Na przykład przy użyciu interfejsu wiersza polecenia az:

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

Tworzenie logowania w bazie danych master na nazwanym serwerze repliki

Połączenie do master bazy danych na serwerze logicznym hostowania nazwanej repliki utworzonej w poprzednim kroku. Dodaj identyfikator logowania przy użyciu identyfikatora SID pobranego z repliki podstawowej:

create login [third-party-login] with password = 'Just4STRONG_PAZzW0rd!', sid = 0x0...1234;

W tym momencie użytkownicy i aplikacje korzystające z niego third-party-login 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żna użyć zwykłych GRANTinstrukcji DENY i do REVOKE zarządzania uprawnieniami autoryzacji lub na poziomie obiektu w bazie danych. W tych instrukcjach odwołuje się do nazwy użytkownika utworzonego w bazie danych lub roli bazy danych, która zawiera tego użytkownika jako członka. Pamiętaj, aby wykonać te polecenia w repliki podstawowej. Zmiany będą propagowane do wszystkich replik pomocniczych, jednak będą skuteczne tylko w nazwanej repliki, w której utworzono logowanie 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, musisz jawnie przyznać SELECT uprawnienie:

grant select on [Application].[Cities] to [third-party-user];

Alternatywą dla udzielania uprawnień indywidualnie w każdej tabeli jest dodanie użytkownika do db_datareadersroli bazy danych w celu umożliwienia dostępu do odczytu do wszystkich tabel lub użycie schematóww celu umożliwienia dostępu 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 podstawową i nazwaną repliką. Na przykład za pomocą polecenia sqlcmdmożna spróbować nawiązać połączenie z repliką podstawową przy użyciu third-party-login użytkownika:

sqlcmd -S MyPrimaryServer.database.windows.net -U third-party-login -P Just4STRONG_PAZzW0rd! -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ę:

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

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

Więcej informacji: