Aracılığıyla paylaş


Satır filtrelerini ve sütun maskelerini kullanarak hassas tablo verilerini filtreleme

Önemli

Bu özellik Genel Önizlemededir.

Bu makalede, tablolarınızdaki hassas verileri filtrelemek için satır filtrelerini, sütun maskelerini ve eşleme tablolarını kullanmaya yönelik yönergeler ve örnekler sağlanır. Bu özellikler Unity Kataloğu gerektirir.

Satır filtreleri nedir?

Satır filtreleri, sorguların yalnızca filtre ölçütlerine uyan satırları döndürmesi için tabloya filtre uygulamanıza olanak sağlar. Satır filtrelerini SQL kullanıcı tanımlı işlevi (UDF) olarak uygularsınız. Python ve Scala UDF'leri de desteklenir, ancak yalnızca SQL UDF'lerinde sarmalandığında desteklenir.

Sütun maskeleri nedir?

Sütun maskeleri, bir tablo sütununa maskeleme işlevi uygulamanızı sağlar. Maskeleme işlevi sorgu çalışma zamanında değerlendirir ve hedef sütunun her başvurusunu maskeleme işlevinin sonuçlarıyla değiştirir. Çoğu kullanım örneğinde, sütun maskeleri özgün sütun değerinin döndürüleceğini veya çağıran kullanıcının kimliğine göre yeniden işlem yapılıp yapılmayacağını belirler. Sütun maskeleri, SQL UDF'leri olarak veya SQL UDF'lerinde sarmalanan Python veya Scala UDF'leri olarak yazılan ifadelerdir.

Her tablo sütununda yalnızca bir maskeleme işlevi uygulanabilir. Maskeleme işlevi, sütunun maskelenmemiş değerini giriş olarak alır ve bunun sonucu olarak maskelenmiş değeri döndürür. Maskeleme işlevinin dönüş değeri maskelenen sütunla aynı türde olmalıdır. Maskeleme işlevi ayrıca giriş parametresi olarak ek sütunlar alabilir ve bunları maskeleme mantığında kullanabilir.

Bu filtrelerle dinamik görünümler arasındaki fark nedir?

Dinamik görünümler, satır filtreleri ve sütun maskelerinin tümü tablolara karmaşık mantık uygulamanıza ve sorgu çalışma zamanında filtreleme kararlarını işlemenize olanak tanır.

Dinamik görünüm, bir veya daha fazla kaynak tablonun soyut, salt okunur bir görünümüdür. Kullanıcı, kaynak tablolara doğrudan erişmeden dinamik görünüme erişebilir. Dinamik görünüm oluşturma, kaynak tabloların veya aynı şemada bulunan diğer tabloların ve görünümlerin adıyla eşleşmemesi gereken yeni bir tablo adı tanımlar.

Öte yandan, bir satır filtresinin veya sütun maskesinin hedef tabloyla ilişkilendirilmesi, yeni tablo adları eklemeden ilgili mantığı doğrudan tablonun kendisine uygular. Sonraki sorgular özgün adını kullanarak hedef tabloya doğrudan başvurmaya devam edebilir.

Filtreler ve maskeler gibi dönüştürme mantığını salt okunur tablolara uygulamanız gerekiyorsa ve kullanıcıların farklı adlar kullanarak dinamik görünümlere başvurması kabul edilebilirse dinamik görünümleri kullanın. Delta Sharing kullanarak veri paylaşırken verileri filtrelemek istiyorsanız dinamik görünümleri kullanmanız gerekir. Belirli veriler üzerinde ifadeleri filtrelemek veya hesaplamak, ancak yine de kullanıcılara özgün adlarını kullanarak tablolara erişim sağlamak istiyorsanız satır filtrelerini ve sütun maskelerini kullanın.

Başlamadan önce

Tablolara satır filtreleri ve sütun maskeleri eklemek için aşağıdakilere sahip olmanız gerekir:

Aşağıdaki gereksinimleri de karşılamanız gerekir:

  • Tabloya satır filtreleri veya sütun maskeleri ekleyen bir işlev atamak için işlevde, USE SCHEMA şemada ve USE CATALOG üst katalogda ayrıcalığınız olmalıdırEXECUTE.
  • Yeni bir tablo oluştururken filtre veya maske eklemek için şemada ayrıca CREATE TABLE ayrıca sahip olmanız gerekir.
  • Varolan bir tabloyu değiştirerek filtre veya maske eklemek için, tablo sahibi olmanız veya tabloda ayrıcalığınız olması MODIFY gerekir.

