Fitur Keamanan Utama di SQL Server

Dalam artikel ini, kita akan melihat alat keamanan SQL Server dan praktik terbaik untuk menyiapkan dan mengamankan DBMS ini..

Konten:

  • Otentikasi dalam SQL Server
  • Otorisasi dalam SQL Server
  • Peran aplikasi
  • Pemfilteran Data di SQL Server
  • Skema di SQL Server
  • Enkripsi Data Menggunakan SQL Server
  • Menggunakan akun layanan yang dikelola grup untuk SQL Server
  • Penilaian Kerentanan SQL Server melalui SSMS
  • Aktivitas audit dalam SQL Server
  • Praktik Terbaik Keamanan Umum SQL Server

Pertama, mari kita ingat konsep keamanan dasar SQL Server. MSSQL mengontrol akses ke objek melalui otentikasi dan otorisasi.

  • Otentikasi - Ini adalah proses masuk ke SQL Server ketika pengguna mengirimkan data mereka ke server. Otentikasi mengidentifikasi pengguna yang diautentikasi;
  • Login - ini adalah proses penentuan objek yang dilindungi yang dapat diakses pengguna dan operasi apa yang diizinkan untuk sumber daya ini.

Banyak objek SQL Server memiliki izinnya sendiri, yang dapat diwarisi dari objek induk. Izin dapat diberikan kepada pengguna individu, grup, atau peran.

Otentikasi dalam SQL Server

Akun SQL Server dapat dibagi menjadi 2 bagian: Nama login dan Pengguna.

  • Nama login - Ini adalah login global untuk seluruh contoh SQL Server. Dengannya, Anda menjalani proses otentikasi;
  • Pengguna - ini adalah anggota basis data yang terkait dengan Nama Masuk tertentu.

Misalnya, login server Anda mungkin domain \ nama pengguna, dan pengguna dalam database yang terkait dengan login ini dapat dipanggil domain_databaseUser. Hampir selalu, nama login dan pengguna dalam database bertepatan dalam nama, tetapi Anda harus ingat bahwa mereka dapat berbeda, memiliki nama yang berbeda.

SQL Server mendukung 2 mode otentikasi:

  • Otentikasi Windows (Windows Authentication) - otentikasi dilakukan menggunakan keamanan Windows. Pengguna yang sudah diautentikasi dengan Windows dan memiliki hak untuk SQL Server tidak perlu memberikan kredensial tambahan.
  • Otentikasi Campuran (Mixed Mode Authentication) - dalam mode ini, selain otentikasi Windows, otentikasi SQL Server itu sendiri didukung melalui login dan kata sandi.

Microsoft merekomendasikan untuk menggunakan otentikasi Windows, jika memungkinkan. Untuk otentikasi melalui login dan kata sandi, data (login dan kata sandi) dikirim melalui jaringan, meskipun dalam bentuk terenkripsi. Dengan otentikasi Windows, serangkaian pesan terenkripsi dikirimkan melalui jaringan di mana kata sandi pengguna tidak terlibat..

Tetapi beberapa aplikasi, terutama yang lama, tidak mendukung otentikasi Windows, jadi ketika mengatur mode otentikasi, ada baiknya mempertimbangkan aplikasi mana yang akan terhubung ke server..

SQL Server mendukung tiga jenis Nama login (nama login):

  • Akun lokal Pengguna atau akun Windows domain/ domain tepercaya.
  • Grup Windows. Memberikan akses ke grup Windows lokal atau grup dari domain AD. Memungkinkan Anda memberikan akses ke semua pengguna yang merupakan anggota grup.
  • Login SQL Server (Otentikasi SQL Server). SQL Server menyimpan hash nama pengguna dan kata sandi dalam basis data tuan, menggunakan metode otentikasi internal untuk memverifikasi login.

