在 Azure Synapse 無伺服器 SQL 集區中管理使用者權限

已完成

為保護資料安全,Azure 儲存體會實作存取控制模型,其同時支援 Azure 角色型存取控制 (Azure RBAC) 和存取控制清單 (ACL) 如適用於 Unix 的可攜式作業系統介面 (POSIX)

您可以將安全性主體與檔案和目錄的存取層級建立關聯。 系統會在存取控制清單 (ACL) 中擷取這些關聯。 儲存體帳戶中的每個檔案和目錄都具有存取控制清單。 當安全性主體嘗試在檔案或目錄上執行作業時,ACL 檢查會判斷該安全性主體 (使用者、群組、服務主體或受控識別) 是否有相應的權限等級來執行此作業。

存取控制清單共有兩種:

  • 存取 ACL

    控制對物件的存取權。 檔案和目錄都有存取 ACL。

  • 預設 ACL

    與目錄相關聯的 ACL 範本,用以判斷在該目錄下所建立任何子項目的存取 ACL。 檔案沒有預設 ACL。

存取 ACL 和預設 ACL 都有相同的結構。

容器物件的權限為 [讀取]、[寫入] 和 [執行],這些權限可用於下表所示的檔案和目錄:

權限層級

權限 檔案 Directory
讀取 (R) 可以讀取檔案的內容 需要 [讀取] 和 [執行] 才能列出目錄內容
寫入 (W) 可以寫入或附加至檔案 需要 [寫入] 和 [執行] 才能在目錄中建立子項目
執行 (X) 不表示 Data Lake Storage Gen2 內容中的任何項目 周遊目錄子項目的必要項目

設定 ACL 的指導方針

請一律使用 Microsoft Entra 安全性群組作為 ACL 項目的指派主體。 抵制直接指派個別使用者或服務主體的機會。 使用此結構將可讓您新增和移除使用者或服務主體,而不需要將 ACL 重新套用至整個目錄結構。 相反地,您可以直接從適當的 Microsoft Entra 安全性群組新增或移除使用者和服務主體。

設立群組有許多方法。 例如,假設您有一個名為 /LogData 的目錄,該目錄會保存伺服器產生的記錄資料。 Azure Data Factory (ADF) 會將資料內嵌至該資料夾內。 服務工程小組的特定使用者會上傳記錄並管理此資料夾的其他使用者,而各種 Databricks 叢集會分析該資料夾中的記錄。

若要啟用這些活動,您可以建立 LogsWriter 群組和 LogsReader 群組。 然後,您可以依下述步驟指派權限:

  • 新增具有 rwx 權限的 LogsWriter 群組至 /LogData 目錄的 ACL。
  • 新增具有 r-x 權限 LogsReader 群組至 /LogData 目錄的 ACL。
  • 新增適用於 ADF 的服務主體物件或受控服務識別 (MSI) 至 LogsWriters 群組。
  • 新增服務工程小組的使用者至 LogsWriter 群組。
  • 新增 Databricks 的服務主體物件或 MSI 至 LogsReader 群組。

若服務工程小組的使用者離開公司,您可以直接從 LogsWriter 群組中將其移除。 如果您未將該使用者新增至群組,而是為該使用者新增專用的 ACL 項目,則必須從 /LogData 目錄中移除該 ACL 項目。 您也必須從 /LogData 目錄的所有目錄階層中的所有子目錄和檔案中移除該項目。

無伺服器 SQL 集區使用者的必要角色

對於需要 [唯讀] 存取權的使用者,您應該指派名為 [儲存體 BLOB 資料讀取者] 的角色。

對於需要 [讀取/寫入] 存取權的使用者,您應該指派名為 [儲存體 BLOB 資料參與者] 的角色。 如使用者應具有 CETAS (create external table as select) 的存取權,就需要讀取/寫入存取權。

注意

若使用者具有擁有者或參與者的角色,則該角色權限不足。 Azure Data Lake Storage Gen 2 具有應指派的超級角色。

資料庫層級權限

若要提供更細微的使用者存取權,您應該使用 Transact-SQL 語法建立登入和使用者。

若要為使用者授與單一無伺服器 SQL 集區資料庫的存取權,請遵循此範例中的步驟:

  1. 建立 LOGIN

    use master
    CREATE LOGIN [alias@domain.com] FROM EXTERNAL PROVIDER;
    
  2. 建立 USER

    use yourdb -- Use your DB name
    CREATE USER alias FROM LOGIN [alias@domain.com];
    
  3. 將 USER 新增至指定角色的成員

    use yourdb -- Use your DB name
    alter role db_datareader 
    Add member alias -- Type USER name from step 2
    -- You can use any Database Role which exists 
    -- (examples: db_owner, db_datareader, db_datawriter)
    -- Replace alias with alias of the user you would like to give access and domain with the company domain you are using.
    

伺服器層級權限

  1. 若要為使用者授與所有無伺服器 SQL 集區資料庫的完整存取權,請遵循此範例中的步驟:

    CREATE LOGIN [alias@domain.com] FROM EXTERNAL PROVIDER;
    ALTER SERVER ROLE sysadmin ADD MEMBER [alias@domain.com];