Panduan untuk fitur keamanan SQL Server di Linux
Berlaku untuk:
SQL Server (semua versi yang didukung) - Linux
Jika Anda adalah pengguna Linux yang baru SQL Server, tugas berikut memandul Anda melalui beberapa tugas keamanan. Ini tidak unik atau khusus untuk Linux, tetapi membantu memberi Anda gambaran tentang area untuk menyelidiki lebih lanjut. Dalam setiap contoh, tautan disediakan ke dokumentasi mendalam untuk area tersebut.
Catatan
Contoh berikut menggunakan database sampel AdventureWorks2014 . Untuk instruksi tentang cara mendapatkan dan menginstal database sampel ini, lihat Memulihkan database SQL Server dari Windows ke Linux.
Membuat login dan pengguna database
Beri orang lain akses ke SQL Server dengan membuat login di database master menggunakan pernyataan CREATE LOGIN. Contohnya:
CREATE LOGIN Larry WITH PASSWORD = '************';
Catatan
Selalu gunakan kata sandi yang kuat sebagai pengganti tanda bintang di perintah sebelumnya.
Login dapat tersambung ke SQL Server dan memiliki akses (dengan izin terbatas) ke database master. Untuk menyambungkan ke database pengguna, login memerlukan identitas terkait di tingkat database, yang disebut pengguna database. Pengguna khusus untuk setiap database dan harus dibuat secara terpisah di setiap database untuk memberi mereka akses. Contoh berikut memindahkan Anda ke database AdventureWorks2014, lalu menggunakan pernyataan CREATE USER untuk membuat pengguna bernama Larry yang terkait dengan login bernama Larry. Meskipun login dan pengguna terkait (dipetakan satu sama lain), mereka adalah objek yang berbeda. Login adalah prinsipal tingkat server. Pengguna adalah prinsip tingkat database.
USE AdventureWorks2014;
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 seseorang membuat database, mereka menjadi pemilik database, yang bisa tersambung 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 bisa mengotorisasi pengguna lain untuk membuat lebih banyak pengguna dengan memberi mereka ALTER ANY USER izin. Contohnya:
GRANT ALTER ANY LOGIN TO Larry;
GO
USE AdventureWorks2014;
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
Orang pertama yang tersambung ke database pengguna akan menjadi akun administrator dan pemilik database. Namun pengguna ini memiliki semua izin yang tersedia di database. Ini lebih banyak izin daripada yang seharusnya dimiliki sebagian besar pengguna.
Saat Anda baru memulai, Anda dapat menetapkan beberapa kategori umum izin dengan menggunakan peran database tetap bawaan. Misalnya, db_datareader peran database tetap dapat membaca semua tabel dalam database, tetapi tidak membuat perubahan. Berikan keanggotaan dalam peran database tetap dengan menggunakan pernyataan ALTER ROLE . Contoh berikut menambahkan pengguna Jerry ke db_datareader peran database tetap.
USE AdventureWorks2014;
GO
ALTER ROLE db_datareader ADD MEMBER Jerry;
Untuk daftar peran database tetap, lihat Peran Tingkat Database.
Nantinya, ketika Anda siap untuk mengonfigurasi akses yang lebih tepat ke data Anda (sangat disarankan), buat peran database yang ditentukan pengguna Anda sendiri menggunakan pernyataan CREATE ROLE . Kemudian tetapkan izin terperinci tertentu untuk peran kustom Anda.
Misalnya, pernyataan berikut membuat peran database bernama Sales, memberi Sales grup kemampuan untuk melihat, memperbarui, dan menghapus baris dari Orders tabel, lalu menambahkan pengguna Jerry ke peran tersebut Sales .
CREATE ROLE Sales;
GRANT SELECT ON Object::Sales TO Orders;
GRANT UPDATE ON Object::Sales TO Orders;
GRANT DELETE ON Object::Sales TO Orders;
ALTER ROLE Sales ADD MEMBER Jerry;
Untuk informasi selengkapnya tentang sistem izin, lihat Memulai Izin Mesin Database.
Mengonfigurasi keamanan tingkat baris
Keamanan Tingkat Baris memungkinkan Anda membatasi akses ke baris dalam database berdasarkan pengguna yang menjalankan kueri. Fitur ini berguna untuk skenario seperti memastikan bahwa pelanggan hanya dapat mengakses data mereka sendiri atau bahwa pekerja hanya dapat mengakses data yang berkaitan dengan departemen mereka.
Langkah-langkah berikut menjelaskan cara menyiapkan dua Pengguna dengan akses tingkat baris yang berbeda ke Sales.SalesOrderHeader tabel.
Buat dua akun pengguna untuk menguji keamanan tingkat baris:
USE AdventureWorks2014;
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 mengembalikan 1 saat baris di SalesPersonID kolom cocok dengan ID SalesPerson login atau jika pengguna yang menjalankan kueri adalah pengguna Manajer.
CREATE SCHEMA Security;
GO
CREATE FUNCTION Security.fn_securitypredicate(@SalesPersonID AS 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 yang berikut ini untuk mengkueri SalesOrderHeader 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 menonaktifkan kebijakan. 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.
ALTER TABLE Gunakan pernyataan untuk menambahkan fungsi masking ke EmailAddress kolom dalam Person.EmailAddress tabel:
USE AdventureWorks2014;
GO
ALTER TABLE Person.EmailAddress
ALTER COLUMN EmailAddress
ADD MASKED WITH (FUNCTION = 'email()');
Buat pengguna TestUser baru dengan SELECT izin pada tabel, lalu jalankan kueri TestUser untuk menampilkan data bertopeng:
CREATE USER TestUser WITHOUT LOGIN;
GRANT SELECT ON Person.EmailAddress TO TestUser;
EXECUTE AS USER = 'TestUser';
SELECT EmailAddressID, EmailAddress FROM Person.EmailAddress;
REVERT;
Verifikasi bahwa fungsi masking mengubah alamat email di rekaman pertama dari:
| EmailAddressID | EmailAddress |
|---|---|
| 1 | ken0@adventure-works.com |
Ke
| EmailAddressID | EmailAddress |
|---|---|
| 1 | kXXX@XXXX.com |
Mengaktifkan Enkripsi Data Transparan
Salah satu ancaman terhadap database Anda adalah risiko seseorang akan mencuri file database dari hard-drive Anda. Ini bisa terjadi dengan gangguan yang mendapatkan akses yang ditingkatkan ke sistem Anda, melalui tindakan karyawan yang bermasalah, atau dengan pencurian komputer yang berisi file (seperti laptop).
Transparent Data Encryption (TDE) mengenkripsi file data saat disimpan di hard drive. Database master mesin database SQL Server memiliki kunci enkripsi, sehingga mesin database dapat memanipulasi data. File database tidak dapat dibaca tanpa akses ke kunci. Administrator tingkat tinggi dapat mengelola, mencadangkan, dan membuat ulang kunci, sehingga database dapat dipindahkan, tetapi hanya oleh orang yang dipilih. Ketika TDE dikonfigurasi, tempdb database juga dienkripsi secara otomatis.
Karena Mesin Database dapat membaca data, Enkripsi Data Transparan tidak melindungi dari akses tidak sah oleh administrator komputer yang dapat langsung membaca memori, atau mengakses SQL Server melalui akun administrator.
Mengonfigurasi TDE
- Membuat kunci master
- Membuat atau mendapatkan sertifikat yang dilindungi oleh kunci master
- Membuat kunci enkripsi database dan melindunginya dengan sertifikat
- Mengatur database untuk menggunakan enkripsi
Mengonfigurasi TDE memerlukan CONTROL izin pada database master dan CONTROL izin pada database pengguna. Biasanya administrator mengonfigurasi TDE.
Contoh berikut mengilustrasikan mengenkripsi dan mendekripsi AdventureWorks2014 database menggunakan sertifikat yang diinstal pada server bernama MyServerCert.
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '**********';
GO
CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'My Database Encryption Key Certificate';
GO
USE AdventureWorks2014;
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
GO
ALTER DATABASE AdventureWorks2014
SET ENCRYPTION ON;
Untuk menghapus TDE, jalankan ALTER DATABASE AdventureWorks2014 SET ENCRYPTION OFF;
Operasi enkripsi dan dekripsi dijadwalkan pada utas latar belakang dengan SQL Server. Anda dapat melihat status operasi ini menggunakan tampilan katalog dan tampilan manajemen dinamis dalam daftar yang muncul nanti dalam topik ini.
Peringatan
File cadangan database yang mengaktifkan TDE juga dienkripsi dengan menggunakan kunci enkripsi database. Akibatnya, ketika Anda memulihkan cadangan ini, sertifikat yang melindungi kunci enkripsi database harus tersedia. Ini berarti bahwa selain mencadangkan database, Anda harus memastikan bahwa Anda mempertahankan cadangan sertifikat server untuk mencegah kehilangan data. Kehilangan data akan mengakibatkan 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 memiliki kemampuan untuk mengenkripsi data saat membuat cadangan. Dengan menentukan algoritma enkripsi dan enkripsi (sertifikat atau kunci asimetris) saat membuat cadangan, Anda dapat membuat file cadangan terenkripsi.
Peringatan
Sangat penting untuk mencadangkan sertifikat atau kunci asimetris, dan sebaiknya ke lokasi yang berbeda dari file cadangan yang digunakan untuk mengenkripsi. 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 [AdventureWorks2014]
TO DISK = N'/var/opt/mssql/backups/AdventureWorks2014.bak'
WITH
COMPRESSION,
ENCRYPTION
(
ALGORITHM = AES_256,
SERVER CERTIFICATE = BackupEncryptCert
),
STATS = 10
GO
Untuk informasi selengkapnya, lihat Enkripsi Cadangan.
Langkah berikutnya
Untuk informasi selengkapnya tentang fitur keamanan SQL Server, lihat Security Center untuk mesin database SQL Server dan Azure SQL Database.