Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Penyembunyian Data Dinamis di SQL Server untuk Pengguna Tingkat Lanjut

Artikel ini memberikan pemahaman tingkat tinggi tentang penyembunyian data dinamis di SQL Server beserta kasus penggunaannya, praktik terbaik, dan implikasi keamanannya untuk pengguna SQL tingkat lanjut (termasuk pengembang dan penguji). Selain itu, pembaca artikel ini akan terbiasa menerapkan berbagai jenis penyembunyian data dinamis. Artikel ini juga menyoroti pentingnya penggunaan penyamaran data tingkat lanjut dalam tugas pengembangan dan pengujian basis data sehari-hari.

Prasyarat

Mari kita lihat prasyarat untuk artikel ini terlebih dahulu.

Keakraban T-SQL

Artikel ini mengasumsikan bahwa pembaca sudah familiar dengan skrip T-SQL dan dapat dengan nyaman menulis dan menjalankan kueri SQL untuk melihat dan memanipulasi database SQL.

Dasar-dasar Penyembunyian Data Dinamis

Artikel ini juga mengasumsikan bahwa pembaca mengetahui konsep dasar penyembunyian data dinamis di SQL Server. Silakan merujuk ke artikel Penyembunyian Data di SQL Server untuk pemula agar Anda terbiasa dengan dasar-dasar penyembunyian data Dinamis jika Anda belum melakukannya.

Database SQL Azure atau Kompatibilitas SQL Server 2016

Fitur penyembunyian data dinamis tersedia di SQL Server 2016 hingga SQL Server 2019 sehingga sangat disarankan untuk memiliki salah satu dari berikut ini:
1. Basis data Azure SQL
2. SQL Server 2016 diinstal secara lokal atau jarak jauh.

Menyiapkan Contoh Basis Data

Harap ingat untuk membuat database sampel menggunakan skrip T-SQL berikut yang kompatibel dengan SQL Server 2016 atau sebagai Database Azure SQL jika Anda ingin mengikuti panduan dalam artikel ini:

-- Buat database sampel ITSalesV2CREATE DATABASE ITSalesV2;GOUSE [ITSalesV2]-- (2) Buat tabel Penjualan BulananCREATE TABLE [dbo].[Penjualan Bulanan]( [SaleId] [int] IDENTITY(1,1) BUKAN NULL PRIMARY KEY, [Tanggal Jual] [datetime2](7) NULL, [Pelanggan] [varchar](50) NULL, [Email] [varchar] (200) NULL, [Produk] [varchar](150) NULL, [TotalHarga] [desimal] (10, 2) NULL,)-- (2) Mengisi tabel penjualan bulananSET IDENTITY_INSERT [dbo].[MonthlySale] ONINSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Pelanggan],[Email] , [Produk], [TotalHarga]) NILAI (1, N'2019-05-01 00:00:00', N'Asif', N'[email protected]', N'Laptop Dell', CAST(300.00 AS Desimal(10, 2)))MASUKKAN KE [dbo].[Penjualan Bulanan] ([IdPenjualan], [Tanggal Jual], [Pelanggan],[Email], [Produk], [HargaTotal]) NILAI (2, N'2019 -05-02 00:00:00', N'Mike',N'[email protected]', N'Dell Laptop', CAST(300.00 AS Desimal(10, 2)))INSERT INTO [dbo].[ Obral Bulanan] ([IdPenjualan], [Tanggal Jual], [Pelanggan],[Email], [Produk], [HargaTotal]) NILAI (3, N'2019-05-02 00 :00:00', N'Adil',N'[email protected]',N'Lenovo Laptop', CAST(350.00 AS Desimal(10, 2)))INSERT INTO [dbo].[MonthlySale] ([SaleId ], [Tanggal Jual], [Pelanggan],[Email], [Produk], [HargaTotal]) NILAI (4, N'2019-05-03 00:00:00', N'Sarah',N'contoh@sqldat .com', N'HP Laptop', CAST(250.00 AS Desimal(10, 2)))INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Pelanggan],[Email], [Produk ], [TotalPrice]) NILAI (5, N'2019-05-05 00:00:00', N'Asif', N'[email protected]', N'Dell Desktop', CAST(200.00 AS Desimal( 10, 2)))MASUKKAN KE [dbo].[Penjualan Bulanan] ([IdPenjualan], [Tanggal Jual], [Pelanggan],[Email], [Produk], [HargaTotal]) NILAI (6, N'2019-05- 10 00:00:00', N'Sam',N'[email protected]', N'HP Desktop', CAST(300.00 AS Desimal(10, 2)))INSERT INTO [dbo].[MonthlySale] ( [IdPenjualan], [Tanggal Jual], [Pelanggan],[Email], [Produk], [HargaTotal]) NILAI (7, N'2019-05-12 00:00:00', N'Mike',N'contoh @sqldat.com', N'iPad', CAST(250.00 AS Desimal(10, 2)))INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate] , [Pelanggan],[Email], [Produk], [TotalHarga]) NILAI (8, N'2019-05-13 00:00:00', N'Mike',N'[email protected]', N 'iPad', CAST(250.00 AS Desimal(10, 2)))INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Pelanggan],[Email], [Produk], [TotalHarga]) NILAI (9, N'2019-05-20 00:00:00', N'Peter',N'[email protected]', N'Dell Laptop', CAST(350.00 AS Desimal(10, 2))) INSERT INTO [dbo].[Penjualan Bulanan] ([IdPenjualan], [Tanggal Jual], [Pelanggan],[Email], [Produk], [HargaTotal]) NILAI (10, N'2019-05-25 00:00:00 ', N'Peter',N'[email protected]', N'Asus Laptop', CAST(400.00 AS Desimal(10, 2)))SET IDENTITY_INSERT [dbo].[MonthlySale] OFF

