Praktik Terbaik Keamanan dengan Database Mandiri

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 mandiri yang memiliki izin UBAH PENGGUNA APA PUN, seperti anggota peran database tetap db_owner dan db_accessadmin, dapat memberikan akses ke database tanpa sepengetahuan atau izin atau administrator SQL Server. Memberikan pengguna akses ke database mandiri meningkatkan area permukaan serangan potensial terhadap seluruh instans SQL Server. Administrator harus memahami delegasi kontrol akses ini, dan sangat berhati-hati memberikan pengguna dalam database mandiri izin UBAH PENGGUNA APA PUN. Semua pemilik database memiliki izin UBAH 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 UBAH PENGGUNA APA PUN dapat membuat pengguna database 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 mandiri 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 mengatur pengaturan TRUSTWORTHY .

ALTER DATABASE DB1 SET TRUSTWORTHY ON;  

Membuat Pengguna yang Menduplikasi Login

Jika pengguna database mandiri dengan kata sandi dibuat, menggunakan nama yang sama dengan login SQL Server, dan jika login SQL Server tersambung menentukan database yang terkandung sebagai katalog awal, maka login SQL Server tidak akan dapat tersambung. Koneksi akan dievaluasi sebagai pengguna database mandiri dengan prinsip kata sandi pada database yang terkandung 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 server tetap sysadmin harus mempertimbangkan untuk selalu terhubung 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 mengubah ke database yang terkandung dengan menggunakan pernyataan database> USE<. 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 mandiri ada, pengguna database yang tidak berisi database harus tersambung ke Mesin Database tanpa menggunakan katalog awal atau dengan menentukan nama database database yang tidak terkandung sebagai katalog awal. Ini menghindari menyambungkan ke database mandiri yang berada di bawah kontrol kurang langsung oleh administrator Mesin Database.

Meningkatkan Akses dengan Mengubah Status Penampungan Database

Login yang memiliki izin UBAH DATABASE APA PUN, seperti anggota peran server tetap dbcreator , dan pengguna dalam database non-kontainer yang memiliki izin CONTROL DATABASE , seperti anggota peran database tetap db_owner , dapat mengubah pengaturan penahanan 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 terkandung, atur opsi autentikasi database berisi MesinDatabase 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 mandiri, 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 terhadap pengguna database mandiri dengan kata sandi pada sistem yang tidak diautentikasi. Untuk mengurangi ancaman ini, batasi akses ke file database, atau hanya izinkan koneksi ke database mandiri dengan menggunakan Autentikasi Windows.

Melarikan Diri dari Database yang Terkandung

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 Terkandung
Bermigrasi ke Database yang Sebagian Berisi