Bagikan melalui


Praktik Terbaik Keamanan dengan Database Terkurung

Berlaku untuk: SQL ServerAzure SQL Managed Instance

Database yang terkandung memiliki beberapa ancaman unik yang harus dipahami dan dimitigasi oleh administrator SQL Server Database Engine. Sebagian besar ancaman terkait dengan proses autentikasi USER WITH PASSWORD , yang memindahkan batas autentikasi dari tingkat Mesin Database ke tingkat database.

Pengguna dalam database tertutup yang memiliki izin MENGUBAH PENGGUNA APA PUN, seperti anggota peran database tetap db_owner dan db_accessadmin, dapat memberikan akses ke database tanpa sepengetahuan atau izin dari administrator SQL Server. Memberikan pengguna akses ke database mandiri meningkatkan area permukaan serangan potensial terhadap seluruh instans SQL Server. Para administrator harus memahami delegasi kontrol akses ini, dan sangat berhati-hati memberikan pengguna dalam database yang terkandung izin MENGUBAH PENGGUNA APA PUN. Semua pemilik database memiliki izin MENGUBAH PENGGUNA APA PUN. Administrator SQL Server harus secara berkala mengaudit pengguna dalam database yang terkandung.

Mengakses Database Lain Menggunakan Akun tamu

Pemilik database dan pengguna database dengan izin MENGUBAH PENGGUNA APA PUN dapat membuat pengguna basis data yang mandiri. Setelah menyambungkan ke database mandiri pada instans SQL Server, pengguna database mandiri dapat mengakses database lain di Mesin Database, jika database lain telah mengaktifkan akun tamu .

Membuat Pengguna Duplikat di Database Lain

Beberapa aplikasi mungkin mengharuskan pengguna untuk memiliki akses ke lebih dari satu database. Ini dapat dilakukan dengan membuat pengguna database tertutup yang identik di setiap database. Gunakan opsi SID saat membuat pengguna kedua dengan kata sandi. Contoh berikut membuat dua pengguna yang identik dalam dua database.

USE DB1;  
GO  
CREATE USER Carlo WITH PASSWORD = '<strong password>';   
-- Return the SID of the user  
SELECT SID FROM sys.database_principals WHERE name = 'Carlo';  
  
-- Change to the second database  
USE DB2;  
GO  
CREATE USER Carlo WITH PASSWORD = '<same password>', SID = <SID from DB1>;  
GO  

Untuk menjalankan kueri lintas database, Anda harus mengatur opsi TRUSTWORTHY pada database panggilan. Misalnya jika pengguna (Carlo) yang ditentukan di atas berada di DB1, untuk menjalankan SELECT * FROM db2.dbo.Table1; maka pengaturan TRUSTWORTHY harus aktif untuk database DB1. Jalankan kode berikut untuk mengaktifkan TRUSTWORTHY.

ALTER DATABASE DB1 SET TRUSTWORTHY ON;  

Membuat Pengguna yang Menduplikasi Login

Jika pengguna database terkontrol dengan kata sandi dibuat, menggunakan nama yang sama dengan login SQL Server, dan jika login SQL Server tersambung dengan menentukan database terkontrol sebagai katalog awal, maka login SQL Server tidak akan dapat tersambung. Koneksi akan dievaluasi sebagai pengguna database tertutup dengan prinsipal kata sandi pada database tertutup alih-alih sebagai pengguna berdasarkan login SQL Server. Ini dapat menyebabkan penolakan layanan yang disengaja atau tidak disengaja untuk login SQL Server.

  • Sebagai praktik terbaik, anggota peran tetap server sysadmin harus mempertimbangkan untuk selalu menghubungkan diri tanpa menggunakan opsi katalog awal. Ini menyambungkan login ke database master dan menghindari upaya apa pun oleh pemilik database untuk menyalahgunakan upaya masuk. Kemudian administrator dapat berpindah ke database yang dikandung dengan menggunakan pernyataan USE<database>. Anda juga dapat mengatur database default login ke database yang terkandung, yang menyelesaikan login ke master, lalu mentransfer login ke database yang terkandung.

  • Sebagai praktik terbaik, jangan membuat pengguna database mandiri dengan kata sandi yang memiliki nama yang sama dengan login SQL Server.

  • Jika login duplikat ada, sambungkan ke database master tanpa menentukan katalog awal, lalu jalankan perintah USE untuk mengubah ke database yang terkandung.

  • Saat database kontainer ada, pengguna database yang bukan database kontainer harus terhubung ke Mesin Database tanpa menggunakan katalog awal atau dengan menentukan nama database yang bukan database kontainer sebagai katalog awal. Ini menghindari penyambungan ke database yang terisolasi yang berada di bawah kontrol yang tidak langsung oleh administrator Mesin Database.

