Uzyskiwanie dostępu do baz danych lake przy użyciu bezserwerowej puli SQL w usłudze Azure Synapse Analytics

Obszar roboczy usługi Azure Synapse Analytics umożliwia tworzenie dwóch typów baz danych na podstawie usługi Spark Data Lake:

  • Bazy danych typu Lake, w których można definiować tabele na podstawie danych typu lake przy użyciu notesów platformy Apache Spark, szablonów baz danych lub usługi Microsoft Dataverse (wcześniej Common Data Service). Te tabele będą dostępne do wykonywania zapytań przy użyciu języka T-SQL (Transact-SQL) przy użyciu bezserwerowej puli SQL.
  • Bazy danych SQL, w których można definiować własne bazy danych i tabele bezpośrednio przy użyciu bezserwerowych pul SQL. Za pomocą języka T-SQL CREATE DATABASE, CREATE EXTERNAL TABLE można zdefiniować obiekty i dodać dodatkowe widoki SQL, procedury i wbudowane funkcje table-value na podstawie tabel.

Diagram that shows Lake and SQL databases that are created on top of Data Lake files.

Ten artykuł koncentruje się na bazach danych lake w bezserwerowej puli SQL w usłudze Azure Synapse Analytics.

Usługa Azure Synapse Analytics umożliwia tworzenie baz danych i tabel lake przy użyciu projektanta platformy Spark lub bazy danych, a następnie analizowanie danych w bazach danych lake przy użyciu bezserwerowej puli SQL. Bazy danych typu lake i tabele (oparte na parquet lub CSV), które są tworzone w pulach platformy Apache Spark, szablonach baz danych lub usłudze Dataverse, są automatycznie dostępne do wykonywania zapytań za pomocą bezserwerowego aparatu puli SQL. Bazy danych i tabele lake, które są modyfikowane, będą dostępne w bezserwerowej puli SQL po pewnym czasie. Nastąpi opóźnienie do momentu pojawienia się zmian wprowadzonych na platformie Spark lub bazie danych bezserwerowych.

Zarządzanie bazą danych lake

Aby zarządzać utworzonymi bazami danych lake platformy Spark, możesz użyć pul platformy Apache Spark lub projektanta bazy danych. Na przykład utwórz lub usuń bazę danych lake za pomocą zadania puli spark. Nie można utworzyć bazy danych lake ani obiektów w bazach danych lake przy użyciu bezserwerowej puli SQL.

Baza danych Spark default jest dostępna w kontekście bezserwerowej puli SQL jako bazy danych lake o nazwie default.

Uwaga

Nie można utworzyć bazy danych LAKE i bazy danych SQL w bezserwerowej puli SQL o tej samej nazwie.

Tabele w bazach danych lake nie mogą być modyfikowane z bezserwerowej puli SQL. Użyj projektanta bazy danych lub pul platformy Apache Spark, aby zmodyfikować bazę danych lake. Bezserwerowa pula SQL umożliwia wprowadzanie następujących zmian w bazie danych typu lake przy użyciu poleceń języka Transact-SQL:

  • Dodawanie, modyfikowanie i upuszczanie widoków, procedur, wbudowanych funkcji tabeli-wartość w bazie danych typu lake.
  • Dodawanie i usuwanie użytkowników firmy Microsoft z zakresem bazy danych.
  • Dodaj lub usuń użytkowników bazy danych Entra firmy Microsoft do roli db_datareader . Użytkownicy bazy danych Microsoft Entra w roli db_datareader mają uprawnienia do odczytywania wszystkich tabel w bazie danych lake, ale nie mogą odczytywać danych z innych baz danych.

Model zabezpieczeń

Bazy danych i tabele lake są zabezpieczone na dwóch poziomach:

  • Podstawowa warstwa magazynu przez przypisanie do użytkowników firmy Microsoft Entra jednego z następujących elementów:
    • Kontrola dostępu na podstawie ról na platformie Azure (Azure RBAC)
    • Rola kontroli dostępu opartej na atrybutach platformy Azure (Azure ABAC)
    • Uprawnienia listy ACL
  • Warstwa SQL, w której można zdefiniować użytkownika microsoft Entra i udzielić uprawnień SQL do wybierania danych z tabel odwołujących się do danych lake.

