共用方式為


如何在無伺服器 SQL 集區中設定同步處理物件的存取控制

在 Azure Synapse Analytics 中,Spark 資料庫 資料表 會與無伺服器 SQL 集區共用。 使用 Spark 建立的 Lake 資料庫 Parquet CSV 支援的資料表會自動在無伺服器 SQL 集區中使用。 此功能允許使用無伺服器 SQL 集區來探索及查詢使用 Spark 集區準備的資料。 在下圖中,您可以看到高階架構概觀,以利用這項功能。 首先,Azure Synapse Pipelines 會將資料從內部部署或其他儲存體移至 Azure Data Lake 儲存體。 Spark 現在可以擴充資料,並建立資料庫和資料表,這些資料表會同步處理至無伺服器 Synapse SQL。 之後,使用者可以在擴充資料之上執行臨機操作查詢,或將其服務至 Power BI 例如。

Enrich in Spark, serve with SQL diagram.

完整系統管理員存取權(系統管理員)

一旦這些資料庫和資料表從 Spark 同步處理到無伺服器 SQL 集區,就可以使用無伺服器 SQL 集區中的這些外部資料表來存取相同的資料。 不過,無伺服器 SQL 集區中的物件是唯讀的,因為與 Spark 集區物件保持一致性。 此限制只會讓具有 Synapse SQL 管理員istrator 或 Synapse 管理員istrator 角色的使用者,才能存取無伺服器 SQL 集區中的這些物件。 如果非系統管理員使用者嘗試在同步處理的資料庫/資料表上執行查詢,他們會收到如下的錯誤:External table '<table>' is not accessible because content of directory cannot be listed. 儘管他們能夠存取基礎儲存體帳戶上的資料。

由於無伺服器 SQL 集區中的同步資料庫是唯讀的,因此無法修改資料庫。 建立使用者,或嘗試授與其他許可權將會失敗。 若要讀取同步處理的資料庫,必須具有特殊許可權的伺服器層級許可權(例如 sysadmin)。 使用 適用于 Dataverse 和 Lake 資料庫資料表的 Azure Synapse Link 時,無伺服器 SQL 集區中的外部資料表也會存在這項限制。

同步處理資料庫的非系統管理員存取權

需要讀取資料和建立報表的使用者通常沒有完整的系統管理員存取權(系統管理員)。 此使用者通常是資料分析師,他們只需要使用現有的資料表來讀取和分析資料。 它們不需要建立新的物件。

具有最低許可權的使用者應該能夠:

  • 連線至從 Spark 複寫的資料庫
  • 透過外部資料表選取資料並存取基礎 ADLS 資料。

執行下列程式碼腳本之後,它可讓非系統管理員使用者具有伺服器層級許可權來連線到任何資料庫。 它也允許使用者檢視所有架構層級物件的資料,例如資料表或檢視表。 資料存取安全性可以在儲存層上管理。

-- Creating Azure AD login (same can be achieved for Azure AD app)
    CREATE LOGIN [login@contoso.com] FROM EXTERNAL PROVIDER;
    go;
    
    GRANT CONNECT ANY DATABASE to [login@contoso.com];
    GRANT SELECT ALL USER SECURABLES to [login@contoso.com];
    GO;

注意

這些語句應該在 master 資料庫上執行,因為這些是所有伺服器層級的許可權。

建立登入並授與許可權之後,使用者可以在同步處理的外部資料表上執行查詢。 此風險降低也可以套用至 Microsoft Entra 安全性群組。

您可以透過特定架構來管理物件上的更多安全性,並鎖定特定架構的存取權。 因應措施需要額外的 DDL。 在此案例中,您可以建立新的無伺服器資料庫、架構和檢視,以指向 ADLS 上的 Spark 資料表資料。

您可以透過 ACL 或 Microsoft Entra 使用者/群組的一般 儲存體 Blob 資料擁有者/讀者/參與者角色 來管理儲存體帳戶上的資料存取權。 針對服務主體(Microsoft Entra 應用程式),請確定您使用 ACL 設定。

注意

  • 如果您想要禁止在資料上使用 OPENROWSET,您可以使用 DENY ADMINISTER BULK OPERATIONS to [login@contoso.com]; 如需詳細資訊,請造訪 DENY 伺服器許可權
  • 如果您想要禁止使用特定架構,您可以使用 DENY SELECT ON SCHEMA::[schema_name] TO [login@contoso.com]; 如需詳細資訊,請造訪 DENY 架構許可權

下一步

如需詳細資訊,請參閱 SQL 驗證