SQL Server secara otomatis terintegrasi dengan Active Directory. Jika Anda ingin mendistribusikan hak akun domain, Anda harus menggunakan nama domain NetBios dan login akun. Misalnya, untuk nama pengguna pengguna di domain.local akan menjadi "domain \ nama pengguna".

Otorisasi dalam SQL Server

Untuk otorisasi, SQL Server menggunakan keamanan berbasis peran, yang memungkinkan Anda untuk menetapkan izin untuk peran Windows atau grup / domain, bukan untuk pengguna individu. SQL Server memiliki peran server dan basis data bawaan yang memiliki seperangkat izin yang telah ditentukan sebelumnya.

Ada 3 tingkat keamanan dalam SQL Server, mereka dapat direpresentasikan sebagai hierarki dari tertinggi ke terendah:

  • Tingkat server - pada level ini, Anda dapat mendistribusikan hak ke database, akun, peran server, dan grup ketersediaan;
  • Tingkat basis data termasuk skema, pengguna basis data, peran basis data, dan katalog teks lengkap;
  • Tingkat sirkuit termasuk objek seperti tabel, tampilan, fungsi, dan prosedur tersimpan.

Peran Server yang Terpasang

PeranDeskripsi
sysadminAnggota peran memiliki hak penuh untuk semua sumber daya SQL Server.
serveradminAnggota peran dapat mengubah pengaturan konfigurasi tingkat server dan mematikan server.
securityadminPeserta dalam peran mengelola info masuk dan propertinya. Mereka dapat memberikan hak akses GRANT, DENY dan REVOKE di tingkat server dan di tingkat database, jika mereka memiliki akses ke sana.

securityadmin tidak jauh berbeda dari peran sysadmin karena anggota peran ini berpotensi mendapatkan akses ke semua sumber daya SQL Server.

processadminPeserta peran dapat menghentikan proses yang berjalan di SQL Server.
setupadminAnggota peran dapat menambah dan menghapus server yang ditautkan menggunakan TSQL.
bulkadminAnggota peran dapat menjalankan operasi BULK INSERT.
diskadminAnggota peran dapat mengelola perangkat cadangan. Dalam praktiknya, peran ini praktis tidak diterapkan..
dbcreatorAnggota peran dapat membuat, memodifikasi, menghapus, dan mengembalikan basis data.
publikSetiap login SQL Server dalam peran ini. Keanggotaan publik tidak dapat diubah. Ketika pengguna tidak memiliki izin untuk objek yang ia akses, pengguna mewarisi izin peran publik untuk objek ini.

Skema Peran SQL Server:

Dalam praktiknya, penggunaan peran server tidak terlalu umum, karena seringkali pengguna memerlukan seperangkat izin yang unik. Pengecualian mungkin adalah peran sysadmin untuk administrator sistem dan peran publik.

Peran Basis Data Built-in

PeranDeskripsi
db_ownerPeserta peran dapat melakukan semua langkah untuk mengkonfigurasi dan memelihara database, termasuk penghapusan.
db_securityadminAnggota peran dapat mengubah keanggotaan peran lainnya. Anggota grup ini berpotensi meningkatkan haknya untuk db_owner, jadi Anda harus mempertimbangkan peran ini setara dengan db_owner.
db_accessadminAnggota peran dapat mengontrol akses database untuk login yang ada di server.
db_backupoperatorAnggota peran dapat membuat cadangan basis data.
db_ddladmin Anggota peran dapat menjalankan perintah DDL dalam database.
db_datawriter Anggota peran dapat membuat / memodifikasi / menghapus data di semua tabel pengguna dalam database.
db_datareaderAnggota peran dapat membaca data dari semua tabel pengguna.
db_denydatawriter
db_denydatareaderAnggota peran menolak akses ke tabel basis data pengguna.

Ini juga layak secara terpisah menyoroti peran khusus dalam database msdb.

db_ssisadmin

db_ssisoperator

db_ssisltduser

