Bagikan melalui


Membuat tampilan dinamis

Di Unity Catalog, Anda dapat menggunakan tampilan dinamis untuk mengonfigurasi kontrol akses terperinci, termasuk:

  • Keamanan pada tingkat kolom atau baris.
  • Penyamaran data.

Katalog Unity memperkenalkan fungsi berikut, yang memungkinkan Anda membatasi secara dinamis pengguna mana yang dapat mengakses baris, kolom, atau rekaman dalam tampilan:

  • current_user(): Mengembalikan alamat email pengguna saat ini.
  • is_account_group_member(): Mengembalikan TRUE jika pengguna saat ini adalah anggota grup tingkat akun tertentu. Direkomendasikan untuk digunakan dalam tampilan dinamis terhadap data Katalog Unity.
  • is_member(): Mengembalikan TRUE jika pengguna saat ini adalah anggota grup tingkat-ruang kerja tertentu. Fungsi ini disediakan untuk kompatibilitas dengan metastore Apache Hive yang ada. Hindari menggunakannya untuk tampilan data Katalog Unity, karena tidak melakukan evaluasi terhadap keanggotaan grup di tingkat akun.

Azure Databricks merekomendasikan agar Anda tidak memberi pengguna akses untuk membaca tabel dan view yang dirujuk dalam view.

Contoh berikut mengilustrasikan cara membuat tampilan dinamis di Unity Catalog.

Sebelum Anda mulai

Untuk membuat atau membaca tampilan dinamis, persyaratan sama dengan tampilan standar, kecuali untuk persyaratan komputasi. Anda harus menggunakan salah satu sumber daya komputasi berikut:

  • Gudang SQL.
  • Komputasi dengan mode akses standar (sebelumnya mode akses bersama).
  • Komputasi dengan mode akses khusus (sebelumnya mode akses pengguna tunggal) pada Databricks Runtime 15.4 LTS atau lebih tinggi.

Anda tidak dapat membaca tampilan dinamis menggunakan komputasi khusus pada Databricks Runtime 15.3 atau di bawahnya.

Untuk memanfaatkan pemfilteran data yang disediakan dalam Databricks Runtime 15.4 LTS ke atas, Anda juga harus memverifikasi bahwa ruang kerja Anda diaktifkan untuk komputasi tanpa server, karena fungsionalitas pemfilteran data yang mendukung tampilan dinamis berjalan pada komputasi tanpa server. Oleh karena itu, Anda mungkin dikenakan biaya untuk sumber daya komputasi tanpa server saat Anda menggunakan komputasi khusus untuk membaca tampilan dinamis. Lihat Kontrol akses halus pada komputasi khusus.

Izin tingkat kolom

Dengan tampilan dinamis, Anda dapat membatasi kolom yang dapat diakses pengguna atau grup tertentu. Dalam contoh berikut, hanya anggota grup auditors yang dapat mengakses alamat email dari tabel sales_raw. Selama analisis kueri, Apache Spark mengganti pernyataan CASE dengan string harfiah REDACTED atau konten aktual kolom alamat email. Kolom lain dikembalikan seperti biasa. Strategi ini tidak berdampak negatif terhadap performa kueri.

-- Alias the field 'email' to itself (as 'email') to prevent the
-- permission logic from showing up directly in the column name results.
CREATE VIEW sales_redacted AS
SELECT
  user_id,
  CASE WHEN
    is_account_group_member('auditors') THEN email
    ELSE 'REDACTED'
  END AS email,
  country,
  product,
  total
FROM sales_raw

Izin baris

Dengan tampilan dinamis, Anda dapat menentukan izin hingga ke tingkat baris atau bidang. Dalam contoh berikut, hanya anggota grup managers yang dapat melihat jumlah transaksi ketika melebihi $1.000.000. Hasil pencocokan tidak ditampilkan kepada pengguna lain.

CREATE VIEW sales_redacted AS
SELECT
  user_id,
  country,
  product,
  total
FROM sales_raw
WHERE
  CASE
    WHEN is_account_group_member('managers') THEN TRUE
    ELSE total <= 1000000
  END;

Penyamaran data

Karena tampilan di Unity Catalog menggunakan Spark SQL, Anda dapat menerapkan masking data tingkat lanjut dengan menggunakan ekspresi SQL yang lebih kompleks dan ekspresi reguler. Dalam contoh berikut, semua pengguna dapat menganalisis domain email, tetapi hanya anggota grup yang auditors dapat melihat seluruh alamat email pengguna.

-- The regexp_extract function takes an email address such as
-- user.x.lastname@example.com and extracts 'example', allowing
-- analysts to query the domain name.

CREATE VIEW sales_redacted AS
SELECT
  user_id,
  region,
  CASE
    WHEN is_account_group_member('auditors') THEN email
    ELSE regexp_extract(email, '^.*@(.*)$', 1)
  END
  FROM sales_raw