Unity 目錄最佳做法

本檔提供使用 Unity 目錄和差異共用以符合數據控管需求的建議。

Unity 目錄是 Databricks 平臺上數據和 AI 的細部治理解決方案。 它藉由提供集中位置來管理和稽核數據存取,以協助簡化數據的安全性和控管。 Delta Sharing 是安全的數據共享平臺,可讓您在 Azure Databricks 中與組織外部的使用者共享數據。 它會使用 Unity 目錄來管理和稽核共享行為。

數據控管和數據隔離建置組塊

若要開發適用於您組織的數據控管模型和數據隔離計劃,它有助於瞭解您在 Azure Databricks 中建立數據控管解決方案時可用的主要建置組塊。

下圖說明 Unity 目錄中的主要數據階層(某些安全性實體對象呈現灰色,以強調目錄下管理的物件階層)。

Unity Catalog 物件模型圖表

該階層中的物件包括下列專案:

  • 中繼存放區: 中繼存放區是 Unity 目錄中物件的最上層容器。 中繼存放區位於帳戶層級,並作為 Azure Databricks 數據控管模型中金字塔頂端的功能。

    中繼存放區會管理數據資產(數據表、檢視和磁碟區)以及管理其存取權的許可權。 Azure Databricks 帳戶管理員可以為其操作的每個區域建立一個中繼存放區,並將其指派給相同區域中的多個 Azure Databricks 工作區。 中繼存放區管理員可以管理中繼存放區中的所有物件。 它們無法直接存取中繼存放區中註冊之數據表的讀取和寫入,但是透過其傳輸數據對象擁有權的能力,它們確實具有間接存取權。

    根據預設,任何指定中繼存放區的實體記憶體會與帳戶中任何其他中繼存放區的記憶體隔離。

    中繼存放區提供區域隔離,但不是作為數據隔離的單位。 數據隔離應該從目錄層級開始。

  • 目錄: 目錄是 Unity 目錄中繼存放區所管理的數據階層中最高層級(目錄 > 架構 > 數據表/檢視/磁碟區)。 它們是在一般 Azure Databricks 數據控管模型中作為數據隔離的主要單位。

    目錄代表架構的邏輯群組,通常是由數據存取需求所系結。 目錄通常會鏡像組織單位或軟體開發生命週期範圍。 例如,您可以選擇有生產數據的目錄和開發數據的目錄,或非客戶數據的目錄,以及一個用於敏感數據的目錄。

    目錄可以儲存在中繼存放區層級,也可以設定目錄與父中繼存放區的其餘部分分開儲存。 如果您的工作區已針對 Unity 目錄自動啟用,則沒有中繼存放區層級的記憶體,而且您必須在建立目錄時指定儲存位置。

    如果目錄是 Azure Databricks 數據控管模型中數據隔離的主要單位,工作區是使用數據資產的主要環境。 中繼存放區系統管理員和目錄擁有者可以獨立管理目錄的存取權,也可以將目錄系結至特定工作區,以確保特定種類的數據只會在這些工作區中處理。 例如,您可能想要個別的生產與開發工作區,或個別的工作區來處理個人資料。

    根據預設,安全性實體對象的訪問許可權是由該物件的子系所繼承,而目錄位於階層頂端。 這可讓您更輕鬆地設定數據的預設存取規則,並在階層的每個層級指定不同的規則,而只有您需要這些規則。

  • 架構(資料庫): 架構也稱為資料庫,是表格式數據的邏輯群組(數據表和檢視)、非表格式數據(磁碟區)、函式和機器學習模型。 它們可讓您組織和控制比目錄更細微的數據存取。 通常它們代表單一使用案例、專案或小組沙盒。

    架構可以儲存在與父目錄相同的實體記憶體中,或者您可以將架構設定為與父目錄的其餘部分分開儲存。

    中繼存放區管理員、父目錄擁有者和架構擁有者可以管理架構的存取權。

  • 數據表: 數據表位於 Unity 目錄三層命名空間的第三層。 它們包含數據列。

    Unity 目錄可讓您建立 受控數據表外部數據表

    針對受控數據表,Unity 目錄會完整管理生命週期和檔案配置。 根據預設,受控數據表會儲存在您建立中繼存放區時所設定的根記憶體位置。 您可以選擇在目錄或架構層級隔離受控數據表的記憶體。

    外部數據表是數據表,其數據生命週期和檔案配置是使用您的雲端提供者和其他數據平臺來管理,而不是 Unity 目錄。 一般而言,您可以使用外部數據表來註冊大量的現有數據,或者,如果您也需要使用 Azure Databricks 叢集和 Databricks SQL 倉儲以外的工具來寫入數據,則為 。 在 Unity 目錄中繼存放區中註冊外部數據表之後,您可以管理及稽核 Azure Databricks 的存取權,就像使用受控數據表一樣。

    父目錄擁有者和架構擁有者可以管理數據表的存取權,中繼存放區管理員也可以間接管理。

  • 檢視: 檢視是衍生自中繼存放區中一或多個數據表和檢視的只讀物件。

  • 數據列和數據行: 數據列和數據行層級存取,以及數據遮罩,會使用動態檢視或數據列篩選和數據行遮罩來授與。 動態檢視是唯讀的。

  • 磁碟區: 磁碟區位於 Unity 目錄三層命名空間的第三層。 它們會管理非表格式數據。 您可以使用磁碟區,以任何格式儲存、組織和存取檔案,包括結構化、半結構化和非結構化數據。 磁碟區中的檔案無法註冊為數據表。

  • 模型和函式: 雖然不是,但嚴格來說,數據資產、已註冊的模型和用戶定義函式也可以在 Unity 目錄中管理,並位於物件階層中的最低層級。 請參閱在 Unity 目錄中管理模型生命週期和 Unity 目錄中的使用者定義函式 (UDF)。