Satır filtreleri veya sütun maskeleri olan bir tabloya erişmek için işlem kaynağınızın şu gereksinimleri karşılaması gerekir:

  • Databricks Runtime 12.2 LTS veya üzeri ya da SQL ambarı üzerinde paylaşılan erişim modu kümesi.

Satır filtresi uygulama

Satır filtresi oluşturmak için, filtre ilkesini tanımlamak üzere bir işlev (UDF) yazar ve bunu bir tabloya uygularsınız. Her tabloda yalnızca bir satır filtresi olabilir. Satır filtresi, her giriş parametresinin karşılık gelen tablonun bir sütununa bağlandığı sıfır veya daha fazla giriş parametresini kabul eder.

Katalog Gezgini veya SQL komutlarını kullanarak satır filtresi uygulayabilirsiniz. Katalog Gezgini yönergeleri, zaten bir işlev oluşturduğunuzu ve unity Kataloğu'na kaydedildiğini varsayar. SQL yönergelerinde satır filtresi işlevi oluşturma ve tabloya uygulama örnekleri yer alır.

Katalog Gezgini

  1. Azure Databricks çalışma alanınızda Katalog'a tıklayın Katalog simgesi .
  2. Filtrelemek istediğiniz tabloya göz atın veya tabloyu arayın.
  3. Genel Bakış sekmesinde Satır filtresi: Filtre ekle'ye tıklayın.
  4. Satır filtresi ekle iletişim kutusunda filtre işlevini içeren kataloğu ve şemayı seçin ve ardından işlevi seçin.
  5. Genişletilmiş iletişim kutusunda işlev tanımını görüntüleyin ve işlev deyimine dahil edilen sütunlarla eşleşen tablo sütunlarını seçin.
  6. Ekle'yi tıklatın.

Filtreyi tablodan kaldırmak için fx Satır filtresi'ne ve ardından Kaldır'a tıklayın.

SQL

Satır filtresi oluşturmak ve varolan bir tabloya eklemek için işlevini kullanarak ALTER TABLEkullanın CREATE FUNCTION ve uygulayın. kullanarak CREATE TABLEbir tablo oluşturduğunuzda da işlev uygulayabilirsiniz.

  1. Satır filtresini oluşturun:

    CREATE FUNCTION <function_name> (<parameter_name> <parameter_type>, ...)
    RETURN {filter clause whose output must be a boolean};
    
  2. Sütun adını kullanarak tabloya satır filtresi uygulayın:

    ALTER TABLE <table_name> SET ROW FILTER <function_name> ON (<column_name>, ...);
    

Ek söz dizimi örnekleri:

  • Tablodan satır filtresini kaldırma:

    ALTER TABLE <table_name> DROP ROW FILTER;
    
  • Satır filtresini değiştirme:

    Run a DROP FUNCTION statement to drop the existing function, or use CREATE OR REPLACE FUNCTION to replace it.
    
  • Satır filtrelerini silme:

    ALTER TABLE <table_name> DROP ROW FILTER;
    DROP FUNCTION <function_name>;
    

    Not

    İşlevi ALTER TABLE ... DROP ROW FILTER bırakmadan önce komutunu gerçekleştirmeniz gerekir. Bunu yapmazsanız tablo erişilemez durumda olur.

    Tabloya bu şekilde erişilemez hale gelirse, tabloyu değiştirin ve kullanarak ALTER TABLE <table_name> DROP ROW FILTER;yalnız bırakılmış satır filtresi başvuruyu bırakın.

Ayrıca bkz. ROW FILTER yan tümcesi.

Satır filtresi örnekleri

Bu örnek, bölgesindeki USgrubun admin üyeleri için geçerli olan SQL kullanıcı tanımlı bir işlev oluşturur.

Bu örnek işlev tabloya uygulandığında sales , grubun üyeleri tablodaki admin tüm kayıtlara erişebilir. İşlev yönetici olmayan bir tarafından çağrılırsa, RETURN_IF koşul başarısız olur ve region='US' ifade değerlendirilir ve tablo yalnızca bölgedeki kayıtları US gösterecek şekilde filtrelenmiş olur.

CREATE FUNCTION us_filter(region STRING)
RETURN IF(IS_ACCOUNT_GROUP_MEMBER('admin'), true, region='US');

İşlevi tabloya satır filtresi olarak uygulayın. Tablodan sales sonraki sorgular bir satır alt kümesi döndürür.

CREATE TABLE sales (region STRING, id INT);
ALTER TABLE sales SET ROW FILTER us_filter ON (region);

Satır filtresini devre dışı bırakın. Tablodaki sales gelecekteki kullanıcı sorguları, tablodaki tüm satırları döndürür.

ALTER TABLE sales DROP ROW FILTER;

