Artikel ini memperkenalkan dasar-dasar penyembunyian data dinamis (DDM) di SQL Server beserta ikhtisarnya yang didukung oleh contoh sederhana penerapan penyembunyian data. Selain itu, pembaca akan terbiasa dengan manfaat penyembunyian data dinamis. Makalah ini juga menyoroti pentingnya penyembunyian data dalam tugas pengembangan basis data sehari-hari ketika beberapa bidang harus ditutup karena sifatnya yang sensitif untuk mematuhi praktik standar.
Tentang Penyembunyian Data
Mari kita membahas konsep dasar penyembunyian data dan ketersediaan fitur ini di SQL Server.
Definisi Sederhana
Penyembunyian data adalah metode menyembunyikan data seluruhnya atau sebagian sehingga menyulitkan untuk mengenali atau memahami data setelah penyembunyian diterapkan.
Definisi Microsoft
Menurut dokumentasi Microsoft, Dynamic data masking (DDM) membatasi paparan data sensitif dengan menutupinya ke pengguna yang tidak memiliki hak istimewa.
Apa itu Data sensitif
Yang kami maksud dengan data sensitif adalah data apa pun yang berisi informasi pribadi, identitas pribadi, keuangan, atau keamanan yang jika diungkapkan dapat disalahgunakan atau merusak reputasi organisasi.
Contoh Data Sensitif
Contoh data sensitif yang baik adalah nomor kartu debit yang disimpan dalam database yang harus dilindungi dari penggunaan yang tidak sah. Contoh bagus lainnya dari data sensitif adalah alamat email pribadi yang dapat dengan mudah mengidentifikasi seseorang.
Pengguna yang tidak memiliki hak istimewa
Setiap pengguna basis data yang tidak diizinkan untuk melihat data sensitif dianggap sebagai pengguna yang tidak memiliki hak istimewa.
Penutupan Data Dinamis (DDM)
Fitur penyembunyian data yang didukung oleh SQL Server dikenal sebagai penyembunyian data dinamis yang juga dirujuk sebagai DDM dalam dokumentasi Microsoft. Dengan kata lain, Microsoft mengacu pada penyembunyian data sebagai penyembunyian data dinamis di SQL Server.
Kompatibilitas
Menurut dokumentasi Microsoft, fitur penyembunyian data dinamis didukung oleh versi SQL Server berikut:
1. SQL Server 2016 dan versi yang lebih baru
2. Basis Data Azure SQL
3. Gudang Data Azure SQL
Jadi, jika Anda belum mulai menggunakan database Azure SQL, maka Anda memerlukan SQL Server 2016 minimum untuk menggunakan fitur penyembunyian data dinamis.
Mengonfigurasi Penyembunyian Data Dinamis
Penyembunyian data dinamis dapat dikonfigurasi hanya dengan menggunakan perintah T-SQL.
Implementasi penyembunyian data dinamis dilakukan melalui skrip T-SQL untuk mencegah pengguna yang tidak sah melihat data sensitif.
Manfaat Penyembunyian Data Dinamis
Akhirnya, mari kita lihat beberapa manfaat utama dari penyembunyian data dinamis, tetapi sebelum itu, saya ingin bertanya kepada para pemula SQL, bukan profesional SQL, apa manfaat dari batasan integritas?
Mari kita pertimbangkan contoh unik batasan kunci yang memastikan bahwa kolom yang menerapkannya memiliki nilai yang berbeda (tidak ada duplikat). Jika saya dapat menerapkan nilai kolom yang berbeda pada saat entri data di aplikasi front-end saya, mengapa saya harus repot-repot menerapkannya melalui database dengan menerapkan batasan kunci yang unik?
Jawabannya adalah untuk memastikan aturan (batasan integritas ) tetap konsisten dan dikendalikan secara terpusat. Saya harus melakukannya pada tingkat database jika tidak, saya mungkin harus menulis kode untuk menerapkan nilai unik di semua aplikasi saat ini dan yang akan datang yang mengakses database.
Hal yang sama berlaku untuk penyembunyian data dinamis karena mendefinisikan mask pada kolom di tingkat database sehingga tidak perlu melakukan masking (kode) tambahan oleh aplikasi yang mengakses database.
Penyembunyian data dinamis memiliki manfaat berikut dibandingkan pendekatan tradisional:
1. Penyembunyian data dinamis mengimplementasikan kebijakan terpusat untuk menyembunyikan atau mengubah data sensitif dalam database yang diwarisi oleh aplikasi apa pun yang ingin mengakses data.
2. Penyembunyian data dinamis di SQL Server dapat membantu mengelola pengguna dengan hak istimewa untuk melihat data sensitif dan pengguna yang tidak diizinkan untuk melihatnya.
3. Ini memiliki implementasi sederhana dalam bentuk skrip T-SQL.
Menerapkan Penyembunyian Data Dinamis
Sebelum menerapkan penyembunyian data dinamis, kita perlu memahami jenis penyembunyian data dinamis yang dapat diterapkan ke kolom dalam tabel SQL atau Database Azure SQL.
Jenis Data Mask
Ada empat jenis data mask yang bisa kita terapkan ke kolom:
1. Masker Data Default
2. Masker Data Sebagian
3. Masker Data Acak
4. Penyembunyian Data Khusus
Dalam artikel ini, kita akan fokus pada jenis penyembunyian data default.
Menerapkan Masker Data Dinamis
Masker data dinamis dapat diterapkan ke kolom tabel dengan cara berikut:
1. Saat membuat tabel baru
2. Mengubah tabel yang sudah dibuat untuk menerapkan penyembunyian data ke kolomnya
Menyiapkan Contoh Basis Data
Mari kita buat database sampel bernama SQLDevBlogV5 dengan menjalankan skrip T-SQL berikut:
-- Create sample database (SQLDevBlogV5) CREATE DATABASE SQLDevBlogV5; GO USE SQLDevBlogV5; -- (1) Create Article table in the sample database CREATE TABLE Article ( ArticleId INT PRIMARY KEY IDENTITY (1, 1) ,Category VARCHAR(50) ,Author VARCHAR(50) ,Title VARCHAR(150) ,Published DATETIME2 ,Notes VARCHAR(400) ) GO -- (2) Populating Article table SET IDENTITY_INSERT [dbo].[Article] ON INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (1, N'Development', N'Atif', N'Introduction to T-SQL Programming ', N'2017-01-01 00:00:00', NULL) INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (2, N'Testing', N'Peter', N'Database Unit Testing Fundamentals', N'2017-01-10 00:00:00', NULL) INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (3, N'DLM', N'Sadaf', N'Database Lifecycle Management for beginners', N'2017-01-20 00:00:00', NULL) INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (4, N'Development', N'Peter', N'Common Table Expressions (CTE)', N'2017-02-10 00:00:00', NULL) INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (5, N'Testing', N'Sadaf', N'Manual Testing vs. Automated Testing', N'2017-03-20 00:00:00', NULL) INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (6, N'Testing', N'Atif', N'Beyond Database Unit Testing', N'2017-11-10 00:00:00', NULL) INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (7, N'Testing', N'Sadaf', N'Cross Database Unit Testing', N'2017-12-20 00:00:00', NULL) INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (8, N'Development', N'Peter', N'SQLCMD - A Handy Utitliy for Developers', N'2018-01-10 00:00:00', NULL) INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (9, N'Testing', N'Sadaf', N'Scripting and Testing Database for beginners ', N'2018-02-15 00:00:00', NULL) INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (10, N'Development', N'Atif', N'Advanced Database Development Methods', N'2018-07-10 00:00:00', NULL) INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (11, N'Testing', N'Sadaf', N'How to Write Unit Tests for your Database', N'2018-11-10 00:00:00', NULL) INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (12, N'Development', N'Peter', N'Database Development using Modern Tools', N'2018-12-10 00:00:00', NULL) INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (13, N'DLM', N'Atif', N'Designing, Developing and Deploying Database ', N'2019-01-01 00:00:00', NULL) INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (14, N'DLM', N'Peter', N'How to Apply Database Lifecycle Management ', N'2019-02-10 00:00:00', NULL) SET IDENTITY_INSERT [dbo].[Article] OFF
Gunakan kueri berikut untuk melihat artikel:
-- View articles SELECT [a].[ArticleId] ,[a].[Category] ,[a].[Author] ,[a].[Title] ,[a].[Published] ,[a].[Notes] FROM dbo.Article A
Persyaratan Bisnis untuk Menyamarkan Nama Penulis
Sekarang anggaplah Anda menerima persyaratan bisnis yang menyatakan bahwa nama penulis harus disembunyikan karena sensitivitas informasi ini. Cara terbaik untuk memenuhi persyaratan bisnis ini adalah dengan menutupi kolom Nama menggunakan DDM.
Menyembunyikan Nama Penulis
Kami akan mengubah tabel untuk menambahkan fungsi data masking sebagai berikut:
-- Masking Author column ALTER TABLE Article ALTER COLUMN [Author] varchar(50) MASKED WITH (FUNCTION = 'default()');
Memeriksa Status Penyembunyian
Anda dapat memeriksa status penyembunyian data dinamis kapan saja dengan menggunakan skrip T-SQL berikut yang diberikan dalam dokumentasi Microsoft:
-- Checking dynamic data masking status SELECT c.name, tbl.name as table_name, c.is_masked, c.masking_function FROM sys.masked_columns AS c JOIN sys.tables AS tbl ON c.[object_id] = tbl.[object_id] WHERE is_masked = 1;
Outputnya menunjukkan kepada kita kolom mana yang berhasil ditutup:
Pemeriksaan Data
Sekarang periksa data dengan menanyakan 5 catatan teratas dari tabel tempat kami menerapkan masking:
-- View top 5 artices records SELECT TOP 5 [a].[ArticleId] ,[a].[Category] ,[a].[Author] ,[a].[Title] ,[a].[Published] ,[a].[Notes] FROM dbo.Article A ORDER BY a.ArticleId
Outputnya tampaknya tidak menunjukkan kepada kita hasil yang diharapkan:
Seperti yang Anda lihat, terlepas dari kenyataan bahwa kami telah menutupi kolom Penulis, itu masih menunjukkan nilai sebenarnya. Alasan di balik perilaku ini adalah bahwa akun yang kami gunakan untuk menerapkan penyembunyian data dinamis telah mendapat hak istimewa yang lebih tinggi dan itulah sebabnya data yang disamarkan terlihat dalam bentuk aslinya ketika kami membuat kueri tabel menggunakan akun saat ini.
Solusinya adalah untuk membuat pengguna baru dengan izin Pilih.
Membuat pengguna dengan izin Pilih di atas tabel
Sekarang mari kita buat pengguna database baru tanpa login hanya memiliki izin Pilih pada tabel Artikel sebagai berikut:
-- Create ArticleUser to have Select access to Article table CREATE USER ArticleUser WITHOUT LOGIN; GRANT SELECT ON Article TO ArticleUser;
Melihat 5 Artikel Teratas sebagai ArticleUser
Selanjutnya, jalankan pernyataan Select untuk mendapatkan 5 artikel teratas menggunakan ArticleUser pengguna yang baru dibuat dengan izin pilih saja:
-- Execute SELECT Article as ArtilceUser EXECUTE AS USER = 'ArticleUser'; -- View artices SELECT TOP 5 [a].[ArticleId] ,[a].[Category] ,[a].[Author] ,[a].[Title] ,[a].[Published] FROM dbo.Article A ORDER BY a.ArticleId -- Revert the User back to what user it was before REVERT;
Selamat! Anda telah berhasil menutupi kolom Penulis sesuai persyaratan.
Menjatuhkan Kolom Masked
Anda dapat melepaskan penyembunyian data dinamis pada kolom yang telah Anda terapkan sebelumnya hanya dengan mengeluarkan perintah T-SQL berikut:
-- Removing dynamic data masking on Author column ALTER TABLE Article ALTER COLUMN Author DROP MASKED;
Harap tetap terhubung karena penggunaan penyembunyian data dinamis yang lebih canggih sedang dalam proses di artikel berikutnya.
Hal yang harus dilakukan
Sekarang Anda dapat menutupi kolom tabel dalam database, silakan coba hal-hal berikut untuk meningkatkan keterampilan Anda lebih lanjut:
1. Harap coba untuk menutupi kolom Kategori dalam database sampel.
2. Silakan coba buat tabel Penulis dengan kolom AuthorId, Name dan Email lalu berikan AuthorId sebagai kunci asing di tabel Artikel dan kemudian terapkan penyembunyian data dinamis pada kolom Nama dan Email dari tabel Author dengan membuat pengguna uji
3. Coba buat dan lepaskan penyembunyian data dinamis untuk memastikan bahwa Anda berhasil menambah dan menghapus penyembunyian data dinamis pada tabel SQL