Masking data dinamis di pool SQL khusus Azure Synapse Analytics

Azure Synapse Analytics mendukung dynamic data masking (DDM) dalam pool SQL khusus. Masking data dinamis membatasi paparan data sensitif dengan menutupinya kepada pengguna yang tidak memiliki hak istimewa.

Masking data dinamis membantu mencegah akses tidak sah ke data sensitif dengan memungkinkan pelanggan untuk menunjuk berapa banyak data sensitif untuk diungkapkan dengan efek minimal pada lapisan aplikasi. Ini adalah fitur keamanan berbasis kebijakan yang menyembunyikan data sensitif dalam kumpulan hasil kueri di atas bidang database yang ditunjuk, sementara data dalam database tidak diubah.

Misalnya, perwakilan layanan di pusat panggilan dapat mengidentifikasi penelepon dengan mengonfirmasi beberapa karakter alamat email mereka, tetapi alamat email lengkap tidak boleh diungkapkan kepada perwakilan layanan. Aturan masking dapat ditentukan yang menutupi seluruh alamat email dalam kumpulan hasil kueri apa pun. Sebagai contoh lain, masking data yang sesuai dapat didefinisikan untuk melindungi data pribadi, sehingga pengembang dapat meminta lingkungan produksi untuk tujuan pemecahan masalah tanpa melanggar peraturan kepatuhan.

Note

Masking data dinamis didukung di pool SQL khusus Azure Synapse, tetapi tidak didukung untuk pool Apache Spark dan pool SQL serverless.

Dasar-dasar masking data dinamis

Anda mengatur kebijakan penyamaran data dinamis di portal Azure dengan memilih panel Dynamic Data Masking di bawah Keamanan di panel konfigurasi Anda. Anda juga dapat menggunakan Transact-SQL (T-SQL), seperti pada contoh izin Granular dalam artikel ini. Untuk informasi selengkapnya, lihat Masking data dinamis.

Kebijakan Masking Data Dinamis

  • Pengguna SQL yang dikecualikan dari masking: Sekumpulan pengguna SQL, yang dapat mencakup identitas dari ID Microsoft Entra, yang menerima data tanpa penyamaran dalam hasil kueri SQL. Pengguna dengan hak administratif seperti admin server, admin Microsoft Entra, dan peran db_owner dapat melihat data asli tanpa masker apa pun. (Catatan: Ini juga berlaku untuk peran sysadmin di SQL Server)

  • Aturan masking: Sekumpulan aturan yang menentukan bidang yang ditunjuk untuk diselubungi dan fungsi masking yang digunakan. Bidang yang ditunjuk dapat didefinisikan menggunakan nama skema database, nama tabel, dan nama kolom.

  • Fungsi masking: Sekumpulan metode yang mengontrol paparan data untuk skenario yang berbeda.

    Fungsi penyamaran Logika penyembunyian
    Default Masking penuh sesuai dengan jenis data bidang yang ditunjuk

    Gunakan XXXX (atau kurang) jika ukuran field kurang dari 4 karakter untuk tipe data string (nchar, nvarchar).
    Gunakan nilai nol untuk jenis data numerik (bigint, bit, desimal, int, uang, numerik, smallint, smallmoney, tinyint, float, real).
    *Digunakan 1900-01-01 untuk tipe data tanggal/waktu (date, datetime2, datetime, datetimeoffset, smalldatetime, time).
    Kartu kredit Metode masking, yang memaparkan empat digit terakhir dari bidang yang ditunjuk dan menambahkan string konstanta sebagai awalan dalam bentuk kartu kredit.

    XXXX-XXXX-XXXX-1234
    Email Metode masking, yang memaparkan huruf pertama dan mengganti domain dengan XXX.com menggunakan awalan string konstan dalam bentuk alamat email.

    aXX@XXXX.com
    Angka Acak Metode masking, yang menghasilkan angka acak sesuai dengan batas yang dipilih dan tipe data aktual. Jika batas yang ditentukan sama, maka fungsi masking adalah angka konstan.
    Teks khusus Metode masking, yang mengekspos karakter pertama dan terakhir dan menambahkan string padding kustom di tengah. Jika string asli lebih pendek dari awalan dan akhiran yang terbuka, hanya string padding yang digunakan.

    prefix[padding]suffix
    Tanggalwaktu Mengaktifkan masking terperinci untuk kolom tanggal/waktu, yaitu datetime, datetime2, date, time, datetimeoffset, dan smalldatetime. Anda dapat menutupi komponen tertentu seperti tahun (datetime("Y")), bulan (datetime("M")), hari (datetime("D")), jam (datetime("h")), menit (datetime("m")), atau detik (datetime("s")). Anda menerapkan fungsi ini menggunakan T-SQL.

    Contohnya:

    - Masker tahun: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("Y")').
    - Bulan masker: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("M")').
    - Mask menit: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("m")').