deyiminin bir parçası CREATE TABLE olarak satır filtresi olarak işlevi uygulanmış bir tablo oluşturun. Tablodaki sales gelecekteki sorgular, her biri bir satır alt kümesi döndürür.

CREATE TABLE sales (region STRING, id INT)
WITH ROW FILTER us_filter ON (region);

Sütun maskesi uygulama

Sütun maskesi uygulamak için bir işlev (UDF) oluşturun ve bunu tablo sütununa uygulayın.

Katalog Gezgini'ne veya SQL komutlarını kullanarak sütun maskesi uygulayabilirsiniz. Katalog Gezgini yönergeleri, zaten bir işlev oluşturduğunuzu ve unity Kataloğu'na kaydedildiğini varsayar. SQL yönergelerinde sütun maskesi işlevi oluşturma ve bunu tablo sütununa uygulama örnekleri yer alır.

Katalog Gezgini

  1. Azure Databricks çalışma alanınızda Katalog'a tıklayın Katalog simgesi .
  2. Tabloya göz atın veya tabloyu arayın.
  3. Genel Bakış sekmesinde, sütun maskesini uygulamak istediğiniz satırı bulun ve Maske düzenleme simgesine Düzenle simgesi tıklayın.
  4. Sütun maskesi ekle iletişim kutusunda filtre işlevini içeren kataloğu ve şemayı seçin ve ardından işlevi seçin.
  5. Genişletilmiş iletişim kutusunda işlev tanımını görüntüleyin. İşlev maskelenen sütuna ek olarak herhangi bir parametre içeriyorsa, bu ek işlev parametrelerinin atamasını istediğiniz tablo sütunlarını seçin.
  6. Ekle'yi tıklatın.

Sütun maskesini tablodan kaldırmak için, tablo satırında fx Sütun maskesi'ne ve ardından Kaldır'a tıklayın.

SQL

Bir sütun maskesi oluşturmak ve bunu varolan bir tablo sütununa eklemek için kullanarak maskeleme işlevini ALTER TABLEkullanın CREATE FUNCTION ve uygulayın. kullanarak CREATE TABLEbir tablo oluşturduğunuzda da işlev uygulayabilirsiniz.

Maskeleme işlevini uygulamak için kullanırsınız SET MASK . yan tümcesinde MASK , Azure Databricks yerleşik çalışma zamanı işlevlerinden herhangi birini kullanabilir veya kullanıcı tanımlı diğer işlevleri çağırabilirsiniz. Yaygın kullanım örnekleri, işlevini çalıştıran çağıran kullanıcının kimliğini kullanarak veya kullanarak current_user( ) is_account_group_member( )üyesi olduğu grupları alarak incelemektir. Ayrıntılar için bkz . Sütun maskesi yan tümcesi ve Yerleşik işlevler.

  1. Sütun maskesi oluşturma:

    CREATE FUNCTION <function_name> (<parameter_name> <parameter_type>, ...)
    RETURN {expression with the same type as the first parameter};
    
  2. Sütun maskesini var olan bir tablodaki bir sütuna uygulayın:

    ALTER TABLE <table_name> ALTER COLUMN <col_name> SET MASK <mask_func_name> USING COLUMNS <additional_columns>;
    

Ek söz dizimi örnekleri:

  • Tablodaki bir sütundan sütun maskesi kaldırma:

    ALTER TABLE <table_name> ALTER COLUMN <column where mask is applied> DROP MASK;
    
  • Sütun maskesini değiştirme: DROP Mevcut işlevi veya kullanın CREATE OR REPLACE TABLE.

  • Sütun maskelerini silme:

    ALTER TABLE <table_name> ALTER COLUMN <column where mask is applied> DROP MASK;
    DROP FUNCTION <function_name>;
    

    Not

    İşlevi ALTER TABLE bırakmadan önce komutunu gerçekleştirmeniz gerekir, aksi takdirde tablo erişilemez durumda olur.

    Tabloya bu şekilde erişilemez hale gelirse, tabloyu değiştirin ve kullanarak ALTER TABLE <table_name> ALTER COLUMN <column where mask is applied> DROP MASK;yalnız bırakılmış maske başvurusu başvuruyu bırakın.

Sütun maskesi örnekleri

Bu örnekte, yalnızca grubun üyesi HumanResourceDept olan kullanıcıların bu sütundaki ssn değerleri görüntüleyebilmesi için sütunu maskeleyen kullanıcı tanımlı bir işlev oluşturursunuz.

CREATE FUNCTION ssn_mask(ssn STRING)
  RETURN CASE WHEN is_member('HumanResourceDept') THEN ssn ELSE '***-**-****' END;