規劃您的數據隔離模型

當組織使用 Azure Databricks 之類的數據平臺時,通常需要在環境(例如開發和生產環境)或組織作業單位之間有數據隔離界限。

隔離標準可能會因貴組織而異,但通常包含下列預期:

  • 使用者只能根據指定的存取規則取得數據的存取權。
  • 數據只能由指定的人員或小組管理。
  • 數據會在記憶體中實際分隔。
  • 數據只能在指定的環境中存取。

數據隔離的需求可能會導致孤立的環境,讓數據控管和共同作業變得不必要的困難。 Azure Databricks 會使用 Unity 目錄解決此問題,此目錄提供一些數據隔離選項,同時維護統一的數據控管平臺。 本節討論 Azure Databricks 中可用的數據隔離選項,以及如何使用這些選項,不論您偏好集中式數據控管模型還是分散式數據控管模型。

使用者只能根據指定的存取規則取得數據的存取權

大部分的組織都根據內部或法規需求,對數據存取有嚴格的需求。 必須保持安全的一般數據範例包括員工工資資訊或信用卡付款資訊。 這類資訊的存取通常會定期受到嚴格控制和稽核。 Unity 目錄可讓您更精細地控制目錄中的數據資產,以符合這些業界標準。 有了 Unity 目錄所提供的控件,使用者就只能查看和查詢他們有權查看和查詢的數據。

數據只能由指定的人員或小組管理

Unity 目錄可讓您選擇集中式和分散式治理模型。

在集中式治理模型中,您的治理系統管理員是中繼存放區的擁有者,而且可以取得任何對象的擁有權,並授與和撤銷許可權。

在分散式治理模型中,目錄或一組目錄是數據域。 該目錄的擁有者可以建立並擁有所有資產,並管理該網域內的治理。 任何指定網域的擁有者都可以獨立於其他網域的擁有者運作。

