Instans Pengguna SQL Server Express

Microsoft SQL Server Express Edition (SQL Server Express) mendukung fitur instans pengguna, yang hanya tersedia saat menggunakan Penyedia Data .NET Framework untuk SQL Server (SqlClient). Instans pengguna adalah instans terpisah dari SQL Server Express Database Engine yang dihasilkan oleh instans induk. Instans pengguna memungkinkan pengguna yang bukan administrator di komputer lokal mereka untuk melampirkan dan menyambung ke database SQL Server Express. Setiap instans berjalan di bawah konteks keamanan pengguna individu, dengan basis satu instans per pengguna.

Kemampuan Instans Pengguna

Instans pengguna berguna untuk pengguna yang menjalankan Windows di bawah akun pengguna dengan hak paling rendah (LUA). Setiap pengguna memiliki hak istimewa administrator sistem SQL Server (sysadmin) atas instans yang berjalan di komputer mereka tanpa perlu menjalankan sebagai administrator Windows juga. Perangkat lunak yang dijalankan pada instans pengguna dengan izin terbatas tidak dapat membuat perubahan di seluruh sistem karena instans SQL Server Express berjalan di bawah akun Windows non-administrator pengguna, bukan sebagai layanan. Setiap instans pengguna diisolasi dari instans induknya dan dari instans pengguna lain yang berjalan di komputer yang sama. Basis data yang berjalan pada instans pengguna dibuka hanya dalam mode pengguna tunggal, dan tidak mungkin bagi banyak pengguna untuk terhubung ke database yang berjalan pada instans pengguna. Replikasi dan kueri terdistribusi juga dinonaktifkan untuk instans pengguna.

Catatan

Instans pengguna tidak diperlukan untuk pengguna yang sudah menjadi administrator di komputer mereka sendiri, atau untuk skenario yang melibatkan banyak pengguna database.

Mengaktifkan Instans Pengguna

Untuk menghasilkan instans pengguna, instans induk SQL Server Express harus dijalankan. Instans pengguna diaktifkan secara default saat SQL Server Express diinstal, dan dapat diaktifkan atau dinonaktifkan secara eksplisit oleh administrator sistem yang menjalankan prosedur tersimpan sistem sp_configure pada instans induk.

-- Enable user instances.  
sp_configure 'user instances enabled','1'
  
-- Disable user instances.  
sp_configure 'user instances enabled','0'  

Protokol jaringan untuk instans pengguna harus berupa Pipa yang dinamai lokal. Instans pengguna tidak dapat dimulai pada instans jauh dari SQL Server, dan login SQL Server tidak diperbolehkan.

Menghubungkan ke Instans Pengguna

Kata kunci User Instance dan AttachDBFilenameConnectionString memungkinkan SqlConnection terhubung ke instans pengguna. Instans pengguna juga didukung oleh properti SqlConnectionStringBuilderUserInstance dan AttachDBFilename.

Perhatikan hal berikut tentang contoh string koneksi yang ditunjukkan di bawah ini:

  • Kata kunci Data Source merujuk ke instans induk SQL Server Express yang menghasilkan instans pengguna. Instans defaultnya adalah .\sqlexpress.

  • Integrated Security diatur ke true. Untuk terhubung ke instans pengguna, diperlukan Autentikasi Windows; Login SQL Server tidak didukung.

  • User Instance diatur ke true, yang memanggil instans pengguna. (Defaultnya adalah false.)

  • Kata kunci string koneksi AttachDbFileName digunakan untuk melampirkan file database utama (.mdf), yang harus menyertakan nama path lengkap. AttachDbFileName juga sesuai dengan kunci "properti yang diperluas" dan "nama file awal" dalam string koneksi SqlConnection.

  • String substitusi |DataDirectory| yang dilampirkan dalam simbol pipa merujuk ke direktori data aplikasi yang membuka koneksi dan menyediakan jalur relatif yang menunjukkan lokasi database .mdf dan .ldf serta file log. Jika Anda ingin mencari file ini di tempat lain, Anda harus menyediakan path lengkap ke file tersebut.

Data Source=.\\SQLExpress;Integrated Security=true;  
User Instance=true;AttachDBFilename=|DataDirectory|\InstanceDB.mdf;  
Initial Catalog=InstanceDB;  

Catatan

Anda juga dapat menggunakan properti SqlConnectionStringBuilderUserInstance dan AttachDBFilename untuk membangun string koneksi pada runtime.

