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.

Satır filtreleri nedir?

Satır filtreleri tabloya filtre uygulamanıza olanak sağlar; böylece sonraki sorgular yalnızca filtre koşulunun doğru olarak değerlendirildiği satırları döndürür. Satır filtresi, SQL kullanıcı tanımlı işlevi (UDF) olarak uygulanır.

Satır filtresi oluşturmak için, önce filtre ilkesini tanımlamak üzere bir SQL UDF yazın ve sonra bunu deyimi olan bir ALTER TABLE tabloya uygulayın. Alternatif olarak, ilk CREATE TABLE deyimde bir tablo için satır filtresi belirtebilirsiniz. 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.

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

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 filtresi 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.

Hem dinamik görünümler hem de satır filtreleri ve sütun maskeleri tablolara karmaşık mantık uygulamanıza ve sorgu çalışma zamanında filtreleme kararlarını işlemenize olanak tanır.

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. 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.

Satır Filtresi Söz Dizimi

Satır filtresi oluşturmak ve varolan bir tabloya eklemek için aşağıdaki söz dizimini kullanın:

Satır filtresini oluşturun:

CREATE FUNCTION <function_name> (<parameter_name> <parameter_type>, ...)
RETURN {filter clause whose output must be a boolean};

Tabloya satır filtresi uygulama:

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

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, aksi takdirde 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.

Satır filtresi örnekleri

bölgedeki USgrubun admin üyelerine uygulanan bir SQL kullanıcı tanımlı işlevi oluşturun.

Bu işlevle, 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;

CREATE TABLE deyiminin bir parçası 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 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ğerlendirilir ve hedef sütunun her başvurusu maskeleme işlevinin sonuçlarıyla değiştirilir. Ç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 yazılmış ifadelerdir.

Her tablo sütununda isteğe bağlı olarak 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.

Sütun maskeleri uygulamak için bir işlev oluşturun ve deyimini kullanarak ALTER TABLE tablo sütununa uygulayın. Alternatif olarak, tabloyu oluştururken maskeleme işlevini uygulayabilirsiniz.

Sütun maskesi söz dizimi

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 arasında işlevini current_user( ) çalıştıran çağıran kullanıcının kimliğinin veya hangi grupların kullanılarak is_account_group_member( )üyesi olduğunu incelemek yer alır.

Sütun maskesi oluşturma:

CREATE FUNCTION <function_name> (<parameter_name> <parameter_type>, ...)
RETURN {expression with the same type as the first parameter};

Mevcut tablodaki bir sütuna sütun maskesi uygulama:

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

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ınCREATE 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);

Desteklenebilirlik

  • SQL iş yükleri için Databricks SQL ve Databricks not defterleri desteklenir.
  • MODIFY ayrıcalıklarına sahip kullanıcıların DML komutları desteklenir. Filtreler ve maskeler UPDAT'ler ve DELET'ler tarafından okunan verilere uygulanır ve yazılan verilere (INSERTed verileri dahil) uygulanmaz.
  • Desteklenen biçimler: Delta ve Parquet. Parquet yalnızca yönetilen veya dış tablolar için desteklenir.
  • 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 uygulanabilecek satır filtreleri ve sütun maskeleriyle uyumlu olduğu sürece desteklenir.
  • Yabancı tablolar desteklenir.

Sınırlamalar

  • 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 Tabloları gerçekleştirilmiş görünümler ve akış tabloları satır filtrelerini veya sütun maskelerini desteklemez.
  • Python ve Scala UDF'leri doğrudan satır filtresi veya sütun maskesi işlevleri olarak desteklenmez. Ancak, tanımları kalıcı olarak katalogda depolandığı sürece (başka bir deyişle, oturum için geçici değil) SQL UDF'lerinde bunlara başvurmak mümkündür.
  • 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 şu anda desteklenmiyor.
  • Döngüsel bağımlılıkları özgün ilkelere geri döndüren satır filtresi veya sütun maskesi ilkeleri desteklenmez.
  • MERGE ve sığ klonlar desteklenmez.

Tek kullanıcı kümeleri sınırlaması

Tek kullanıcı kümelerinden eriştiğiniz hiçbir tabloya satır filtreleri veya sütun maskeleri eklemeyin. Bu genellikle Azure Databricks İşleri bağlamında yapılır. Genel önizleme sırasında, bir filtre veya maske uygulandıktan sonra tabloya tek bir kullanıcı kümesinden erişemezsiniz.