Mesin rekomendasi DDM menandai bidang tertentu dari database Anda sebagai bidang yang berpotensi sensitif, yang mungkin merupakan kandidat yang baik untuk masking. Di panel Dynamic Data Masking di portal, Anda melihat kolom yang direkomendasikan untuk database Anda. Pilih Tambahkan Masker untuk satu atau beberapa kolom, lalu pilih fungsi masking yang sesuai dan pilih Simpan, untuk menerapkan masker untuk bidang ini.

Mengelola penyamaran data dinamis menggunakan T-SQL

Menyiapkan masking data dinamis untuk database Anda menggunakan cmdlet PowerShell

Kebijakan masking data

Aturan masking data

Siapkan masking data dinamis untuk database Anda menggunakan API REST

Anda dapat menggunakan REST API untuk mengelola kebijakan dan aturan masking data secara terprogram. REST API yang dipublikasikan mendukung operasi berikut:

Kebijakan masking data

  • Buat Atau Perbarui: Membuat atau memperbarui kebijakan masking data database.
  • Dapatkan: Mendapatkan kebijakan masking data database.

Aturan masking data

Permissions

Untuk mempelajari lebih lanjut tentang izin saat menggunakan dynamic data masking dengan perintah T-SQL, lihat Izin.

Contoh izin granular