Menggunakan |DataDirectory| String Substitusi

AttachDbFileName diperluas di ADO.NET 2.0 dengan diperkenalkannya string substitusi |DataDirectory| (terlampir dalam simbol pipa). DataDirectory digunakan bersama dengan AttachDbFileName untuk menunjukkan jalur relatif ke file data, memungkinkan pengembang membuat string koneksi yang didasarkan pada jalur relatif ke sumber data alih-alih diharuskan menentukan jalur lengkap.

Lokasi fisik yang ditunjuk DataDirectory bergantung pada jenis aplikasi. Dalam contoh ini, file Northwind.mdf yang akan dilampirkan terletak di folder \app_data aplikasi.

Data Source=.\\SQLExpress;Integrated Security=true;  
User Instance=true;  
AttachDBFilename=|DataDirectory|\app_data\Northwind.mdf;  
Initial Catalog=Northwind;  

Saat DataDirectory digunakan, jalur file yang dihasilkan tidak boleh lebih tinggi dalam struktur direktori daripada direktori yang ditunjuk oleh string substitusi. Misalnya, jika DataDirectory yang diperluas sepenuhnya adalah C:\AppDirectory\app_data, maka contoh string koneksi yang ditampilkan di atas berfungsi karena berada di bawah c:\AppDirectory. Namun, mencoba menetapkan DataDirectory sebagai |DataDirectory|\..\data akan menghasilkan kesalahan karena \data bukan subdirektori dari \AppDirectory.

Jika string koneksi memiliki string substitusi yang tidak diformat dengan benar, ArgumentException akan ditampilkan.

Catatan

System.Data.SqlClient menyelesaikan string substitusi menjadi path lengkap terhadap sistem file komputer lokal. Oleh karena itu, nama jalur server jauh, HTTP, dan UNC tidak didukung. Pengecualian ditampilkan saat sambungan dibuka jika server tidak terletak di komputer lokal.

Ketika SqlConnection dibuka, itu dialihkan dari instans SQL Server Express default ke instans yang dimulai runtime yang berjalan di bawah akun pemanggil.

Catatan

Mungkin perlu untuk meningkatkan nilai ConnectionTimeout karena instans pengguna mungkin membutuhkan waktu lebih lama untuk memuat daripada instans biasa.

Fragmen kode berikut membuka SqlConnection baru, menampilkan string koneksi di jendela konsol, lalu menutup koneksi saat keluar dari blok kode using.

Private Sub OpenSqlConnection()  
    ' Retrieve the connection string.  
    Dim connectionString As String = GetConnectionString()  
  
    Using connection As New SqlConnection(connectionString)  
        connection.Open()  
        Console.WriteLine("ConnectionString: {0}", _  
           connection.ConnectionString)  
    End Using  
End Sub  
private static void OpenSqlConnection()  
{  
    // Retrieve the connection string.  
    string connectionString = GetConnectionString();  
  
    using (SqlConnection connection =
        new SqlConnection(connectionString))  
    {  
        connection.Open();  
        Console.WriteLine("ConnectionString: {0}",
             connection.ConnectionString);  
    }  
}  

Catatan

Instans pengguna tidak didukung dalam kode runtime (CLR) bahasa umum yang berjalan di dalam SQL Server. InvalidOperationException ditampilkan jika Open dipanggil pada SqlConnection yang memiliki User Instance=true dalam string koneksi.

Masa Pakai Koneksi Instans Pengguna

Tidak seperti versi SQL Server yang dijalankan sebagai layanan, instans SQL Server Express tidak perlu dimulai dan dihentikan secara manual. Setiap kali pengguna masuk dan terhubung ke instans pengguna, instans pengguna dimulai jika belum berjalan. Basis data instans pengguna memiliki opsi AutoClose yang diatur sehingga basis data dimatikan secara otomatis setelah periode tidak aktif. Proses sqlservr.exe yang dimulai tetap berjalan selama periode waktu habis yang terbatas setelah koneksi terakhir ke instans ditutup, sehingga tidak perlu dimulai ulang jika koneksi lain dibuka sebelum waktu habis. Instans pengguna mati secara otomatis jika tidak ada koneksi baru yang terbuka sebelum periode waktu habis tersebut berakhir. Administrator sistem pada instans induk dapat menyetel durasi periode waktu habis untuk instans pengguna dengan menggunakan sp_configure untuk mengubah opsi runtime instans pengguna. Defaultnya adalah 60 menit.