無論您選擇中繼存放區或目錄作為數據域,Databricks 強烈建議您將群組設定為中繼存放區管理員或目錄擁有者。

Unity 目錄擁有權和存取權

數據在記憶體中實際分隔

組織可以要求特定類型的數據儲存在其雲端租使用者的特定帳戶或貯體內。

Unity 目錄可讓您在中繼存放區、目錄或架構層級設定儲存位置,以滿足這類需求。

例如,假設您的組織有公司合規性政策,需要與人力資源相關的生產數據位於容器中 abfss://mycompany-hr-prod@storage-account.dfs.core.windows.net。 在 Unity 目錄中,您可以藉由在目錄層級上設定位置、建立名為 的目錄,以及 hr_prod將位置指派給目錄 abfss://mycompany-hr-prod@storage-account.dfs.core.windows.net/unity-catalog,以達到此需求。 這表示在目錄中建立的 hr_prod 受控數據表或磁碟區(例如,使用 CREATE TABLE hr_prod.default.table …)會將數據儲存在 abfss://mycompany-hr-prod@storage-account.dfs.core.windows.net/unity-catalog 中。 您可以選擇提供架構層級的位置,以更細微的層級組織 中的數據 hr_prod catalog

如果不需要這類記憶體隔離,您可以在中繼存放區層級設定儲存位置。 結果是,此位置可作為預設位置,用來跨中繼存放區中的目錄和架構儲存受控數據表和磁碟區。

系統會評估記憶體位置階層,從架構到目錄到中繼存放區。

例如,如果在 中my-region-metastore建立數據表myCatalog.mySchema.myTable,數據表儲存位置會根據下列規則來決定:

  1. 如果已針對 mySchema提供位置,則會儲存在那裡。
  2. 如果沒有,且已在 上 myCatalog提供位置,則會儲存在那裡。
  3. 最後,如果未在 上 myCatalog提供任何位置,則會儲存在與 my-region-metastore相關聯的位置。

Unity 目錄記憶體階層

數據只能在指定的環境中存取

組織與合規性需求通常會指定您保留某些數據,例如個人資料,只能在特定環境中存取。 您可能也想要將生產數據與開發環境隔離,或確保某些數據集和網域永遠不會聯結在一起。

在 Databricks 中,工作區是主要數據處理環境,而目錄則是主要數據域。 Unity 目錄可讓中繼存放區管理員和目錄擁有者將目錄指派或「系結」至特定工作區。 這些環境感知系結可讓您確保工作區中只有特定目錄可供使用,而不論授與使用者之數據物件的特定許可權為何。

現在讓我們更深入地了解設定 Unity 目錄以符合您的需求的程式。

設定 Unity 目錄中繼存放區

中繼存放區是 Unity 目錄中物件的最上層容器。 中繼存放區會管理數據資產(數據表、檢視和磁碟區),以及 Unity 目錄所管理的其他安全性實體物件。 如需安全性實體物件的完整清單,請參閱 Unity 目錄中的安全性實體物件。

本節提供建立和設定中繼存放區的秘訣。 如果您的工作區已針對 Unity 目錄自動啟用,則不需要建立中繼存放區,但本節中提供的資訊可能仍然很有用。 請參閱 自動啟用 Unity 目錄