Memeriksa Data

Periksa database sampel ITSalesV2 yang baru dibuat dan diisi dengan menjalankan skrip berikut:

-- Melihat data penjualan bulananSELECT s.SaleId ,s.SellingDate ,s.Customer ,s.Email ,s.Product ,s.TotalPriceFROM dbo.MonthlySale s

Outputnya adalah sebagai berikut:

Membuat pengguna yang tidak memiliki hak istimewa

Harap buat pengguna non-istimewa tanpa login yang hanya memiliki izin SELECT di tabel MonthlySale yang akan melihat data bertopeng sebagai prasyarat untuk artikel ini. Gunakan skrip berikut untuk melakukannya:

-- Buat DataUser untuk memiliki akses Pilih ke tabel MonthlySaleCREATE USER DataUser TANPA LOGIN; HIBAH PILIH ON MonthlySale KEPADA DataUser;

Membuat Prosedur untuk memeriksa status penyembunyian

Artikel ini juga mengasumsikan bahwa ada prosedur tersimpan dalam database sampel yang menunjukkan kepada kita status penyembunyian data dinamis dari kolom dalam tabel database:

-- Prosedur tersimpan untuk memeriksa status penyembunyian data dinamisCREATE PROC ShowMaskingStatusASBEGINSET NOCOUNT ON SELECT c.name, tbl.name as table_name, c.is_masked, c.masking_function FROM sys.masked_columns AS c GABUNG sys.tables AS tbl ON c. [object_id] =tbl.[object_id] WHERE is_masked =1;END

Jenis Penyembunyian Data Dinamis

Ada empat jenis umum penyembunyian data dinamis di SQL Server:
1. Masker Data Default
2. Masker Data Sebagian
3. Masker Data Acak
4. Penyembunyian Data String Khusus
Sekarang kita akan menerapkan keempat jenis umum penyembunyian data dinamis.

Menerapkan Penyembunyian Data Default

Penyembunyian data default menyembunyikan kolom sepenuhnya dari pengguna yang tidak sah dengan menutupi semua nilai kolom dengan karakter khusus sehingga sangat sulit untuk menebak isi kolom.

Persyaratan Bisnis

Sekarang anggaplah Anda menerima persyaratan bisnis yang menyatakan bahwa alamat email pelanggan harus benar-benar disembunyikan (disamarkan) karena sensitivitas informasi ini.
Cara terbaik untuk memenuhi persyaratan bisnis ini adalah dengan menutupi kolom Email menggunakan Penyembunyian data dinamis (DDM).

Penyembunyikan Data Default Alamat Email

Kami akan mengubah tabel untuk menutupi alamat email sebagai berikut:

--Penutupan data dinamis default dari kolom Email ALTER TABLE MonthlySaleALTER COLUMN Email varchar(200) MASKED WITH (FUNCTION ='default()');

Memeriksa Status Penyembunyian

Periksa status penyembunyian data dinamis dengan menggunakan prosedur tersimpan berikut berdasarkan skrip T-SQL yang dirujuk dalam dokumentasi Microsoft:

-- Memeriksa status penyembunyian data dinamisEXEC ShowMaskingStatus

Outputnya menunjukkan kepada kita kolom mana yang berhasil ditutup:

Melihat Kolom Email sebagai Pengguna Data

Selanjutnya, jalankan pernyataan Select untuk melihat penjualan bulanan (tabel) sebagai pengguna dengan hak istimewa rendah yang disebut DataUser yang hanya memiliki izin pilih pada tabel sebagai berikut:

