Membuat database Anda portabel dengan menggunakan database mandiri

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Gunakan pengguna database mandiri untuk mengautentikasi koneksi SQL Server dan Azure SQL Database di tingkat database. Database mandiri adalah database yang terisolasi dari database lain dan dari instans SQL Server atau SQL Database (dan master database) yang menghosting database.

SQL Server mendukung pengguna database mandiri untuk autentikasi Windows dan SQL Server. Saat Anda menggunakan SQL Database, gabungkan pengguna database mandiri dengan aturan firewall tingkat database.

Artikel ini meninjau manfaat menggunakan model database yang terkandung dibandingkan dengan model login/pengguna tradisional dan aturan firewall tingkat Windows atau server. Skenario tertentu, pengelolaan, atau logika bisnis aplikasi mungkin masih memerlukan penggunaan model login/pengguna tradisional dan aturan firewall tingkat server.

Login tradisional dan model pengguna

Dalam model koneksi tradisional, pengguna Windows atau anggota grup Windows tersambung ke Mesin Database dengan menyediakan kredensial pengguna atau grup yang diautentikasi oleh Windows. Atau pengguna dapat memberikan nama dan kata sandi dan menyambungkan dengan menggunakan autentikasi SQL Server. Dalam kedua kasus, database master harus memiliki login yang cocok dengan kredensial koneksi.

Setelah Mesin Database mengonfirmasi kredensial autentikasi Windows atau mengautentikasi kredensial autentikasi SQL Server, koneksi biasanya mencoba menyambungkan ke database pengguna. Untuk menyambungkan ke database pengguna, login harus dipetakan ke (yaitu, terkait dengan) pengguna database dalam database pengguna. string koneksi mungkin juga menentukan menyambungkan ke database tertentu, yang bersifat opsional di SQL Server tetapi diperlukan dalam SQL Database.

Prinsip pentingnya adalah bahwa login (dalam master database) dan pengguna (dalam database pengguna) harus ada dan terkait satu sama lain. Koneksi ke database pengguna memiliki dependensi saat masuk dalam master database. Dependensi ini membatasi kemampuan database untuk dipindahkan ke instans SQL Server hosting atau server Azure SQL Database yang berbeda.

Jika koneksi ke master database tidak tersedia (misalnya, failover sedang berlangsung), waktu koneksi keseluruhan akan meningkat, atau koneksi mungkin kehabisan waktu. Koneksi yang tidak tersedia dapat mengurangi skalabilitas koneksi.

Model pengguna database mandiri

Dalam model pengguna database yang terkandung, login dalam master database tidak ada. Sebagai gantinya, proses autentikasi terjadi di database pengguna. Pengguna database di database pengguna tidak memiliki login terkait dalam master database.

Model pengguna database mandiri mendukung autentikasi Windows dan autentikasi SQL Server. Anda dapat menggunakannya di SQL Server dan SQL Database.

Untuk menyambungkan sebagai pengguna database mandiri, string koneksi harus selalu berisi parameter untuk database pengguna. Mesin Database menggunakan parameter ini untuk mengetahui database mana yang bertanggung jawab untuk mengelola proses autentikasi.

Aktivitas pengguna database yang terkandung terbatas pada database autentikasi. Akun pengguna database harus dibuat secara independen di setiap database yang dibutuhkan pengguna. Untuk mengubah database, pengguna SQL Database harus membuat koneksi baru. Pengguna database mandiri di SQL Server dapat mengubah database jika pengguna yang identik ada di database lain.

Di Azure, SQL Database dan Azure Synapse Analytics mendukung identitas dari ID Microsoft Entra (sebelumnya Azure Active Directory) sebagai pengguna database mandiri. SQL Database mendukung pengguna database mandiri yang menggunakan autentikasi SQL Server, tetapi Azure Synapse Analytics tidak. Untuk informasi selengkapnya, lihat Koneksi ke SQL Database dengan menggunakan autentikasi Microsoft Entra.

Saat Anda menggunakan autentikasi Microsoft Entra, pengguna dapat membuat koneksi dari SQL Server Management Studio dengan menggunakan autentikasi universal Microsoft Entra. Administrator dapat mengonfigurasi autentikasi universal untuk memerlukan autentikasi multifaktor, yang memverifikasi identitas dengan menggunakan panggilan telepon, pesan teks, kartu pintar dengan PIN, atau pemberitahuan aplikasi seluler. Untuk informasi selengkapnya, lihat Menggunakan autentikasi multifaktor Microsoft Entra.

Untuk SQL Database dan Azure Synapse Analytics, nama database selalu diperlukan dalam string koneksi. Jadi Anda tidak perlu mengubah string koneksi saat beralih dari model tradisional ke model pengguna database yang terkandung. Untuk koneksi SQL Server, nama database harus ditambahkan ke string koneksi, jika belum ada.

Penting

Saat Anda menggunakan model tradisional, peran tingkat server dan izin tingkat server dapat membatasi akses ke semua database. Saat Anda menggunakan model database yang terkandung, pemilik database dan pengguna database yang memiliki izin ALTER ANY USER dapat memberikan akses ke database. Izin ini mengurangi kontrol akses login server yang sangat istimewa dan memperluas kontrol akses untuk menyertakan pengguna database yang sangat istimewa.