設定中繼存放區的 提示:

  • 您應該為每個有 Azure Databricks 工作區的區域設定一個中繼存放區。

    連結至單一區域中繼存放區的每個工作區都可以存取中繼存放區所管理的數據。 如果您想要在中繼存放區之間共享數據,請使用 Delta Sharing

  • 每個中繼存放區都可以在雲端租用戶中設定受控記憶體位置(也稱為根記憶體),以用來儲存受控數據表和受控磁碟區。

    如果您選擇建立中繼存放區層級的受控位置,您必須確定沒有任何使用者可以直接存取它(也就是透過包含該位置的雲端帳戶)。 授與此儲存位置的存取權,可讓使用者略過 Unity 目錄中繼存放區中的訪問控制,並中斷稽核性。 基於這些原因,您的中繼存放區受控記憶體應該是專用容器。 您不應該重複使用也是 DBFS 根檔案系統或先前為 DBFS 根檔案系統的容器。

    您也可以選擇在目錄和架構層級定義受控記憶體,並覆寫中繼存放區的根記憶體位置。 在大部分情況下,Databricks 建議將受控數據儲存在目錄層級。

  • 您應該了解針對 Unity 目錄啟用的工作區中工作區管理員的許可權,並檢閱現有的工作區管理員指派。

    工作區管理員可以管理其工作區的作業,包括新增使用者和服務主體、建立叢集,以及將其他使用者委派為工作區管理員。 如果您的工作區已自動啟用 Unity 目錄,工作區管理員預設能夠建立目錄和其他許多 Unity 目錄物件。 自動啟用 Unity 目錄的工作區時,請參閱 工作區管理員許可權

    工作區系統管理員也能夠執行工作區管理工作,例如管理作業擁有權和檢視筆記本,這可能會間接存取 Unity 目錄中註冊的數據。 工作區系統管理員是您應該謹慎散發的特殊許可權角色。

  • 如果您使用工作區來隔離用戶數據存取,您可能想要使用工作區目錄系結。 工作區目錄系結可讓您依工作區界限限制目錄存取。 例如,您可以確定工作區管理員和使用者只能從生產工作區環境存取 中的prod_catalog生產資料。 prod_workspace 預設值是與連結至目前中繼存放區的所有工作區共享目錄。 請參閱 (選擇性) 將目錄指派給特定工作區

    如果您的工作區已針對 Unity 目錄自動啟用,則預先布建的工作區目錄預設會系結至您的工作區。

請參閱 建立 Unity 目錄中繼存放區

設定外部位置和記憶體認證

外部位置 可讓 Unity 目錄代表使用者讀取和寫入雲端租用戶的數據。 外部位置會定義為雲端記憶體的路徑,並 結合可用來存取該位置的記憶體認證

您可以使用外部位置在 Unity 目錄中註冊外部資料表和外部磁碟區。 這些實體的內容實際上位於使用者建立磁碟區或數據表時所參考的外部位置子路徑上。

記憶體認證會封裝長期雲端認證,以提供雲端記憶體的存取權。 它可以是 Azure 受控識別 (強烈建議使用)或服務主體。 使用 Azure 受控識別比使用服務主體有下列優點:

  • 受控識別不需要您維護認證或輪替秘密。
  • 如果您的 Azure Databricks 工作區已部署到您自己的 VNet(也稱為 VNet 插入),您可以連線到受記憶體防火牆保護的 Azure Data Lake 儲存體 Gen2 帳戶。

為了加強數據隔離,您可以將記憶體認證和外部位置系結至特定工作區。 請參閱 (選擇性) 將外部位置指派給特定工作區 ,以及 [選擇性] 將記憶體認證指派給特定工作區

提示

藉由結合記憶體認證和記憶體路徑,外部位置提供記憶體存取的強式控制和稽核性。 若要防止使用者略過 Unity 目錄所提供的存取控制,您應該確定您限制直接存取做為外部位置之任何容器的用戶數目。 基於相同的理由,如果記憶體帳戶也作為外部位置使用,您就不應該將記憶體帳戶掛接至 DBFS。 Databricks 建議您使用 目錄總管,將雲端儲存位置上的掛接移轉至 Unity 目錄中的外部位置。

如需管理外部位置的最佳做法清單,請參閱 管理外部位置、外部數據表和外部磁碟區。 另 請參閱建立外部位置以將雲端記憶體連線到 Azure Databricks

組織您的數據

