Penyelubungan data dinamis

Berlaku untuk:Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (hanya kumpulan SQL khusus)

Azure SQL Database,Azure SQL Managed Instance, dan Azure Synapse Analytics mendukung masking data dinamis. 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 didefinisikan yang menutupi semua 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.

Dasar-dasar masking data dinamis

Anda menyiapkan kebijakan masking data dinamis di portal Azure dengan memilih panel Masking Data Dinamis di bawah Keamanan di panel konfigurasi SQL Database Anda. Fitur ini tidak dapat diatur menggunakan portal untuk SQL Managed Instance. Untuk informasi selengkapnya, lihat Masking Data Dinamis.

Kebijakan Masking Data Dinamis

  • Pengguna SQL dikecualikan dari masking: Sekumpulan pengguna SQL, yang dapat menyertakan identitas dari ID Microsoft Entra (sebelumnya Azure Active Directory), yang mendapatkan data yang tidak dimasak 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 masking Logika masking
Default Masking penuh sesuai dengan jenis data bidang yang ditunjuk

* Gunakan XXXX (atau kurang) jika ukuran bidang kurang dari 4 karakter untuk jenis data string (nchar, ntext, nvarchar).
* Gunakan nilai nol untuk jenis data numerik (bigint, bit, desimal, int, uang, numerik, smallint, smallmoney, tinyint, float, real).
* Gunakan 1900-01-01 untuk jenis data tanggal/waktu (tanggal, tanggalwaktu2, tanggalwaktu, datetimeoffset, smalldatetime, waktu).
* Untuk sql_variant, nilai default dari jenis saat ini digunakan.
* Untuk XML, dokumen <masked /> digunakan.
* Gunakan nilai kosong untuk jenis data khusus (tanda waktu, tabel, HierarchyID, uniqueidentifier, biner, gambar, varbinary, dan jenis spasial).
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.

Cuplikan layar yang memperlihatkan metode masking untuk menghasilkan angka acak.
Teks kustom 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

Cuplikan layar panel navigasi.

Mesin rekomendasi DDM, menandai bidang tertentu dari database Anda sebagai bidang yang berpotensi sensitif, yang mungkin merupakan kandidat yang baik untuk menutupi. Di panel Masking Data Dinamis di portal, Anda akan 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

Menyiapkan masking data dinamis untuk database Anda menggunakan API

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

Izin

Ini adalah peran bawaan untuk mengonfigurasi penyamaran data dinamis adalah:

Ini adalah tindakan yang diperlukan untuk menggunakan penyamaran data dinamis:

Baca/Tulis:

  • Microsoft.Sql/servers/databases/dataMaskingPolicies/*

Membaca:

  • Microsoft.Sql/servers/databases/dataMaskingPolicies/read

Menulis:

  • Microsoft.Sql/servers/databases/dataMaskingPolicies/write

Untuk mempelajari selengkapnya tentang perizinan saat menggunakan penyamaran data dinamis 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 izin UNMASK di tingkat database, tingkat skema, tingkat tabel, atau di tingkat kolom untuk pengguna atau peran database apa pun. Dikombinasikan dengan autentikasi Microsoft Entra, izin UNMASK dapat dikelola untuk pengguna, grup, dan aplikasi yang dikelola dalam lingkungan Azure Anda. Izin 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 layanan dengan kolom bertopeng:

    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 UNMASK yang berbeda kepada pengguna:

    --Grant column level UNMASK permission to ServiceAttendant
    GRANT UNMASK ON Data.Membership(FirstName) TO ServiceAttendant;
    
    -- Grant table level UNMASK permission to ServiceLead
    GRANT UNMASK ON Data.Membership TO ServiceLead;
    
    -- Grant schema level UNMASK permission to ServiceManager
    GRANT UNMASK ON SCHEMA::Data TO ServiceManager;
    GRANT UNMASK ON SCHEMA::Service TO ServiceManager;
    
    --Grant database level UNMASK permission to 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 izin UNMASK, 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;