Cegah akses tidak sah ke data sensitif dan dapatkan kontrol dengan menutupinya ke pengguna yang tidak sah di berbagai tingkat database. Anda dapat memberikan atau mencabut UNMASK izin di tingkat database, tingkat skema, tingkat tabel, atau di tingkat kolom untuk pengguna atau peran database apa pun. Dikombinasikan dengan autentikasi Microsoft Entra, UNMASK izin dapat dikelola untuk pengguna, grup, dan aplikasi yang dikelola dalam lingkungan Azure Anda. Izin ini UNMASK menyediakan cara terperinci untuk mengontrol dan membatasi akses tidak sah ke data yang disimpan dalam database dan meningkatkan manajemen keamanan data.

  1. Buat skema untuk berisi tabel pengguna:

    CREATE SCHEMA Data;
    GO
    
  2. Buat tabel dengan kolom bertopeng:

    CREATE TABLE Data.Membership
    (
        MemberID INT IDENTITY (1, 1) NOT NULL,
        FirstName VARCHAR (100) MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)') NULL,
        LastName VARCHAR (100) NOT NULL,
        Phone VARCHAR (12) MASKED WITH (FUNCTION = 'default()') NULL,
        Email VARCHAR (100) MASKED WITH (FUNCTION = 'email()') NOT NULL,
        DiscountCode SMALLINT MASKED WITH (FUNCTION = 'random(1, 100)') NULL,
        BirthDay DATETIME MASKED WITH (FUNCTION = 'default()') NULL
    );
    
  3. Sisipkan data sampel:

    INSERT INTO Data.Membership (FirstName, LastName, Phone, Email, DiscountCode, BirthDay)
    VALUES ('Roberto', 'Tamburello', '555.123.4567', 'RTamburello@contoso.com', 10, '1985-01-25 03:25:05'),
           ('Janice', 'Galvin', '555.123.4568', 'JGalvin@contoso.com.co', 5, '1990-05-14 11:30:00'),
           ('Shakti', 'Menon', '555.123.4570', 'SMenon@contoso.net', 50, '2004-02-29 14:20:10'),
           ('Zheng', 'Mu', '555.123.4569', 'ZMu@contoso.net', 40, '1990-03-01 06:00:00');
    
  4. Buat skema untuk berisi tabel layanan:

    CREATE SCHEMA Service;
    GO
    
  5. Buat tabel servis dengan kolom yang disamarkan.

    CREATE TABLE Service.Feedback
    (
        MemberID INT IDENTITY (1, 1) NOT NULL,
        Feedback VARCHAR (100) MASKED WITH (FUNCTION = 'default()') NULL,
        Rating INT MASKED WITH (FUNCTION = 'default()'),
        Received_On DATETIME
    );
    
  6. Sisipkan data sampel:

    INSERT INTO Service.Feedback (Feedback, Rating, Received_On)
    VALUES ('Good', 4, '2022-01-25 11:25:05'),
           ('Excellent', 5, '2021-12-22 08:10:07'),
           ('Average', 3, '2021-09-15 09:00:00');
    
  7. Buat pengguna yang berbeda dalam database:

    CREATE USER ServiceAttendant WITHOUT LOGIN;
    GO
    
    CREATE USER ServiceLead WITHOUT LOGIN;
    GO
    
    CREATE USER ServiceManager WITHOUT LOGIN;
    GO
    
    CREATE USER ServiceHead WITHOUT LOGIN;
    GO
    
  8. Berikan izin baca kepada pengguna dalam database:

    ALTER ROLE db_datareader ADD MEMBER ServiceAttendant;
    ALTER ROLE db_datareader ADD MEMBER ServiceLead;
    ALTER ROLE db_datareader ADD MEMBER ServiceManager;
    ALTER ROLE db_datareader ADD MEMBER ServiceHead;
    
  9. Berikan izin yang berbeda UNMASK kepada pengguna:

    • Berikan izin tingkat UNMASK kolom ke ServiceAttendant:

      GRANT UNMASK ON Data.Membership (FirstName) TO ServiceAttendant;
      
    • Berikan izin pada tingkat tabel UNMASK kepada ServiceLead.

      GRANT UNMASK ON Data.Membership TO ServiceLead;
      
    • Beri izin tingkat skema UNMASK ke ServiceManager:

      GRANT UNMASK ON SCHEMA::Data TO ServiceManager;
      GRANT UNMASK ON SCHEMA::Service TO ServiceManager;
      
    • Berikan izin pada tingkat database UNMASK kepada ServiceHead;

      GRANT UNMASK TO ServiceHead;
      
  10. Kueri data di bawah konteks pengguna ServiceAttendant:

    EXECUTE AS USER = 'ServiceAttendant';
    
    SELECT MemberID,
           FirstName,
           LastName,
           Phone,
           Email,
           BirthDay
    FROM Data.Membership;
    SELECT MemberID,
           Feedback,
           Rating
    FROM Service.Feedback;
    
    REVERT;
    
  11. Kueri data di bawah konteks pengguna ServiceLead:

    EXECUTE AS USER = 'ServiceLead';
    
    SELECT MemberID,
           FirstName,
           LastName,
           Phone,
           Email,
           BirthDay
    FROM Data.Membership;
    SELECT MemberID,
           Feedback,
           Rating
    FROM Service.Feedback;
    
    REVERT;
    
  12. Kueri data di bawah konteks pengguna ServiceManager:

    EXECUTE AS USER = 'ServiceManager';
    
    SELECT MemberID,
           FirstName,
           LastName,
           Phone,
           Email,
           BirthDay
    FROM Data.Membership;
    SELECT MemberID,
           Feedback,
           Rating
    FROM Service.Feedback;
    
    REVERT;
    
  13. Mengkueri data di bawah konteks pengguna ServiceHead

    EXECUTE AS USER = 'ServiceHead';
    
    SELECT MemberID,
           FirstName,
           LastName,
           Phone,
           Email,
           BirthDay
    FROM Data.Membership;
    SELECT MemberID,
           Feedback,
           Rating
    FROM Service.Feedback;
    
    REVERT;
    
  14. Untuk mencabut UNMASK izin, gunakan pernyataan T-SQL berikut:

    REVOKE UNMASK ON Data.Membership (FirstName) FROM ServiceAttendant;
    REVOKE UNMASK ON Data.Membership FROM ServiceLead;
    REVOKE UNMASK ON SCHEMA::Data FROM ServiceManager;
    REVOKE UNMASK ON SCHEMA::Service FROM ServiceManager;
    REVOKE UNMASK FROM ServiceHead;