Databricks 建議使用目錄來提供整個組織資訊架構的隔離。 這通常表示目錄會對應至軟體開發環境範圍、小組或業務單位。 如果您使用工作區作為數據隔離工具,例如,針對生產與開發環境使用不同的工作區,或是使用特定工作區來處理高度敏感數據,您也可以將目錄系結至特定工作區。 這可確保在適當的工作區中處理指定數據的所有處理。 請參閱 (選擇性) 將目錄指派給特定工作區

Unity 目錄目錄

架構(也稱為資料庫)是 Unity 目錄三層命名空間的第二層,並組織數據表、檢視和磁碟區。 您可以使用架構來組織和定義資產的許可權。

Unity 目錄所控管的物件可以 管理外部

  • Managed 物件 是在 Unity 目錄中建立資料對象的預設方式。

    Unity 目錄會管理這些安全性實體的生命週期和檔案配置。 您不應該使用 Azure Databricks 以外的工具,直接操作受控數據表或磁碟區中的檔案。

    受控數據表和磁碟區會儲存在受控記憶體,其可存在於任何指定數據表或磁碟區的中繼存放區、目錄或架構層級。 請參閱 數據在記憶體中實際分隔。

    當您想要為內容布建受控的位置時,受控數據表和磁碟區是一個方便的解決方案,不需要建立和管理外部位置和記憶體認證的額外負荷。

    受控數據表一律使用 Delta 數據表格式。

  • 外部對像是 安全性實體,其數據生命週期和檔案配置不受 Unity 目錄管理。

    外部磁碟區和數據表會在外部位置註冊,以存取雲端記憶體中已存在的大量檔案,而不需要數據複製活動。 當您有其他系統所產生的檔案,並想要讓它們暫存以供從 Azure Databricks 中存取,或當 Azure Databricks 以外的工具需要直接存取這些檔案時,請使用外部物件。

    外部數據表支援 Delta Lake 和其他許多數據格式,包括 Parquet、JSON 和 CSV。 Managed 和外部磁碟區都可以用來存取和儲存任意格式的檔案:數據可以結構化、半結構化或非結構化。

如需建立數據表和磁碟區的詳細資訊,請參閱 在 Unity 目錄中 建立數據表和 建立和使用磁碟區

管理外部位置、外部數據表和外部磁碟區

下圖代表單一雲端記憶體容器的文件系統階層,其中四個外部位置共用一個記憶體認證。

外部位置

在 Unity 目錄中設定外部位置之後,您可以在外部位置內的目錄上建立外部資料表和磁碟區。 然後,您可以使用 Unity 目錄來管理這些資料表和磁碟區的使用者和群組存取權。 這可讓您提供雲端記憶體容器中特定目錄和檔案的特定使用者或群組存取權。

注意

當您定義磁碟區時,磁碟區路徑下數據的雲端 URI 存取權是由磁碟區的許可權所控管。

使用外部位置的 建議