Meningkatkan Akses dengan Mengubah Status Penampungan Database

Login yang memiliki izin MENGUBAH SEMUA DATABASE, seperti anggota peran server tetap dbcreator, dan pengguna dalam database non-tertampung yang memiliki izin MENGENDALIKAN DATABASE, seperti anggota peran database tetap db_owner, dapat mengubah pengaturan kontainmen dari sebuah database. Jika pengaturan penahanan database diubah dari NONE ke PARTIAL atau FULL, maka akses pengguna dapat diberikan dengan membuat pengguna database mandiri dengan kata sandi. Ini dapat memberikan akses tanpa sepengetahuan atau persetujuan administrator SQL Server. Untuk mencegah database apa pun agar tidak terkandung, atur opsi autentikasi database terkandung Mesin Database ke 0. Untuk mencegah koneksi oleh pengguna database mandiri dengan kata sandi pada database mandiri yang dipilih, gunakan pemicu masuk untuk membatalkan upaya masuk oleh pengguna database mandiri dengan kata sandi.

Melampirkan Database Yang Terkandung

Dengan melampirkan database terisolasi, administrator dapat memberi pengguna yang tidak diinginkan akses ke instans Mesin Database. Administrator yang khawatir tentang risiko ini dapat membuat database online dalam mode RESTRICTED_USER , yang mencegah autentikasi untuk pengguna database mandiri dengan kata sandi. Hanya prinsipal yang diotorisasi melalui login yang dapat mengakses Mesin Database.

Pengguna dibuat menggunakan persyaratan kata sandi yang berlaku pada saat mereka dibuat dan kata sandi tidak dicentang ulang saat database dilampirkan. Dengan melampirkan database mandiri yang memungkinkan kata sandi lemah ke sistem dengan kebijakan kata sandi yang lebih ketat, administrator dapat mengizinkan kata sandi yang tidak memenuhi kebijakan kata sandi saat ini pada Mesin Database yang melampirkan. Administrator dapat menghindari mempertahankan kata sandi yang lemah dengan mengharuskan semua kata sandi diatur ulang untuk database terlampir.

Kebijakan Kata Sandi

Kata sandi dalam database dapat diperlukan untuk menjadi kata sandi yang kuat, tetapi tidak dapat dilindungi oleh kebijakan kata sandi yang kuat. Gunakan Autentikasi Windows jika memungkinkan untuk memanfaatkan kebijakan kata sandi yang lebih luas yang tersedia dari Windows.

Autentikasi Kerberos

Pengguna database mandiri dengan kata sandi tidak dapat menggunakan Autentikasi Kerberos. Jika memungkinkan, gunakan Autentikasi Windows untuk memanfaatkan fitur Windows seperti Kerberos.

Serangan Kamus Offline

Hash kata sandi untuk pengguna database mandiri dengan kata sandi disimpan dalam database yang terkandung. Siapa pun yang memiliki akses ke file database dapat melakukan serangan kamus kata sandi terhadap pengguna database dengan kata sandi pada sistem yang tidak diaudit. Untuk mengurangi ancaman ini, batasi akses ke file database, atau hanya izinkan koneksi ke database mandiri dengan menggunakan Autentikasi Windows.

Meloloskan Diri dari Database yang Terkunci

Jika database terkandung sebagian, administrator SQL Server harus secara berkala mengaudit kemampuan pengguna dan modul dalam database yang terkandung.

Penolakan Layanan Melalui AUTO_CLOSE

Jangan konfigurasikan database yang terkandung untuk menutup otomatis. Jika ditutup, membuka database untuk mengautentikasi pengguna menggunakan sumber daya tambahan dan dapat berkontribusi pada penolakan serangan layanan.

Lihat Juga

Database Terkungkung
Memigrasikan ke Database yang Mengandung Sebagian Konten