本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Lake Formation 中的資料篩選和儲存格層級安全性
當您在資料目錄資料表上授予 Lake Formation 許可時,您可以包含資料篩選規格,以限制對查詢結果和與 Lake Formation 整合的引擎中特定資料的存取。Lake Formation 使用資料篩選來實現資料欄層級安全性、資料列層級安全性和儲存格層級安全性。如果您的來源資料包含巢狀結構,您可以在巢狀資料欄上定義和套用資料篩選條件。
透過 Lake Formation 的資料篩選功能,您可以實作下列層級的資料安全。
資料欄層級安全
授予資料目錄資料表具有資料欄層級安全性 (資料欄篩選) 的許可,可讓使用者僅檢視其在資料表中可存取的特定資料欄和巢狀資料欄。考慮在大型多區域通訊公司的多個應用程式中使用的persons
資料表。使用資料目錄資料表的授予許可可能會限制不在人力資源部門工作的使用者查看個人身分資訊 (PII),例如社會安全號碼或出生日期。您也可以定義安全政策,並僅授予對巢狀資料欄部分子結構的存取權。
資料列層級安全性
授予資料目錄資料表具有資料列層級安全性 (資料列篩選) 的許可,可讓使用者僅檢視資料表中可存取的特定資料列。篩選是以一或多個資料欄的值為基礎。您可以在定義資料列篩選條件表達式時包含巢狀資料欄結構。例如,如果通訊公司的不同區域辦公室有自己的人力資源部門,您可以將人力資源員工可以查看的人員記錄限制為僅對其區域中的員工記錄。
儲存格層級安全性
儲存格層級安全性結合了資料列篩選和資料欄篩選,以提供高度彈性的許可模型。如果您將資料表的資料列和資料欄視作網格,則使用儲存格層級安全性,可以限制存取網格的兩個維度的任何位置的個別元素 (儲存格)。也就是說,您可以根據資料列限制對不同資料欄的存取。下圖說明了這一點,其中限制資料欄會著色。
繼續人員資料表的範例,您可以在儲存格層級建立資料篩選條件,如果資料列的國家資料欄設定為「英國」,則限制對街道地址資料欄的存取,但如果資料列的國家資料欄設定為「美國」,則允許存取街道地址資料欄。
篩選條件僅適用於讀取操作。因此,您只能使用篩選條件授予 SELECT
Lake Formation 許可。
巢狀資料欄的儲存格層級安全性
Lake Formation 可讓您在巢狀資料欄上定義和套用具有儲存格層級安全性的資料篩選條件。不過,Amazon Athena、Amazon EMR和 Amazon Redshift Spectrum 等整合分析引擎支援對具有資料列和資料欄層級安全性的 Lake Formation 受管巢狀資料表執行查詢。
如需限制的詳細資訊,請參閱資料篩選限制。
Lake Formation 中的資料篩選條件
您可以建立資料篩選條件,來實作資料欄層級、資料列層級和儲存格層級安全性。當您在資料表上授予 SELECT
Lake Formation 許可時,您可以選擇資料篩選條件。如果您的資料表包含巢狀資料欄結構,您可以定義資料篩選條件,方法是包含或排除子資料欄,並在巢狀屬性上定義資料列層級篩選條件表達式。
每個資料篩選條件都屬於 Data Catalog 中的特定資料表。資料篩選條件包含下列資訊:
-
篩選器名稱
-
與篩選條件相關聯的IDs資料表目錄
-
資料表名稱
-
包含資料表的資料庫名稱
-
資料欄規格 – 要包含或排除在查詢結果中的資料欄和巢狀資料欄 (具有
struct
資料類型) 的清單。 -
資料列篩選條件表達式 – 指定要包含在查詢結果中的資料列的表達式。在某些限制下,表達式具有 PartiQL 語言中
WHERE
子句的語法。若要指定所有列,請在主控台中選擇存取列層級存取下的所有列,或在API通話AllRowsWildcard
中使用 。如需資料列篩選條件表達式中支援內容的詳細資訊,請參閱 資料列篩選條件表達式中的 PartiQL 支援。
您取得的篩選層級取決於資料篩選條件的填入方式。
-
如果您指定「所有資料行」萬用字元並提供資料列篩選條件運算式,則只會建立資料列層級安全性 (資料列篩選)。
-
當您包含或排除特定資料欄和巢狀資料欄,並使用全列萬用字元指定「所有資料列」時,您只會建立資料欄層級的安全性 (資料欄篩選)。
-
如果包含或排除特定資料行並提供資料列篩選條件運算式,則會建立儲存格層級安全性 (儲存格篩選)。
下列 Lake Formation 主控台的螢幕擷取畫面顯示執行儲存格層級篩選的資料篩選條件。對於資料表的查詢orders
,它會限制對customer_name
資料欄的存取,而查詢結果只會傳回product_type
資料欄包含「製藥」的資料列。
請注意,使用單一引號來括住字串常值 'pharma'
。
您可以使用 Lake Formation 主控台來建立此資料篩選條件,或者您可以將下列請求物件提供給 CreateDataCellsFilter
API操作。
{ "Name": "restrict-pharma", "DatabaseName": "sales", "TableName": "orders", "TableCatalogId": "111122223333", "RowFilter": {"FilterExpression": "product_type='pharma'"}, "ColumnWildcard": { "ExcludedColumnNames": ["customer_name"] } }
您可以建立資料表所需的任意數量的資料篩選條件。若要這樣做,您需要具有資料表上授予選項的SELECT
許可。根據預設,Data Lake 管理員具有在該帳戶的所有資料表上建立資料篩選條件的許可。您通常只會在將資料表上的許可授予委託人時,使用可能的資料篩選條件子集。例如,您可以為資料篩選條件的orders
資料表建立第二個 row-security-only 資料篩選條件。請參閱上述螢幕擷取畫面,您可以選擇存取所有資料欄選項,並包含 的資料列篩選條件表達式product_type<>pharma
。此資料篩選條件的名稱可以是 no-pharma
。它限制對資料product_type
欄設定為「製藥」的所有資料列的存取。
此資料篩選條件CreateDataCellsFilter
API的操作請求物件如下。
{ "Name": "no-pharma", "DatabaseName": "sales", "TableName": "orders", "TableCatalogId": "111122223333", "RowFilter": {"FilterExpression": "product_type<>'pharma'"}, "ColumnNames": ["customer_id", "customer_name", "order_num" "product_id", "purchase_date", "product_type", "product_manufacturer", "quantity", "price"] }
然後,您可以將orders
資料表SELECT
上的restrict-pharma
資料篩選授予管理使用者,並將orders
資料表SELECT
上的no-pharma
資料篩選授予非管理使用者。對於醫療保健產業的使用者,您會在orders
資料表SELECT
上授予 ,以完整存取所有資料列和資料欄 (沒有資料篩選條件),或者可能還具有另一個限制存取定價資訊的資料篩選條件。
在資料篩選條件內指定資料欄層級和資料列層級安全性時,您可以包含或排除巢狀資料欄。在下列範例中,使用合格的資料欄名稱 (以雙引號包裝) 指定對 product.offer
欄位的存取。這對於巢狀欄位很重要,以避免資料欄名稱包含特殊字元時出現錯誤,並維持與最上層資料欄層級安全定義的向後相容性。
{ "Name": "example_dcf", "DatabaseName": "example_db", "TableName": "example_table", "TableCatalogId": "111122223333", "RowFilter": { "FilterExpression": "customer.customerName <> 'John'" }, "ColumnNames": ["customer", "\"product\".\"offer\""] }