Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server di Linux
Jika Anda adalah pengguna Linux yang baru menggunakan SQL Server, tugas berikut memanjakan Anda melalui beberapa tugas keamanan. Tugas-tugas ini tidak unik atau spesifik untuk Linux, tetapi memberi Anda gambaran area yang perlu diteliti lebih lanjut. Setiap contoh terhubung ke dokumentasi mendalam untuk area tersebut.
Sampel kode dalam artikel ini menggunakan database sampel AdventureWorks2025 atau AdventureWorksDW2025, yang dapat Anda unduh dari halaman beranda Sampel dan Proyek Komunitas Microsoft SQL Server.
Buat login dan pengguna basis data
Berikan akses kepada orang lain ke SQL Server dengan membuat login di master database menggunakan pernyataan tersebutCREATE LOGIN. Contohnya:
CREATE LOGIN Larry
WITH PASSWORD = '<password>';
Caution
Kata sandi Anda harus mengikuti kebijakan password default SQL Server. Secara default, kata sandi harus panjangnya minimal delapan karakter dan berisi karakter dari tiga dari empat set berikut: huruf besar, huruf kecil, digit dasar-10, dan simbol. Panjang kata sandi bisa hingga 128 karakter. Gunakan kata sandi yang panjang dan kompleks mungkin.
Login dapat tersambung ke SQL Server dan memiliki akses (dengan izin terbatas) ke master database. Untuk menyambungkan ke database pengguna, login memerlukan identitas yang sesuai di tingkat database, yang disebut pengguna database. Pengguna bersifat spesifik untuk setiap database, jadi Anda harus membuatnya secara terpisah di setiap database untuk memberikan akses.
Contoh berikut beralih ke AdventureWorks2025 database, lalu menggunakan pernyataan tersebut CREATE USER untuk membuat pengguna bernama yang Larry memetakan ke login bernama Larry. Meskipun login dan pengguna saling terkait (dipetakan), keduanya adalah objek yang berbeda. Login adalah prinsipal pada tingkat server. Pengguna adalah prinsipal pada tingkat database.
USE AdventureWorks2025;
GO
CREATE USER Larry;
GO
- Akun administrator SQL Server dapat tersambung ke database apa pun dan dapat membuat lebih banyak login dan pengguna di database apa pun.
- Saat Anda membuat database, Anda menjadi pemilik database dan dapat terhubung ke database tersebut. Pemilik database dapat membuat lebih banyak pengguna.
Nantinya Anda dapat mengotorisasi login lain untuk membuat lebih banyak login dengan memberi mereka ALTER ANY LOGIN izin. Di dalam database, Anda dapat mengotorisasi pengguna lain untuk membuat lebih banyak pengguna dengan memberi mereka ALTER ANY USER izin. Contohnya:
GRANT ALTER ANY LOGIN TO Larry;
GO
USE AdventureWorks2025;
GO
GRANT ALTER ANY USER TO Jerry;
GO
Sekarang login Larry dapat membuat lebih banyak login, dan pengguna Jerry dapat membuat lebih banyak pengguna.
Memberikan akses dengan hak istimewa paling sedikit
Administrator dan pemilik basis data biasanya adalah pengguna pertama yang terhubung ke basis data pengguna. Akun-akun ini memiliki semua izin di database. Jangan gunakan akun-akun ini untuk tugas yang membutuhkan izin lebih sedikit.
Saat Anda baru mulai, Anda dapat menetapkan beberapa kategori izin umum dengan peran database tetap bawaan. Misalnya, peran database tetap db_datareader dapat membaca semua tabel dalam database, tetapi tidak dapat melakukan perubahan. Berikan keanggotaan dalam peran basis data tetap dengan pernyataan tersebut ALTER ROLE . Contoh berikut menambahkan pengguna Jerry ke peran database tetap db_datareader .
USE AdventureWorks2025;
GO
ALTER ROLE db_datareader ADD MEMBER Jerry;
Untuk daftar peran database tetap, lihat Peran tingkat database.
Nanti, ketika Anda siap mengonfigurasi akses data yang lebih presisi (sangat disarankan), buatlah peran database yang ditentukan pengguna sendiri dengan pernyataan tersebut CREATE ROLE . Kemudian tetapkan izin terperinci tertentu ke peran kustom Anda.
Sebagai contoh, pernyataan berikut membuat peran database bernama Sales, memberikan Sales grup kemampuan untuk membaca, memperbarui, dan menghapus baris dari Orders tabel, lalu menambahkan pengguna Jerry ke peran tersebut Sales .
CREATE ROLE Sales;
GRANT SELECT ON OBJECT::Orders TO Sales;
GRANT UPDATE ON OBJECT::Orders TO Sales;
GRANT DELETE ON OBJECT::Orders TO Sales;
ALTER ROLE Sales ADD MEMBER Jerry;
Untuk informasi selengkapnya tentang sistem izin, lihat Mulai menggunakan izin Mesin Database.
Mengonfigurasi keamanan tingkat baris
Keamanan tingkat baris memungkinkan Anda membatasi akses ke baris dalam basis data berdasarkan pengguna yang menjalankan kueri. Fitur ini berguna untuk skenario seperti memastikan pelanggan hanya dapat mengakses data mereka sendiri atau bahwa pekerja hanya dapat mengakses data untuk departemen mereka.
Langkah-langkah berikut membahas pengaturan dua pengguna dengan akses tingkat baris yang berbeda ke Sales.SalesOrderHeader tabel.
Buat dua akun pengguna untuk menguji keamanan tingkat baris:
USE AdventureWorks2025;
GO
CREATE USER Manager WITHOUT LOGIN;
CREATE USER SalesPerson280 WITHOUT LOGIN;
Berikan akses baca pada Sales.SalesOrderHeader tabel kepada kedua pengguna:
GRANT SELECT ON Sales.SalesOrderHeader TO Manager;
GRANT SELECT ON Sales.SalesOrderHeader TO SalesPerson280;
Buat skema baru dan fungsi bernilai tabel sebaris. Fungsi ini kembali 1 ketika baris di SalesPersonID kolom sesuai dengan ID login SalesPerson , atau ketika pengguna yang menjalankan kueri adalah pengguna tersebut Manager .
CREATE SCHEMA Security;
GO
CREATE FUNCTION Security.fn_securitypredicate
(@SalesPersonID INT)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN
SELECT 1 AS fn_securitypredicate_result
WHERE ('SalesPerson' + CAST (@SalesPersonId AS VARCHAR (16)) = USER_NAME())
OR (USER_NAME() = 'Manager')
Buat kebijakan keamanan yang menambahkan fungsi sebagai filter dan predikat blok pada tabel:
CREATE SECURITY POLICY SalesFilter
ADD FILTER PREDICATE Security.fn_securitypredicate(SalesPersonID) ON Sales.SalesOrderHeader,
ADD BLOCK PREDICATE Security.fn_securitypredicate(SalesPersonID) ON Sales.SalesOrderHeader
WITH (STATE = ON);
Jalankan pernyataan berikut untuk melakukan query SalesOrderHeader pada tabel sebagai setiap pengguna. Verifikasi bahwa SalesPerson280 hanya melihat 95 baris dari penjualan mereka sendiri dan bahwa Manager dapat melihat semua baris dalam tabel.
EXECUTE AS USER = 'SalesPerson280';
SELECT *
FROM Sales.SalesOrderHeader;
REVERT;
EXECUTE AS USER = 'Manager';
SELECT *
FROM Sales.SalesOrderHeader;
REVERT;
Ubah kebijakan keamanan untuk menonaktifkannya. Sekarang kedua pengguna dapat mengakses semua baris.
ALTER SECURITY POLICY SalesFilter
WITH (STATE = OFF);
Mengaktifkan data masking dinamis
Masking data dinamis memungkinkan Anda membatasi paparan data sensitif kepada pengguna aplikasi dengan menutupi kolom tertentu sepenuhnya atau sebagian.
Gunakan pernyataan ALTER TABLE untuk menambahkan fungsi masking ke kolom EmailAddress dalam tabel Person.EmailAddress:
USE AdventureWorks2025;
GO
ALTER TABLE Person.EmailAddress
ALTER COLUMN EmailAddress
ADD MASKED WITH (FUNCTION = 'email()');
Buat pengguna TestUser baru dengan SELECT izin di tabel, lalu jalankan kueri untuk TestUser melihat data yang dimasking:
CREATE USER TestUser WITHOUT LOGIN;
GRANT SELECT
ON Person.EmailAddress TO TestUser;
EXECUTE AS USER = 'TestUser';
SELECT EmailAddressID,
EmailAddress
FROM Person.EmailAddress;
REVERT;
Pastikan bahwa fungsi penyamaran mengubah alamat email pada catatan pertama dari:
| ID Alamat Email | Alamat Email |
|---|---|
| 1 | ken0@adventure-works.com |
ke dalam
| ID Alamat Email | Alamat Email |
|---|---|
| 1 | kXXX@XXXX.com |
Aktifkan enkripsi data transparan
Penyerang dapat mencuri file basis data dari hard drive Anda. Hal ini dapat terjadi jika penyerang mendapatkan akses yang lebih tinggi ke sistem, jika seorang karyawan mengambil file, atau jika seseorang mencuri komputer yang menyimpan file tersebut.
Enkripsi data transparan (TDE) mengenkripsi file data saat disimpan di hard drive. Database master Mesin Database SQL Server memiliki kunci enkripsi, sehingga Database Engine dapat memanipulasi data. File database tidak dapat dibaca tanpa akses ke kunci. Administrator tingkat tinggi dapat mengelola, mencadangkan, dan membuat ulang kunci tersebut, sehingga hanya orang terpilih yang dapat memindahkan basis data. Saat Anda mengaktifkan TDE, SQL Server juga secara otomatis mengenkripsi basis tempdb data.
Karena Database Engine dapat membaca data, TDE tidak melindungi dari akses tidak sah oleh administrator komputer yang dapat langsung membaca memori atau mengakses SQL Server melalui akun administrator.
Konfigurasikan TDE
- Membuat kunci master
- Membuat atau mendapatkan sertifikat yang dilindungi oleh kunci master
- Buat kunci enkripsi basis data dan lindungi dengan sertifikat
- Mengatur database untuk menggunakan enkripsi
Mengonfigurasi TDE memerlukan CONTROL izin pada master database dan CONTROL izin pada database pengguna. Biasanya administrator mengonfigurasi TDE.
Contoh berikut mengilustrasikan enkripsi dan dekripsi AdventureWorks2025 database dengan sertifikat bernama MyServerCert yang terpasang di server.
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>';
GO
CREATE CERTIFICATE MyServerCert
WITH SUBJECT = 'My Database Encryption Key Certificate';
GO
USE AdventureWorks2025;
GO
CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
GO
ALTER DATABASE AdventureWorks2025
SET ENCRYPTION ON;
Untuk menghapus TDE, jalankan perintah berikut:
ALTER DATABASE AdventureWorks2025
SET ENCRYPTION OFF;
SQL Server menjadwalkan operasi enkripsi dan dekripsi pada thread latar belakang. Anda dapat melihat status operasi ini dengan tampilan katalog dan tampilan manajemen dinamis dalam daftar yang muncul di artikel ini.
Warning
Kunci enkripsi basis data juga mengenkripsi file cadangan dari basis data yang telah mengaktifkan TDE. Akibatnya, ketika Anda memulihkan cadangan ini, sertifikat yang melindungi kunci enkripsi database harus tersedia. Selain mencadangkan database, Anda juga harus mencadangkan sertifikat server untuk mencegah kehilangan data. Kehilangan data terjadi jika sertifikat tidak lagi tersedia. Untuk informasi selengkapnya, lihat Sertifikat SQL Server dan Kunci Asimetris.
Untuk informasi selengkapnya tentang TDE, lihat Enkripsi data transparan (TDE).
Mengonfigurasi enkripsi cadangan
SQL Server dapat mengenkripsi data saat membuat cadangan. Dengan menentukan algoritma enkripsi dan enkripsi (sertifikat atau kunci asimetris) saat membuat cadangan, Anda dapat membuat file cadangan terenkripsi.
Warning
Selalu cadangkan sertifikat atau kunci asimetris, dan sebaiknya ke lokasi yang berbeda dari file cadangan yang dienkripsi. Tanpa sertifikat atau kunci asimetris, Anda tidak dapat memulihkan cadangan, merender file cadangan tidak dapat digunakan.
Contoh berikut membuat sertifikat, lalu membuat cadangan yang dilindungi oleh sertifikat.
USE master;
GO
CREATE CERTIFICATE BackupEncryptCert
WITH SUBJECT = 'Database backups';
GO
BACKUP DATABASE [AdventureWorks2025]
TO DISK = N'/var/opt/mssql/backups/AdventureWorks2025.bak'
WITH COMPRESSION,
ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = BackupEncryptCert),
STATS = 10;
GO
Untuk informasi selengkapnya, lihat Enkripsi cadangan.