Catatan

Jika Min Pool Size digunakan dalam string koneksi dengan nilai lebih besar dari nol, kumpulan koneksi akan selalu mempertahankan beberapa koneksi yang terbuka, dan instans pengguna tidak akan dimatikan secara otomatis.

Cara Kerja Instans Pengguna

Pertama kali instans pengguna dibuat untuk setiap pengguna, database sistem master dan msdb disalin dari folder Data Template ke jalur di bawah direktori penyimpanan data aplikasi lokal pengguna untuk eksklusif digunakan oleh instans pengguna. Jalur ini biasanya C:\Documents and Settings\<UserName>\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS. Saat instans pengguna dijalankan, file tempdb, log, dan trace juga ditulis ke direktori ini. Nama dibuat untuk instans, yang dijamin unik untuk setiap pengguna.

Secara default semua anggota grup Windows Builtin\Users diberikan izin untuk terhubung pada instans lokal serta membaca dan menjalankan izin pada biner SQL Server. Setelah kredensial pengguna panggilan yang menghosting instans pengguna telah diverifikasi, pengguna tersebut menjadi sysadmin pada instans tersebut. Hanya memori bersama yang diaktifkan untuk instans pengguna, yang berarti bahwa hanya operasi pada mesin lokal yang dimungkinkan.

Pengguna harus diberikan izin baca dan tulis pada file .mdf dan .ldf yang ditentukan dalam string koneksi.

Catatan

File .mdf dan .ldf masing-masing mewakili database dan file log. Kedua file ini adalah kumpulan yang cocok, jadi harus berhati-hati selama operasi pencadangan dan pemulihan. File database berisi informasi tentang versi yang tepat dari file log, dan database tidak akan terbuka jika digabungkan dengan file log yang salah.

Untuk menghindari kerusakan data, database dalam instans pengguna dibuka dengan akses eksklusif. Jika dua instans pengguna yang berbeda berbagi database yang sama di komputer yang sama, pengguna pada instans pertama harus menutup database sebelum dapat dibuka di instans kedua.

Skenario Instans Pengguna

Instans pengguna menyediakan pengembang aplikasi database dengan penyimpanan data SQL Server yang tidak bergantung pada pengembang yang memiliki akun administratif di komputer pengembangan mereka. Instans pengguna didasarkan pada model Access/Jet, di mana aplikasi database hanya terhubung ke file, dan pengguna secara otomatis memiliki izin penuh pada semua objek database tanpa memerlukan intervensi dari administrator sistem untuk memberikan izin. Ini dimaksudkan untuk bekerja dalam situasi di mana pengguna berjalan di bawah akun pengguna dengan hak paling rendah (LUA) dan tidak memiliki hak administratif di server atau mesin lokal, namun perlu membuat objek dan aplikasi basis data. Instans pengguna memungkinkan pengguna untuk membuat instans pada runtime yang berjalan di bawah konteks keamanan pengguna sendiri, dan bukan dalam konteks keamanan layanan sistem yang lebih istimewa.

Penting

Instans pengguna hanya boleh digunakan dalam skenario di mana semua aplikasi yang menggunakannya sepenuhnya tepercaya.

Skenario instans pengguna meliputi:

  • Setiap aplikasi pengguna tunggal di mana berbagi data tidak diperlukan.

  • Penerapan ClickOnce. Jika .NET Framework 2.0 (atau yang lebih baru) dan SQL Server Express telah diinstal di komputer target, paket penginstalan yang diunduh sebagai hasil dari tindakan ClickOnce dapat diinstal dan digunakan oleh pengguna non-administrator. Perhatikan bahwa administrator harus menginstal SQL Server Express jika itu adalah bagian dari penyiapan. Untuk informasi lebih lanjut, lihat ClickOnce Deployment untuk Formulir Windows.

  • Hosting ASP.NET khusus menggunakan Autentikasi Windows. Instans SQL Server Express tunggal dapat di-host di intranet. Aplikasi terhubung menggunakan akun Windows ASPNET, bukan dengan menggunakan peniruan identitas. Instans pengguna tidak boleh digunakan untuk skenario hosting bersama atau pihak ketiga di mana semua aplikasi akan berbagi instans pengguna yang sama dan tidak lagi terisolasi satu sama lain.

Lihat juga