-- Jalankan SELECT sebagai DataUserEXECUTE AS USER ='DataUser'; -- Lihat penjualan bulanan PILIH s.SaleId,s.SellingDate,s.Customer,s.Email,s.Product,s.Product from dbo.MonthlySale s-- Kembalikan Pengguna ke pengguna sebelumnyaREVERT;

Outputnya adalah sebagai berikut:

Menerapkan Penyembunyian Data Sebagian

Penyembunyian data sebagian seperti yang tersirat dari namanya, menyembunyikan sebagian kolom agar tidak dapat dilihat oleh pengguna yang tidak sah yang menutupi beberapa bagian nilai kolom dengan karakter khusus membuat isi kolom agak mudah dibaca tetapi masih sulit ditebak.

Persyaratan Bisnis

Sekarang pikirkan persyaratan bisnis di mana Anda telah diminta untuk menyembunyikan sebagian nama pelanggan sedemikian rupa sehingga hanya karakter pertama dari nama yang tetap terlihat. Cara terbaik untuk memenuhi persyaratan bisnis ini adalah dengan menutupi kolom Pelanggan menggunakan Penyembunyian data dinamis sebagian.

Penutupan Data Sebagian dari Nama Pelanggan

Kami akan mengubah tabel untuk menutupi sebagian kolom Pelanggan sebagai berikut:

-- Penyembunyian sebagian data nama PelangganALTER TABLE MonthlySaleALTER COLUMN [Pelanggan] ADD MASKED WITH (FUNCTION ='partial(1,"XXXXXXX",0)')

Memeriksa Status Penyembunyian

Periksa status penyembunyian data dinamis:

-- Memeriksa status penyembunyian data dinamisEXEC ShowMaskingStatus

Outputnya menunjukkan kepada kita kolom mana yang berhasil ditutup:

Melihat Kolom Pelanggan sebagai Pengguna Data

Lihat tabel sebagai pengguna uji DataUser yang harus melihat data yang disembunyikan:

-- Jalankan SELECT sebagai DataUserEXECUTE AS USER ='DataUser'; -- Lihat penjualan bulanan sebagai DataUserSELECT s.SaleId,s.SellingDate,s.Customer,s.Email,s.Product,s.Product from dbo.MonthlySale s-- Kembalikan Pengguna ke pengguna sebelumnyaREVERT; 

Outputnya adalah sebagai berikut:

Menerapkan Penyembunyian Data Acak

Penyembunyian data acak menyembunyikan kolom secara acak dari pengguna yang tidak sah dengan menutupi kolom berdasarkan rentang nilai sehingga sangat sulit untuk menebak isi kolom. Harap diingat bahwa jenis penyembunyian data acak hanya berlaku untuk kolom yang hanya menyimpan angka dan dapat ditentukan dengan memberikan rentang untuk pengacakan.

Persyaratan Bisnis

Anda menerima persyaratan bisnis yang menyatakan bahwa harga produk harus ditutupi dengan rentang angka acak sehingga pengguna dengan hak istimewa rendah tidak boleh mengetahui harga pasti produk karena alasan privasi. Cara terbaik untuk memenuhi spesifikasi bisnis ini adalah dengan menutupi kolom TotalPrice menggunakan penyembunyian data dinamis acak.

Penutupan Data Acak dari Kolom TotalPrice

Ubah tabel MonthlySale untuk menutupi TotalPrice secara acak sebagai berikut:

--Penutupan data dinamis acak dari kolom TotalPrice ALTER TABLE MonthlySaleALTER COLUMN [TotalPrice] desimal(10,2) MASKED WITH (FUNCTION ='random(1, 12)')

Memeriksa Status Penyembunyian

Harap periksa status penyembunyian data dinamis dengan menjalankan prosedur tersimpan berikut:

-- Memeriksa status penyembunyian data dinamisEXEC ShowMaskingStatus

Outputnya menunjukkan kepada kita kolom mana yang berhasil ditutup:

Melihat Kolom TotalPrice sebagai DataUser

Lihat tabel sebagai DataUser sekarang:

-- Jalankan SELECT sebagai DataUserEXECUTE AS USER ='DataUser'; -- Lihat penjualan bulanan PILIH s.SaleId,s.SellingDate,s.Customer,s.Email,s.Product,s.TotalPrice from dbo.MonthlySale s-- Kembalikan Pengguna ke pengguna sebelumnyaREVERT;

Outputnya adalah sebagai berikut:

Harap diingat bahwa output mungkin berbeda untuk kolom Data Acak Bertopeng karena pembuatan nomor acak.

Menerapkan Penyembunyian Data String Kustom

Penyembunyian data string khusus seperti namanya menambahkan karakter khusus untuk menyembunyikan kolom dengan membuatnya sangat sulit untuk menebak isinya. Harap diingat bahwa penyembunyian data string khusus digunakan bersama dengan penyembunyian data parsial dengan menyesuaikan karakter untuk menutupi nilai kolom yang sebenarnya. Dengan kata lain, Penyembunyian data string khusus adalah bentuk penyembunyian data sebagian yang disempurnakan.