Model zabezpieczeń usługi Lake

Dostęp do plików bazy danych lake jest kontrolowany przy użyciu uprawnień usługi Lake w warstwie magazynu. Tylko użytkownicy firmy Microsoft Entra mogą używać tabel w bazach danych lake i mogą uzyskiwać dostęp do danych w jeziorze przy użyciu własnych tożsamości.

Możesz udzielić dostępu do danych bazowych używanych dla tabel zewnętrznych do podmiotu zabezpieczeń, takiego jak: użytkownik, aplikacja Microsoft Entra z przypisaną jednostką usługi lub grupa zabezpieczeń. W przypadku dostępu do danych przyznaj oba następujące uprawnienia:

  • Udziel read (R) uprawnień do plików (takich jak pliki danych bazowych tabeli).
  • Przyznaj execute (X) uprawnienie do folderu, w którym są przechowywane pliki i w każdym folderze nadrzędnym do katalogu głównego. Więcej informacji na temat tych uprawnień można uzyskać na stronie Listy kontroli dostępu (ACL).

Na przykład w systemie https://<storage-name>.dfs.core.windows.net/<fs>/synapse/workspaces/<synapse_ws>/warehouse/mytestdb.db/myparquettable/podmioty zabezpieczeń wymagają:

  • execute (X)uprawnienia do wszystkich folderów rozpoczynających się <fs> od .myparquettable
  • read (R) uprawnienia do myparquettable plików i w tym folderze, aby móc odczytać tabelę w bazie danych (zsynchronizowane lub oryginalne).

Jeśli podmiot zabezpieczeń wymaga możliwości tworzenia obiektów lub upuszczania obiektów w bazie danych, wymagane są dodatkowe write (W) uprawnienia w folderach i plikach w folderze warehouse . Modyfikowanie obiektów w bazie danych nie jest możliwe z bezserwerowej puli SQL, tylko z pul platformy Spark lub projektanta bazy danych.

Model zabezpieczeń SQL

Obszar roboczy usługi Azure Synapse udostępnia punkt końcowy języka T-SQL, który umożliwia wykonywanie zapytań względem bazy danych typu lake przy użyciu bezserwerowej puli SQL. Oprócz dostępu do danych interfejs SQL umożliwia kontrolowanie, kto może uzyskiwać dostęp do tabel. Musisz zezwolić użytkownikowi na dostęp do udostępnionych baz danych lake przy użyciu bezserwerowej puli SQL. Istnieją dwa typy użytkowników, którzy mogą uzyskiwać dostęp do baz danych typu lake:

  • Administracja istratory: Przypisz Rola obszaru roboczego usługi Synapse SQL Administracja istrator lub rola na poziomie serwera sysadmin w bezserwerowej puli SQL. Ta rola ma pełną kontrolę nad wszystkimi bazami danych. Role usługi Synapse Administracja istrator i synapse SQL Administracja istrator mają również wszystkie uprawnienia do wszystkich obiektów w bezserwerowej puli SQL.
  • Czytelnicy obszaru roboczego: Udziel uprawnień na poziomie serwera GRANT CONNECT ANY DATABASE i GRANT SELECT ALL USER SECURABLES on serverless SQL pool to a login that will enable the login to access and read any database (UDZIEL WSZYSTKIM UŻYTKOWNIKOM ZABEZPIECZANIA WSZYSTKICH UŻYTKOWNIKÓW w bezserwerowej puli SQL) do identyfikatora logowania, które umożliwi logowanie i odczyt dowolnej bazy danych. Może to być dobry wybór w przypadku przypisywania dostępu czytelnika/innego niż administrator do użytkownika.
  • Czytelnicy bazy danych: tworzenie użytkowników bazy danych na podstawie identyfikatora Entra firmy Microsoft w bazie danych lake i dodawanie ich do roli db_datareader , co umożliwi im odczytywanie danych w bazie danych lake.

Dowiedz się więcej o ustawianiu kontroli dostępu w udostępnionych bazach danych tutaj.

Niestandardowe obiekty SQL w bazach danych lake