Firewall

Server SQL

Untuk SQL Server, aturan Windows Firewall berlaku untuk semua koneksi dan memiliki efek yang sama pada login (koneksi model tradisional) dan pengguna database yang terkandung. Untuk informasi selengkapnya tentang Windows Firewall, lihat Mengonfigurasi Windows Firewall untuk akses Mesin Database.

Firewall SQL Database

SQL Database memungkinkan aturan firewall terpisah untuk koneksi tingkat server (login) dan untuk koneksi tingkat database (pengguna database yang terkandung). Saat SQL Database tersambung ke database pengguna, SQL Database pertama-tama memeriksa aturan firewall database. Jika tidak ada aturan yang memungkinkan akses ke database, SQL Database memeriksa aturan firewall tingkat server. Memeriksa aturan firewall tingkat server memerlukan akses ke database server master SQL Database.

Aturan firewall tingkat database, dikombinasikan dengan pengguna database mandiri, dapat menghilangkan kebutuhan untuk mengakses master database server selama koneksi. Hasilnya adalah peningkatan skalabilitas koneksi.

Untuk informasi selengkapnya tentang aturan firewall SQL Database, lihat topik berikut ini:

Perbedaan sintaksis

Model tradisional Model pengguna database mandiri
Saat Anda tersambung ke master database:

CREATE LOGIN login_name WITH PASSWORD = 'strong_password';

Kemudian, saat Anda tersambung ke database pengguna:

CREATE USER 'user_name' FOR LOGIN 'login_name';
Saat Anda tersambung ke database pengguna:

CREATE USER user_name WITH PASSWORD = 'strong_password';
Model tradisional Model pengguna database mandiri
Untuk mengubah kata sandi dalam konteks master database:

ALTER LOGIN login_name WITH PASSWORD = 'strong_password';
Untuk mengubah kata sandi dalam konteks database pengguna:

ALTER USER user_name WITH PASSWORD = 'strong_password';

Instans Terkelola SQL

Azure SQL Managed Instance berperilaku seperti SQL Server lokal dalam konteks database yang terkandung. Pastikan untuk mengubah konteks database Anda dari database master ke database pengguna saat Anda membuat pengguna mandiri. Selain itu, seharusnya tidak ada koneksi aktif ke database pengguna saat Anda mengatur opsi penahanan. Gunakan kode berikut sebagai panduan.

Peringatan

Contoh skrip berikut menggunakan kill pernyataan untuk menutup semua proses pengguna pada database. Pastikan Anda memahami konsekuensi dari skrip ini dan bahwa itu sesuai dengan bisnis Anda sebelum menjalankannya. Pastikan juga bahwa tidak ada koneksi lain yang aktif pada database SQL Managed Instance Anda, karena skrip akan mengganggu proses lain yang berjalan pada database.

USE master;

SELECT * FROM sys.dm_exec_sessions
WHERE database_id  = db_id('Test')

DECLARE @kill_string varchar(8000) = '';
SELECT @kill_string = @kill_string + 'KILL ' + str(session_id) + '; '  
FROM sys.dm_exec_sessions
WHERE database_id  = db_id('Test') and is_user_process = 1;

EXEC(@kill_string);
GO

sp_configure 'contained database authentication', 1;  
GO
 
RECONFIGURE;  
GO 

SELECT * FROM sys.dm_exec_sessions
WHERE database_id  = db_id('Test')

ALTER DATABASE Test
SET containment=partial

USE Test;  
GO 

CREATE USER Carlo  
WITH PASSWORD='Enterpwdhere*'  

SELECT containment_desc FROM sys.databases
WHERE name='Test'

Keterangan

  • Pengguna database mandiri harus diaktifkan untuk setiap instans SQL Server. Untuk informasi selengkapnya, lihat Autentikasi database mandiri (opsi konfigurasi server).
  • Pengguna database yang berisi dan login dengan nama yang tidak tumpang tindih dapat hidup berdampingan dalam aplikasi Anda.
  • Asumsikan bahwa login dalam master database memiliki nama1. Jika Anda membuat pengguna database mandiri bernama name1, ketika nama database disediakan dalam string koneksi, konteks pengguna database akan dipilih melalui konteks masuk untuk menyambungkan ke database. Artinya, pengguna database mandiri lebih diutamakan daripada login yang memiliki nama yang sama.
  • Di SQL Database, nama pengguna database mandiri tidak boleh sama dengan nama akun admin server.
  • Akun admin server SQL Database tidak pernah bisa menjadi pengguna database mandiri. Admin server memiliki izin yang memadai untuk membuat dan mengelola pengguna database mandiri. Admin server dapat memberikan izin kepada pengguna database mandiri pada database pengguna.
  • Karena pengguna database mandiri adalah prinsipal tingkat database, Anda perlu membuat pengguna database mandiri di setiap database tempat Anda akan menggunakannya. Identitas terbatas pada database. Identitas independen (dalam semua aspek) dari pengguna yang memiliki nama yang sama dan kata sandi yang sama di database lain di server yang sama.
  • Gunakan kekuatan kata sandi yang sama dengan yang biasanya Anda gunakan untuk masuk.