Anggota peran ini dapat mengelola dan menggunakan SSIS (SQL Server Integration Services).
dc_admin

dc_operator

dc_proxy

Anggota peran ini dapat mengelola dan menggunakan pengumpul data..
Peran KebijakanAdministratorAnggota peran ini memiliki akses penuh ke kebijakan SQL Server.
Peran ServerGroupAdministrator

ServerGroupReaderRole

Anggota peran ini memiliki akses penuh ke grup server terdaftar..
SQLAgentUserRole SQLAgentReaderRole SQLAgentOperatorRoleAnggota peran ini memiliki akses penuh ke pekerjaan SQL Server Agent.
Sebuah catatan: perlu diingat bahwa anggota peran dc_ssisadmin dan dc_admin dapat meningkatkan hak mereka untuk sysadmin.

Skema untuk peran basis data bawaan di SQL Server:

Peran aplikasi

Peran aplikasi adalah objek basis data (sama dengan peran basis data biasa), yang memungkinkan otentikasi kata sandi untuk mengubah konteks keamanan dalam basis data. Tidak seperti peran basis data, peran aplikasi tidak aktif secara default dan diaktifkan ketika aplikasi mengeksekusi sp_setapprole dan memasukkan kata sandi yang sesuai.

Tidak seperti peran biasa, peran aplikasi hampir tidak pernah digunakan. Sebagai pengecualian, aplikasi mereka dapat ditemukan di aplikasi multi-layer..

Pemfilteran Data di SQL Server

Memfilter data dalam SQL Server melalui prosedur / tampilan / fungsi tersimpan dapat dikaitkan dengan penerapan prinsip privilege paling rendah, karena Anda tidak menyediakan akses ke semua data dalam tabel, tetapi hanya untuk beberapa di antaranya..

Misalnya, Anda bisa memberikan hak SELECT hanya pengguna dari tampilan dan mencegah akses langsung ke tabel yang digunakan dalam tampilan. Dengan demikian, Anda akan memberikan akses ke hanya sebagian data dari tabel dengan mengatur filter di mana dalam tampilan.

Memfilter data melalui Row-Level Security

Keamanan Tingkat Baris atau Keamanan tingkat baris (RLS) memungkinkan Anda untuk memfilter data tabel untuk pengguna yang berbeda dengan filter khusus. Ini dilakukan melalui KEBIJAKAN KEAMANAN di T-SQL

Dalam tangkapan layar ini, kebijakan dikonfigurasikan sedemikian rupa sehingga pengguna Sales1 akan melihat baris tabel di mana nilai kolom Penjualan adalah nama pengguna (Sales1), dan pengguna Manajer akan melihat semua baris.

Skema di SQL Server

Beberapa objek SQL Server (tabel, prosedur, tampilan, fungsi) memiliki skema. Skema dapat dianggap sebagai wadah untuk berbagai objek (atau ruang nama jika Anda terbiasa dengan pemrograman).

Misalnya, jika pengguna memiliki hak untuk memilih dari skema, maka pengguna juga dapat memilih dari semua objek skema ini. Artinya, objek yang termasuk dalam skema mewarisi izinnya. Saat pengguna membuat objek dalam diagram, objek milik pemilik diagram, bukan milik pengguna. Izin tidak diwarisi dari skema oleh pengguna. Yaitu pengguna dengan skema dbo default tidak memiliki izin yang diberikan untuk skema ini - mereka harus ditentukan secara eksplisit.

Perbedaan utama antara skema dan peran adalah bahwa izin skema dapat diberikan kepada peran. Misalnya, peran testrole mungkin memiliki izin pilih dari schema1 dan izin untuk memilih / memperbarui schema2. Suatu objek hanya dapat dimiliki oleh satu skema, tetapi beberapa peran dapat memiliki haknya.

Sirkuit Tertanam

SQL Server memiliki skema sistem bawaan:

  • dbo
  • tamu
  • sys
  • INFORMATION_SCHEMA