Persyaratan Bisnis

Pertimbangkan persyaratan bisnis untuk hanya menampilkan karakter pertama dan terakhir dari kolom Produk sementara karakter lainnya harus disembunyikan atau ditutupi dengan tanda hubung (-). Cara terbaik untuk memenuhi spesifikasi bisnis ini adalah dengan menutupi kolom Produk menggunakan Penyembunyian data dinamis sebagian dengan string khusus yang diperlukan.

Penutupan Data String Pelanggan dari Data Penjualan

Ubah tabel MonthlySale untuk menutupi kolom Produk sebagai berikut:

--Penutup data dinamis string khusus dari kolom Produk ALTER TABLE MonthlySaleALTER COLUMN [Produk] ADD MASKED WITH (FUNCTION ='partial(1,"---",1)')

Memeriksa Status Penyembunyian

Sebaiknya periksa status penyembunyian data dinamis pada saat ini menggunakan skrip berikut:

-- Memeriksa status penyembunyian data dinamisEXEC ShowMaskingStatus

Output menunjukkan semua kolom di mana Dynamic data masking telah berhasil diterapkan seperti yang ditunjukkan di bawah ini:

Melihat Kolom Produk sebagai DataUser

Lihat tabel sebagai DataUser sekarang:

-- Jalankan SELECT sebagai DataUserEXECUTE AS USER ='DataUser'; -- Lihat penjualan bulanan PILIH s.SaleId,s.SellingDate,s.Customer,s.Email,s.Product,s.TotalPrice from dbo.MonthlySale s-- Kembalikan Pengguna ke pengguna sebelumnyaREVERT;

Outputnya adalah sebagai berikut:

Selamat! Anda telah berhasil menerapkan keempat teknik penyembunyian.
Silakan lihat artikel Penyembunyian Data di SQL Server bagi pemula untuk menghapus jenis penyembunyian data yang diterapkan.

Praktik Terbaik

Harap diingat hal-hal berikut:
1. Penyembunyian data dinamis tidak melindungi atau mengenkripsi data kolom sehingga tidak boleh digunakan untuk tujuan itu.
2. Pengguna potensial yang seharusnya melihat data yang disembunyikan harus memiliki akses yang sangat terbatas untuk melihat data dan sama sekali tidak boleh diberikan izin Pembaruan untuk mengeksploitasi data.
3. Pengguna potensial bahkan dengan izin SELECT saja dapat menjalankan kueri lengkap untuk menebak nilai yang benar, jadi berhati-hatilah.
4. Anda juga dapat menggunakan ALTER COLUMN Email ADD MASKED WITH (FUNCTION ='email()') untuk menutupi kolom email daripada menggunakan Default dynamic masking.
5. Anda dapat menggunakan penyembunyian data string Kustom untuk menyembunyikan nomor kartu debit dalam laporan transaksi dengan hanya menampilkan dua atau empat digit terakhir seperti yang mungkin Anda lihat di tanda terima belanja.

Hal yang harus dilakukan

Sekarang setelah Anda dapat menerapkan keempat jenis penyamaran, cobalah hal-hal berikut untuk meningkatkan keterampilan Anda lebih lanjut:
1. Silakan buat database sampel dengan mengikuti panduan dalam artikel Pengembangan Laporan SSR dalam Istilah Sederhana diikuti dengan mengembangkan laporan SSR yang hanya menampilkan karakter pertama dari nama Penulis dengan menyembunyikan sisanya menggunakan penyembunyian data Parsial.
2. Coba buat database sampel yang dirujuk dalam artikel Membuat dan Menyebarkan Beberapa Versi Database melalui Cuplikan Skema dan kemudian buat pengguna uji bernama Siswa dan terapkan penyembunyian data dinamis yang sesuai untuk menyembunyikan nilai semua siswa untuk pengguna uji ini.
3. Coba buat dan lepaskan penyembunyian data dinamis untuk memastikan bahwa Anda berhasil menambahkan dan menghapus penyembunyian data dinamis pada tabel SQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Daftar Semua Database dari Server Tertaut di SQL Server (Contoh T-SQL)

  2. Melaporkan Data Kinerja SQLDIAG melalui Alat Utilitas RML | Pemecahan Masalah Kinerja SQL Server -7

  3. Nama kolom atau jumlah nilai yang diberikan tidak sesuai dengan definisi tabel

  4. PILIH UNTUK PEMBARUAN dengan SQL Server

  5. Gunakan TYPE_NAME() untuk Mendapatkan Nama Tipe Data di SQL Server