Bagikan melalui


Penyelubungan data dinamis

Berlaku untuk: Azure SQL Database Azure SQL Managed InstanceAzure Synapse Analytics (hanya kumpulan SQL khusus)database SQL di Fabric

Azure SQL Database, database SQL di Microsoft Fabric, Azure SQL Managed Instance, dan Azure Synapse Analytics mendukung masking data dinamis (DDM). 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.

Dasar-dasar masking data dinamis

Untuk Azure SQL Database, 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 Azure untuk SQL Managed Instance atau database SQL di Fabric. Sebagai gantinya, gunakan Transact-SQL (T-SQL), seperti dalam 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 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 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
    Cuplikan layar panel navigasi.
    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

Izin

Anda dapat mengonfigurasi masking data dinamis dengan peran bawaan berikut:

Ini adalah tindakan yang diperlukan untuk menggunakan penyamaran data dinamis:

Baca/Tulis:

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

Baca:

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

Menulis:

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

Untuk mempelajari selengkapnya tentang izin saat menggunakan masking 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 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 layanan dengan kolom yang disembunyikan

    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;