Bazy danych typu Lake umożliwiają tworzenie niestandardowych obiektów języka T-SQL, takich jak schematy, procedury, widoki i wbudowane funkcje tabeli-wartości (iTVFs). Aby utworzyć niestandardowe obiekty SQL, musisz utworzyć schemat, w którym zostaną wprowadzone obiekty. Nie można umieścić niestandardowych obiektów SQL w dbo schemacie, ponieważ jest on zarezerwowany dla tabel lake zdefiniowanych w platformie Spark, projektancie bazy danych lub usłudze Dataverse.

Ważne

Należy utworzyć niestandardowy schemat SQL, w którym będą umieszczane obiekty SQL. Niestandardowych obiektów SQL nie można umieścić w schemacie dbo . Schemat dbo jest zarezerwowany dla tabel lake utworzonych pierwotnie w projektancie platformy Spark lub bazy danych.

Przykłady

Tworzenie czytnika bazy danych SQL w bazie danych lake

W tym przykładzie dodajemy użytkownika microsoft Entra w bazie danych lake, który może odczytywać dane za pośrednictwem udostępnionych tabel. Użytkownicy są dodawani do bazy danych lake za pośrednictwem bezserwerowej puli SQL. Następnie przypisz użytkownika do roli db_datareader , aby mógł odczytywać dane.

CREATE USER [customuser@contoso.com] FROM EXTERNAL PROVIDER;
GO
ALTER ROLE db_datareader
ADD MEMBER [customuser@contoso.com];

Tworzenie czytnika danych na poziomie obszaru roboczego

Identyfikator logowania z uprawnieniami GRANT CONNECT ANY DATABASE i GRANT SELECT ALL USER SECURABLES może odczytywać wszystkie tabele przy użyciu bezserwerowej puli SQL, ale nie może tworzyć baz danych SQL ani modyfikować w nich obiektów.

CREATE LOGIN [wsdatareader@contoso.com] FROM EXTERNAL PROVIDER
GRANT CONNECT ANY DATABASE TO [wsdatareader@contoso.com]
GRANT SELECT ALL USER SECURABLES TO [wsdatareader@contoso.com]

Ten skrypt umożliwia tworzenie użytkowników bez uprawnień administratora, którzy mogą odczytywać dowolną tabelę w bazach danych lake.

Tworzenie bazy danych Platformy Spark i nawiązywanie z nią połączenia z bezserwerową pulą SQL

Najpierw utwórz nową bazę danych Spark o nazwie mytestdb przy użyciu klastra Spark, który został już utworzony w obszarze roboczym. Można to osiągnąć, na przykład przy użyciu notesu Spark C# z następującą instrukcją platformy .NET for Spark:

spark.sql("CREATE DATABASE mytestlakedb")

Po krótkim opóźnieniu można zobaczyć bazę danych lake z bezserwerowej puli SQL. Na przykład uruchom następującą instrukcję z bezserwerowej puli SQL.

SELECT * FROM sys.databases;

Sprawdź, czy mytestlakedb znajduje się on w wynikach.

Tworzenie niestandardowych obiektów SQL w bazie danych lake

W poniższym przykładzie pokazano, jak utworzyć niestandardowy widok, procedurę i wbudowane funkcje table-value (iTVF) w schemacie reports :

CREATE SCHEMA reports
GO

CREATE OR ALTER VIEW reports.GreenReport
AS SELECT puYear, puMonth,
            fareAmount = SUM(fareAmount),
            tipAmount = SUM(tipAmount),
            mtaTax = SUM(mtaTax)
FROM dbo.green
GROUP BY puYear, puMonth
GO

CREATE OR ALTER PROCEDURE reports.GreenReportSummary
AS BEGIN
SELECT puYear, puMonth,
            fareAmount = SUM(fareAmount),
            tipAmount = SUM(tipAmount),
            mtaTax = SUM(mtaTax)
FROM dbo.green
GROUP BY puYear, puMonth
END
GO

CREATE OR ALTER FUNCTION reports.GreenDataReportMonthly(@year int)
RETURNS TABLE
RETURN ( SELECT puYear = @year, puMonth,
                fareAmount = SUM(fareAmount),
                tipAmount = SUM(tipAmount),
                mtaTax = SUM(mtaTax)
        FROM dbo.green
        WHERE puYear = @year
        GROUP BY puMonth )
GO

Następne kroki