建議,用於授與外部位置的許可權:

  • 僅將建立外部位置的能力授與負責設定 Unity 目錄與雲端記憶體之間連線或信任數據工程師的系統管理員。

    外部位置可讓您從 Unity 目錄存取雲端記憶體中廣泛包含的位置,例如,整個貯體或容器 (abfss://) 或廣泛的子路徑 (abfss://my-container@storage-account.dfs.core.windows.netmy-container@storage-account.dfs.core.windows.net/path/to/subdirectory)。 其意圖是雲端系統管理員可以參與設定一些外部位置,然後將管理這些位置的責任委派給您組織中的 Azure Databricks 系統管理員。 然後,Azure Databricks 系統管理員可以藉由在外部位置下的特定前置詞註冊外部磁碟區或外部數據表,進一步將外部位置組織成具有更細微許可權的區域。

    由於外部位置如此包含,Databricks 建議只將許可權授 CREATE EXTERNAL LOCATION 與負責設定 Unity 目錄與雲端記憶體之間連線的系統管理員,或授與信任的數據工程師。 為了為其他使用者提供更細微的存取權,Databricks 建議在外部位置上註冊外部數據表或磁碟區,並使用磁碟區或數據表授與使用者對數據的存取權。 由於數據表和磁碟區是目錄和架構的子系,因此目錄或架構管理員對訪問許可權有最終控制權。

    您也可以將外部位置系結至特定工作區來控制對外部位置的存取。 請參閱 (選擇性) 將外部位置指派給特定工作區

  • 請勿將外部位置的一般 READ FILESWRITE FILES 許可權授與使用者。

    使用磁碟區的可用性時,用戶不應該將外部位置用於建立數據表、磁碟區或受控位置以外的任何位置。 它們不應該使用外部位置來存取數據科學或其他非表格式數據使用案例的路徑型存取。

    磁碟區支援使用 SQL 命令、dbutils、Spark API、REST API、Terraform 和使用者介面來流覽、上傳和下載檔案。 此外,磁碟區提供一個 FUSE 掛接,可在 下的 /Volumes/<catalog_name>/<schema_name>/<volume_name>/本機文件系統上存取。 FUSE 掛接可讓數據科學家和 ML 工程師存取檔案,如同許多機器學習或操作系統連結庫所需的檔案一樣。

    如果您必須授與外部位置的檔案直接存取權(例如,在使用者建立外部資料表或磁碟區之前探索雲端記憶體中的檔案),您可以授與 READ FILES。 授與 WRITE FILES 的使用案例很少見。

您應該使用外部位置來執行下列動作:

  • 使用 CREATE EXTERNAL VOLUMECREATE TABLE 命令註冊外部數據表和磁碟區。
  • 在建立特定前置詞的外部數據表或磁碟區之前,請先探索雲端記憶體中的現有檔案。 許可權 READ FILES 是前置條件。
  • 將位置註冊為目錄和架構的受控記憶體,而不是中繼存放區根貯體。 許可權 CREATE MANAGED STORAGE 是前置條件。

使用外部位置的更多建議:

  • 避免路徑重迭衝突:絕不會在外部位置的根目錄建立外部磁碟區或數據表。

    如果您在外部位置根目錄建立外部磁碟區或數據表,則無法在外部位置上建立任何其他外部磁碟區或數據表。 相反地,請在外部位置內的子目錄上建立外部磁碟區或數據表。

使用外部磁碟區的 建議

您應該使用外部磁碟區來執行下列動作:

  • 註冊外部系統所產生原始數據的登陸區域,以支援其在 ETL 管線和其他數據工程活動的早期階段進行處理。
  • 註冊擷取的暫存位置,例如,使用自動載入器、 COPY INTO或 CTAS (CREATE TABLE AS) 語句。
  • 當受控磁碟區不是選項時,為數據科學家、數據分析師和機器學習工程師提供檔案儲存位置,以作為其探勘數據分析和其他數據科學工作的一部分。
  • 讓 Azure Databricks 使用者可以存取由其他系統產生並儲存在雲端記憶體中的任意檔案,例如監視系統或 IoT 裝置所擷取的大型非結構化數據集合或 CI/CD 管線所擷取的大型非結構化數據集合,或從本機相依性管理系統或 CI/CD 管線導出的連結庫檔案(JAR 和 Python 轉輪檔案)。
  • 當受控磁碟區不是選項時,儲存作業數據,例如記錄或檢查點檔案。

使用外部磁碟區的更多建議:

  • Databricks 建議您從一個架構內的一個外部位置建立外部磁碟區。

提示

針對擷取將數據複製到另一個位置的擷取使用案例,例如使用自動載入器或使用 COPY INTO外部磁碟區。 當您想要以資料表的形式查詢數據時,請使用外部數據表,而不需要複製。

使用外部數據表的 建議

當建立受控數據表不是選項時,您應該使用外部數據表來支援雲端記憶體中所儲存數據的一般查詢模式。

使用外部資料表的更多建議:

  • Databricks 建議您使用每個架構一個外部位置來建立外部數據表。
  • Databricks 強烈建議您將數據表註冊為多個中繼存放區中的外部數據表,因為發生一致性問題的風險。 例如,一個中繼存放區中架構的變更將不會在第二個中繼存放區中註冊。 使用差異共用在中繼存放區之間共享數據。 請參閱 使用差異共用安全地共享數據。

設定存取控制

Unity Catalog 中的每個安全性實體物件都有擁有者。 建立對象的主體會成為其初始擁有者。 對象的擁有者具有物件的所有許可權,例如數據表上的 SELECT 和 MODIFY,以及將安全性實體物件許可權授與其他主體的許可權。 只有安全性實體對象的擁有者有權將該對象的許可權授與其他主體。 因此,最佳做法是將所有對象的擁有權設定為 負責管理物件授與的群組 。 擁有者和中繼存放區管理員可以將安全性實體對象的擁有權轉移給群組。 此外,如果物件包含在目錄內(例如數據表或檢視表),目錄和架構擁有者可以變更物件的擁有權。

Unity 目錄中的安全性實體物件是階層式物件,且權限會向下繼承。 這表示授與目錄或結構描述的權限,會自動將權限授與目錄或結構描述內的所有目前和未來物件。 如需詳細資訊,請參閱 繼承模型

若要從數據表或檢視讀取數據,用戶必須具有下列許可權:

  • SELECT 在數據表或檢視表上
  • USE SCHEMA 在擁有數據表的架構上
  • USE CATALOG 在擁有架構的目錄上

USE CATALOG 可讓被授出席者周遊目錄以存取其子物件,並 USE SCHEMA 讓被授出席者周遊架構以存取其子物件。 例如,若要從數據表中選取數據,用戶必須擁有 SELECT 該數據表的許可權和 USE CATALOG 其父目錄的許可權,以及 USE SCHEMA 其父架構的許可權。 因此,您可以使用此許可權,將數據命名空間區段的存取限制為特定群組。 常見的案例是為每個小組設定架構,其中只有該小組具有 USE SCHEMACREATE 架構。 這表示小組成員所產生的任何數據表都只能在小組內共用。

您可以使用下列 SQL 語法來保護對資料表的存取:

GRANT USE CATALOG ON CATALOG < catalog_name > TO < group_name >;
GRANT USE SCHEMA ON SCHEMA < catalog_name >.< schema_name >
TO < group_name >;
GRANT
SELECT
  ON < catalog_name >.< schema_name >.< table_name >;
TO < group_name >;

您可以使用次要架構中的動態檢視來保護資料行的存取,如下列 SQL 語法所示:

CREATE VIEW < catalog_name >.< schema_name >.< view_name > as
SELECT
  id,
  CASE WHEN is_account_group_member(< group_name >) THEN email ELSE 'REDACTED' END AS email,
  country,
  product,
  total
FROM
  < catalog_name >.< schema_name >.< table_name >;
GRANT USE CATALOG ON CATALOG < catalog_name > TO < group_name >;
GRANT USE SCHEMA ON SCHEMA < catalog_name >.< schema_name >.< view_name >;
TO < group_name >;
GRANT
SELECT
  ON < catalog_name >.< schema_name >.< view_name >;
TO < group_name >;

您可以使用次要架構中的動態檢視來保護資料列的存取,如下列 SQL 語法所示:

CREATE VIEW < catalog_name >.< schema_name >.< view_name > as
SELECT
  *
FROM
  < catalog_name >.< schema_name >.< table_name >
WHERE
  CASE WHEN is_account_group_member(managers) THEN TRUE ELSE total <= 1000000 END;
GRANT USE CATALOG ON CATALOG < catalog_name > TO < group_name >;
GRANT USE SCHEMA ON SCHEMA < catalog_name >.< schema_name >.< table_name >;
TO < group_name >;
GRANT
SELECT
  ON < catalog_name >.< schema_name >.< table_name >;
TO < group_name >;

您也可以使用資料列篩選和數據行遮罩,將數據表的安全存取權授與使用者。 如需詳細資訊,請參閱 使用數據列篩選和數據行遮罩來篩選敏感數據。

如需 Unity 目錄中所有許可權的詳細資訊,請參閱 在 Unity 目錄中管理許可權。

管理叢集組態

Databricks 建議使用叢集原則來限制根據一組規則設定叢集的能力。 叢集原則可讓您限制只建立已啟用 Unity 目錄的叢集存取。 使用叢集原則可減少可用的選擇,這可大幅簡化使用者的叢集建立程式,並確保他們能夠順暢地存取數據。 叢集原則也可讓您藉由限制每個叢集成本上限來控制成本。

為了確保訪問控制的完整性,並強制執行強式隔離保證,Unity 目錄會對計算資源施加安全性需求。 基於這個理由,Unity 目錄引進叢集存取模式的概念。 Unity 目錄預設為安全;如果未以適當的存取模式設定叢集,叢集就無法存取 Unity 目錄中的數據。 請參閱 Unity 目錄支援的計算和叢集存取模式。

Databricks 建議在共用叢集和單一使用者存取模式時使用共用存取模式,以進行自動化作業和機器學習工作負載。

下列 JSON 為具有共用存取模式的叢集提供原則定義:

{
"spark_version": {
    "type": "regex",
    "pattern": "1[0-1]\\.[0-9]*\\.x-scala.*",
    "defaultValue": "10.4.x-scala2.12"
},
"access_mode": {
    "type": "fixed",
    "value": "USER_ISOLATION",
    "hidden": true
}
}

下列 JSON 為具有單一使用者存取模式的自動化作業叢集提供原則定義:

{
"spark_version": {
    "type": "regex",
    "pattern": "1[0-1]\\.[0-9].*",
    "defaultValue": "10.4.x-scala2.12"
},
"access_mode": {
    "type": "fixed",
    "value": "SINGLE_USER",
    "hidden": true
},
"single_user_name": {
    "type": "regex",
    "pattern": ".*",
    "hidden": true
}
}

稽核存取

完整的數據控管解決方案需要稽核數據存取權,並提供警示和監視功能。 Unity 目錄會擷取針對中繼存放區執行的動作稽核記錄,這些記錄會作為 Azure Databricks 稽核記錄的一部分傳遞。

您可以使用系統數據表來存取帳戶的稽核記錄。 如需稽核記錄系統數據表的詳細資訊,請參閱 稽核記錄系統數據表參考

如需如何取得 Databricks Data Intelligence Platform 與 Databricks Data Intelligence Platform 相關重要事件的完整可見度的詳細資訊,請參閱 使用稽核記錄 監視 Databricks Data Intelligence Platform。

使用 Delta Sharing 安全地共享數據

差異共用 是由 Databricks 開發的開放通訊協定,用於保護與其他組織或其他組織或組織內其他部門的數據共享,無論其使用哪個運算平臺。 在中繼存放區上啟用差異共用時,Unity 目錄會執行 Delta Sharing 伺服器。

若要在中繼存放區之間共享數據,您可以利用 Databricks 對 Databricks Delta Sharing。 這可讓您從不同區域中的中繼存放區註冊數據表。 這些數據表會顯示為取用中繼存放區中的唯讀物件。 這些數據表可以像 Unity 目錄內的任何其他物件一樣獲得存取權。

當您使用 Databricks 對 Databricks Delta Sharing 在中繼存放區之間共用時,請記住存取控制僅限於一個中繼存放區。 如果安全性實體對象與數據表一樣,對其授與,且該資源會共用至帳戶內部中繼存放區,則來自來源的授與不會套用至目的地共用。 目的地共用必須設定自己的授與。

深入了解