Yeni işlevi tabloya sütun maskesi olarak uygulayın. Tabloyu oluştururken veya sonrasında sütun maskesini ekleyebilirsiniz.

--Create the `users` table and apply the column mask in a single step:

CREATE TABLE users (
  name STRING,
  ssn STRING MASK ssn_mask);
--Create the `users` table and apply the column mask after:

CREATE TABLE users
  (name STRING, ssn STRING);

ALTER TABLE users ALTER COLUMN ssn SET MASK ssn_mask;

Sorgulayan kullanıcı grubun üyesi HumanResourceDept olmadığında bu tablodaki sorgular artık maskelenmiş ssn sütun değerleri döndürmektedir:

SELECT * FROM users;
  James  ***-**-****

Sorguların sütundaki özgün değerleri döndürmesi için sütun maskesini ssn devre dışı bırakmak için:

ALTER TABLE users ALTER COLUMN ssn DROP MASK;

Eşleme tablolarını kullanarak erişim denetimi listesi oluşturma

Satır düzeyi güvenlik elde etmek için bir eşleme tablosu (veya erişim denetimi listesi) tanımlamayı göz önünde bulundurun. Her eşleme tablosu, özgün tablodaki hangi veri satırlarının belirli kullanıcılar veya gruplar tarafından erişilebilir olduğunu kodlayan kapsamlı bir eşleme tablosudur. Eşleme tabloları, doğrudan birleşimler aracılığıyla olgu tablolarınızla basit tümleştirme sunduğundan yararlıdır.

Bu metodoloji, özel gereksinimleri olan birçok kullanım örneğinin ele alınmasında yararlı olduğunu kanıtlar. Örnekler şunları içerir:

  • Belirli kullanıcı grupları için farklı kurallar kullanılırken oturum açmış kullanıcıya göre kısıtlamalar getirme.
  • Farklı kural kümeleri gerektiren kuruluş yapıları gibi karmaşık hiyerarşiler oluşturma.
  • Dış kaynak sistemlerden karmaşık güvenlik modellerini çoğaltma.

Eşleme tablolarını bu şekilde benimseyerek, bu zorlu senaryoları etkili bir şekilde ele alabilir ve sağlam satır düzeyi ve sütun düzeyinde güvenlik uygulamaları sağlayabilirsiniz.

Eşleme tablosu örnekleri

Geçerli kullanıcının listede olup olmadığını denetlemek için eşleme tablosu kullanın:

USE CATALOG main;

Yeni bir eşleme tablosu oluşturun:

DROP TABLE IF EXISTS valid_users;

CREATE TABLE valid_users(username string);
INSERT INTO valid_users
VALUES
  ('fred@databricks.com'),
  ('barney@databricks.com');

Yeni filtre oluşturma:

Not

Çağıran olarak çalışan kullanıcı bağlamını denetleyen işlevler (örneğin, CURRENT_USER ve IS_MEMBER işlevleri) dışında tüm filtreler, tanımlayıcının haklarıyla çalışır.

Bu örnekte işlev, geçerli kullanıcının valid_users tabloda olup olmadığını denetler. Kullanıcı bulunursa işlev true döndürür.

DROP FUNCTION IF EXISTS row_filter;

CREATE FUNCTION row_filter()
  RETURN EXISTS(
    SELECT 1 FROM valid_users v
    WHERE v.username = CURRENT_USER()
);

Aşağıdaki örnek, tablo oluşturma sırasında satır filtresini uygular. Filtreyi daha sonra deyimini ALTER TABLE kullanarak da ekleyebilirsiniz. Tablonun tamamına uygulanırken söz dizimini ON () kullanın. Belirli bir satır için kullanın ON (row);.

DROP TABLE IF EXISTS data_table;

CREATE TABLE data_table
  (x INT, y INT, z INT)
  WITH ROW FILTER row_filter ON ();

INSERT INTO data_table VALUES
  (1, 2, 3),
  (4, 5, 6),
  (7, 8, 9);

Tablodan verileri seçin. Bu yalnızca kullanıcı tablodaysa valid_users veri döndürmelidir.

SELECT * FROM data_table;

Sütun değerlerinden bağımsız olarak tablodaki tüm satırları görüntülemek için her zaman erişimi olması gereken hesaplardan oluşan bir eşleme tablosu oluşturun:

CREATE TABLE valid_accounts(account string);
INSERT INTO valid_accounts
VALUES
  ('admin'),
  ('cstaff');

Şimdi, satırdaki tüm sütunların değerleri beşten küçükse veya çağıran kullanıcı yukarıdaki eşleme tablosunun bir üyesiyse döndüren true bir SQL UDF oluşturun.