Skema dbo adalah skema default untuk database baru, dan pengguna dbo adalah pemilik skema dbo. Secara default, pengguna baru dalam database memiliki skema dbo sebagai skema default. Skema built-in lainnya diperlukan untuk objek sistem SQL Server..

Enkripsi Data Menggunakan SQL Server

SQL Server dapat mengenkripsi data, prosedur, dan koneksi server. Enkripsi dimungkinkan menggunakan sertifikat, kunci asimetris atau simetris. SQL Server menggunakan model enkripsi hierarkis, yaitu, setiap lapisan hierarki mengenkripsi lapisan di bawahnya. Semua algoritma enkripsi yang terkenal dan populer didukung. Untuk mengimplementasikan algoritma enkripsi, Windows Crypto API digunakan..

Jenis enkripsi yang paling umum adalah TDE (Enkripsi Data Transparan) dan Selalu Dienkripsi.

Enkripsi data transparan

Enkripsi data transparan atau Enkripsi data transparan mengenkripsi seluruh basis data. Jika media fisik atau file .mdf / .ldf dicuri, penyerang tidak akan dapat mengakses informasi dalam database.

Bagan, untuk mewakili seluruh proses

Enkripsi basis data dasar melalui T-SQL:

Master USE;
GO
CREATE MASTER ENKRIPSI KUNCI OLEH PASSWORD = 'kata sandi';
pergi
BUAT SERTIFIKAT ServerCert DENGAN SUBJECT = 'Sertifikat DEK';
pergi
GUNAKAN AdventureWorks2012;
GO
BUAT KUNCI ENKRIPSI DATABASE
DENGAN ALGORITHM = AES_128
ENKRIPSI DENGAN SERVER SERTIFIKAT ServerCert;
GO
ALTER DATABASE AdventureWorks2012
SET ENKRIPSI AKTIF;
GO

Selalu dienkripsi

Teknologi ini memungkinkan Anda untuk menyimpan data terenkripsi dalam SQL Server tanpa mentransfer kunci enkripsi ke SQL Server itu sendiri. Selalu Dienkripsi, seperti TDE, mengenkripsi data dalam basis data, tetapi tidak pada tingkat basis data, tetapi pada tingkat kolom.

Untuk enkripsi, Selalu Dienkripsi menggunakan 2 kunci:

  • Kunci Enkripsi Kolom (CEK)
  • Kunci Master Kolom (CMK)

Semua proses enkripsi dan dekripsi data terjadi pada klien, hanya nilai terenkripsi dari kunci enkripsi (CEK) yang disimpan dalam database.

Selalu Dienkripsi juga memungkinkan Anda untuk membatasi akses ke data bahkan untuk DBA, sehingga memberi Anda kesempatan untuk tidak khawatir bahwa administrator akan mendapatkan akses ke data yang seharusnya tidak.

Kapan Menggunakan Enkripsi SQL Server?

Enkripsi data adalah salah satu langkah keamanan penting, tetapi enkripsi dapat menuntut sumber daya server dan kadang-kadang bisa berlebihan..

Jika pengguna mengakses data melalui jaringan publik, enkripsi mungkin diperlukan untuk memastikan keamanan, tetapi jika data ditransmisikan melalui intranet atau VPN yang aman, tidak perlu untuk mengenkripsi data. Penting juga mempertimbangkan kemungkinan enkripsi data, jika ada ancaman pencurian media fisik dengan basis data.

Implementasi enkripsi harus direncanakan dengan baik: Anda harus memperhitungkan beban tambahan di server, apakah aplikasi yang bekerja dengan server Anda dapat mengimplementasikan dukungan untuk jenis enkripsi ini di pihak mereka dan banyak nuansa lainnya..

Menggunakan akun layanan yang dikelola grup untuk SQL Server

