Bagikan melalui


Panduan untuk fitur keamanan SQL Server di Linux

Berlaku untuk:SQL Server di Linux

Jika Anda adalah pengguna Linux yang baru menggunakan SQL Server, tugas berikut memanjakan 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.

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.

Membuat login dan pengguna database

Berikan orang lain akses ke SQL Server dengan membuat login di master database menggunakan pernyataan CREATE LOGIN . Contohnya:

CREATE LOGIN Larry
    WITH PASSWORD = '<password>';

Perhatian

Kata sandi Anda harus mengikuti kebijakan kata sandi 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 khusus untuk setiap database dan harus dibuat secara terpisah di setiap database untuk memberi mereka akses. Contoh berikut memindahkan Anda ke AdventureWorks2025 database, 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 prinsipal tingkat database.

USE AdventureWorks2022;
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 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 AdventureWorks2022;
GO

GRANT ALTER ANY USER TO Jerry;
GO

Sekarang Larry login 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 adalah 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 baru memulai, Anda dapat menetapkan beberapa kategori izin umum dengan menggunakan peran database tetap bawaan. Misalnya, peran database tetap db_datareader 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 peran database tetap db_datareader .

USE AdventureWorks2022;
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 ke 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 Mulai menggunakan 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 pekerja hanya dapat mengakses data yang berkaitan dengan departemen mereka.

Langkah-langkah berikut menelusuri penyusunan dua Pengguna dengan akses tingkat baris yang berbeda ke Sales.SalesOrderHeader tabel.

Buat dua akun pengguna untuk menguji keamanan tingkat baris:

USE AdventureWorks2022;
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 dalam 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 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 AdventureWorks2022;
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 untuk TestUser 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

into

EmailAddressID EmailAddress
1 kXXX@XXXX.com

Aktifkan enkripsi data transparan

Salah satu ancaman bagi database Anda adalah risiko seseorang mencuri file database dari hard-drive Anda. Ini bisa terjadi dengan gangguan yang mendapatkan akses yang ditingkatkan ke sistem Anda, melalui tindakan karyawan masalah, atau dengan pencurian komputer yang berisi file (seperti laptop).

Enkripsi data transparan (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. Saat TDE dikonfigurasi, tempdb database juga dienkripsi secara otomatis.

Karena Mesin Database dapat membaca data, TDE tidak melindungi dari akses yang 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 master database dan CONTROL izin pada database pengguna. Biasanya administrator mengonfigurasi TDE.

Contoh berikut mengilustrasikan mengenkripsi dan mendekripsi AdventureWorks2025 database menggunakan sertifikat yang diinstal pada server bernama MyServerCert.

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 AdventureWorks2022;
GO

CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256
    ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
GO

ALTER DATABASE AdventureWorks2022
    SET ENCRYPTION ON;

Untuk menghapus TDE, jalankan perintah berikut:

ALTER DATABASE AdventureWorks2022
    SET ENCRYPTION OFF;

Operasi enkripsi dan dekripsi dijadwalkan pada utas latar belakang oleh SQL Server. Anda dapat melihat status operasi ini menggunakan tampilan katalog dan tampilan manajemen dinamis dalam daftar yang muncul nanti di artikel 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, pastikan 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

Selalu cadangkan 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 [AdventureWorks2022]
TO DISK = N'/var/opt/mssql/backups/AdventureWorks2022.bak'
WITH COMPRESSION,
    ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = BackupEncryptCert),
    STATS = 10;
GO

Untuk informasi selengkapnya, lihat Enkripsi cadangan.