CREATE FUNCTION row_filter_small_values (x INT, y INT, z INT)
  RETURN (x < 5 AND y < 5 AND z < 5)
  OR EXISTS(
    SELECT 1 FROM valid_accounts v
    WHERE IS_ACCOUNT_GROUP_MEMBER(v.account));

Son olarak, SQL UDF'yi tabloya satır filtresi olarak uygulayın:

ALTER TABLE data_table SET ROW FILTER row_filter_small_values ON (x, y, z);

Desteklenen özellikler ve biçimler

  • SQL iş yükleri için Databricks SQL ve Databricks not defterleri desteklenir.

  • Ayrıcalıklara sahip MODIFY kullanıcıların DML komutları desteklenir. Filtreler ve maskeler ve DELETE deyimleri tarafından UPDATE okunan verilere uygulanır ve yazılan verilere (dahil) INSERTuygulanmaz.

  • Desteklenen veri biçimleri:

    • Yönetilen ve dış tablolar için Delta ve Parquet.
    • Lakehouse Federation kullanılarak Unity Kataloğu'nda kayıtlı yabancı tablolar için birden çok başka veri biçimi.
  • SQL, Python ve Scala UDF'leri, Unity Kataloğu'nda kayıtlı oldukları sürece satır filtresi veya sütun maskesi işlevleri olarak desteklenir. Python ve Scala UDF'leri bir SQL UDF'de sarmalanmalıdır.

  • Sütun maskeleri veya satır filtreleri olan tablolardaki görünümler desteklenir.

  • Delta Lake değişiklik veri akışları, şema hedef tabloya uygulanan satır filtreleri ve sütun maskeleriyle uyumlu olduğu sürece desteklenir.

  • MERGE deyimleri, kaynak tablolar, hedef tablolar veya her ikisi de satır filtreleri ve sütun maskeleri kullandığında desteklenir. Bu, basit alt sorgular içeren satır filtresi işlevlerine sahip tabloları içerir, ancak aşağıdaki bölümde listelenen sınırlamalar vardır.

  • Databricks SQL gerçekleştirilmiş görünümleri ve Databricks SQL akış tabloları satır filtrelerini ve sütun maskelerini destekler (Genel Önizleme):

    • Databricks SQL Gerçekleştirilmiş görünümüne veya akış tablosuna satır filtreleri ve sütun maskeleri ekleyebilirsiniz.
    • Satır filtreleri ve sütun maskeleri içeren tablolarda Databricks SQL Gerçekleştirilmiş görünümlerini veya akış tablolarını tanımlayabilirsiniz.

Sınırlama

  • 12.2 LTS'nin altındaki Databricks Runtime sürümleri satır filtrelerini veya sütun maskelerini desteklemez. Bu çalışma zamanları güvenli bir şekilde başarısız olur; başka bir deyişle, bu çalışma zamanlarının desteklenmeyen sürümlerinden tablolara erişmeye çalışırsanız veri döndürülemez.
  • Delta Live Tables'da bildirilen gerçekleştirilmiş görünümler ve akış tabloları satır filtrelerini veya sütun maskelerini desteklemez.
  • Delta Paylaşımı satır düzeyi güvenlik veya sütun maskeleriyle çalışmaz.
  • Zaman yolculuğu satır düzeyi güvenlik veya sütun maskeleriyle çalışmaz.
  • Tablo örnekleme satır düzeyi güvenlik veya sütun maskeleriyle çalışmaz.
  • İlkeleri olan tablolardaki dosyalara yol tabanlı erişim desteklenmez.
  • Döngüsel bağımlılıkları özgün ilkelere geri döndüren satır filtresi veya sütun maskesi ilkeleri desteklenmez.
  • Derin ve sığ klonlar desteklenmez.
  • MERGE deyimleri iç içe yerleştirme, toplamalar, pencereler, sınırlar veya belirleyici olmayan işlevler içeren satır filtresi ilkelerine sahip tabloları desteklemez.
  • Delta Lake API'leri desteklenmez.
  • SHOW CREATE TABLE gerçekleştirilmiş görünümlerde ve akış tablolarında satır filtresi ve sütun maskesi bilgileri görüntülenmez.

Tek kullanıcılı işlem sınırlaması

Tek kullanıcılı bir kümeden eriştiğiniz hiçbir tabloya satır filtreleri veya sütun maskeleri eklemeyin. Bu genellikle İş Akışları (işler) bağlamında yapılır. Genel önizleme sırasında, bir filtre veya maske uygulanmışsa tek bir kullanıcı kümesindeki tablolara erişemezsiniz.