Udostępnij za pośrednictwem


Uzyskiwanie dostępu do baz danych lake przy użyciu bezserwerowej puli SQL

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 można zapytaniawać za pomocą języka T-SQL (Transact-SQL) w bezserwerowej puli SQL.
  • Bazy danych SQL, w których można definiować własne bazy danych i tabele bezpośrednio przy użyciu bezserwerowej puli 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 przedstawiający bazy danych Lake i SQL, które są tworzone na podstawie plików usługi Data Lake.

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 formacie parquet lub CSV), które są tworzone w pulach platformy Apache Spark, szablonach bazy danych typu lake lub usłudze Dataverse, są automatycznie dostępne do wykonywania zapytań za pomocą serwerlessowego silnika puli SQL. Bazy danych i tabele lake, które są modyfikowane, są dostępne w bezserwerowej puli SQL po pewnym czasie. Występuje opóźnienie, aż zmiany wprowadzone w projektancie Spark lub bazie danych będą widoczne w trybie bezserwerowym.

Zarządzanie bazą danych lake

Aby zarządzać bazami danych lake utworzonymi przez Apache Spark, możesz użyć pul Apache Spark lub projektanta baz 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 baza danych typu lake o nazwie default.

Uwaga

Nie można utworzyć jeziora danych 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 jeziorową. Bezserwerowa pula SQL umożliwia wprowadzanie następujących zmian w bazie danych typu lake przy użyciu poleceń języka T-SQL:

  • Dodawanie, modyfikowanie i usuwanie widoków, procedur oraz wbudowanych funkcji zwracających wartości tabeli w bazie danych typu lake.
  • Dodawanie i usuwanie użytkowników firmy Microsoft Entra o zakresie 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 jeziorowe są zabezpieczone na dwóch poziomach.

  • Warstwa podstawowa pamięci masowej poprzez przypisanie użytkownikom 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 kontroli dostępu (ACL)
  • Warstwa SQL, w której można zdefiniować użytkownika microsoft Entra i udzielić uprawnień SQL do danych z tabel odwołujących się do SELECT 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) uprawnienia dla folderu, w którym są przechowywane pliki, oraz we wszystkich folderach nadrzędnych aż do folderu głównego. Więcej informacji na temat tych uprawnień można przeczytać 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ń potrzebują:

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

Jeśli podmiot zabezpieczeń wymaga możliwości tworzenia lub usuwania obiektów w bazie danych, konieczne są dodatkowe write (W) uprawnienia na folderach i plikach w folderze magazynu. Modyfikowanie obiektów w bazie danych nie jest możliwe z poziomu bezserwerowej puli SQL; można to zrobić jedynie za pomocą pul 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ą trzy typy użytkowników, którzy mogą uzyskiwać dostęp do baz danych typu lake:

  • Administratorzy: przypisz rolę Administrator SQL usługi Synapse lub rolę na poziomie serwera sysadmin w ramach bezserwerowej puli SQL. Ta rola ma pełną kontrolę nad wszystkimi bazami danych. Role Administrator usługi Synapse i Administrator usługi Synapse SQL mają również wszystkie uprawnienia do wszystkich obiektów w bezserwerowej puli SQL, domyślnie.
  • Użytkownicy mający dostęp do obszaru roboczego: Przyznaj uprawnienia na poziomie serwera GRANT CONNECT ANY DATABASE i GRANT SELECT ALL USER SECURABLES na bezserwerowej puli SQL do logowania, które umożliwia dostęp i odczyt dowolnej bazy danych. Może to być dobry wybór w przypadku przypisywania dostępu czytelnika/innego niż administrator do użytkownika.
  • Użytkownicy bazy danych: Utwórz użytkowników bazy danych z Microsoft Entra ID w jeziorowej bazie danych i dodaj ich do roli db_datareader, co umożliwia im odczytywanie danych w jeziorowej bazie danych.

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

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 na 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 jeziorowych, które zostały pierwotnie utworzone w Spark lub projektancie bazy danych.

Przykłady

Tworzenie czytnika bazy danych SQL w bazie danych lake

W tym przykładzie dodamy 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

Login z uprawnieniami GRANT CONNECT ANY DATABASE i GRANT SELECT ALL USER SECURABLES może czytać wszystkie tabele, korzystając z 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 usługi Lake.

Tworzenie bazy danych Spark i nawiązywanie połączenia za pomocą bezserwerowej puli SQL

Najpierw utwórz nową bazę danych Spark o nazwie mytestlakedb przy użyciu klastra Spark, który został już utworzony w obszarze roboczym. Można to osiągnąć, na przykład przy użyciu notatnika Spark C# z następującą instrukcją .NET dla 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ę oraz wbudowaną funkcję 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