Akun Layanan yang Dikelola Grup atau gMSA - Ini adalah akun khusus yang dikelola secara otomatis oleh Active Directory. gMSA adalah evolusi teknologi MSA karena MSA tidak mungkin digunakan dalam skenario klaster.

gMSA menghilangkan kebutuhan untuk secara manual mengubah kata sandi untuk suatu akun. Saat menyiapkan gMSA, Anda menunjukkan server mana akun gMSA akan berjalan, seberapa sering Active Directory akan mengubah kata sandi, dan siapa yang memiliki hak untuk melihat kata sandi. Di server tempat gMSA akan diinstal, Anda tidak perlu menentukan kata sandi saat menentukan akun gMSA yang sesuai.

Perlu diingat bahwa versi Windows Server untuk bekerja dengan gMSA harus setidaknya 2012.

Penilaian Kerentanan SQL Server melalui SSMS

SQL Server Management Studio memiliki fitur penilaian kerentanan untuk database..

Pilih database -> Tugas -> Penilaian Kerentanan -> Pindai Kerentanan.

Pemindai akan mengevaluasi database untuk kesalahan populer dalam konfigurasi keamanan dan memberikan rekomendasi yang sesuai..

Anda harus melalui pemindai basis data ini dengan pemindai ini. Itu dapat mengungkapkan masalah tersembunyi yang tidak terlihat pada pandangan pertama..

Aktivitas audit dalam SQL Server

SQL Server menyediakan kemampuan untuk mengaudit aktivitas pengguna dalam instance server.

Ini adalah alat yang sangat kuat yang memungkinkan Anda untuk sepenuhnya mengontrol tindakan pengguna / pengembang Anda..

Pertimbangkan pengaturan audit dasar:

Di SSMS, di tab Keamanan -> Audit, buat audit baru.

Kemudian, untuk audit, Anda perlu membuat Spesifikasi Audit untuk menunjukkan peristiwa yang akan dipantau.

Setelah Anda membuat dan mengaktifkan audit, dalam log audit Anda dapat melihat peristiwa yang dicatat oleh prosedur audit..

Praktik Terbaik Keamanan Umum SQL Server

Selalu ikuti prinsip hak istimewa yang paling rendah. Termasuk mengkonfigurasi akun layanan SQL Server menggunakan gMSA. Jangan pernah menggunakan akun domain dengan hak administrator domain..

Prinsip hak istimewa yang paling rendah

Saat Anda membuat pengguna baru, disarankan untuk menggunakan prinsip LUA (Akun Pengguna Least-privilege atau Akun Least Rights) Prinsip ini merupakan bagian penting dari server dan keamanan data..

Untuk pengguna dengan hak administratif, disarankan untuk mengeluarkan izin hanya untuk operasi yang mereka perlukan. Peran server tertanam seharusnya hanya digunakan ketika izin mereka sesuai dengan tugas pengguna..

Memberi Peran, Bukan Pengguna

Ketika ada banyak pengguna, mengelola izin mereka menjadi lebih sulit, dan juga menjadi lebih sulit untuk mencegah kesalahan dalam memberikan hak.

Disarankan agar Anda memberikan izin ke peran, dan menambahkan pengguna ke peran. Dengan cara ini Anda akan mencapai transparansi yang lebih besar, karena semua pengguna peran tertentu akan memiliki hak yang sama. Menambahkan atau menghapus pengguna dari suatu peran lebih mudah daripada menciptakan kembali set izin individual untuk masing-masing pengguna. Peran dapat disarangkan, tetapi ini tidak disarankan, karena transparansi yang kurang dan potensi penurunan kinerja (jika ada terlalu banyak peran bersarang).

Anda dapat memberikan hak pengguna ke skema. Dalam hal ini, pengguna akan segera dapat bekerja dengan objek yang baru dibuat dalam skema ini, berbeda dengan peran, saat membuat objek baru, peran perlu diberikan hak kepadanya.