Wystąpienia użytkowników programu SQL Server Express
Program SQL Server Express Edition obsługuje funkcję wystąpienia użytkownika, która jest dostępna tylko w przypadku korzystania z programu .NET Framework Dostawca danych dla programu SQL Server (SqlClient
). Wystąpienie użytkownika to oddzielne wystąpienie aparatu bazy danych SQL Server Express, które jest generowane przez wystąpienie nadrzędne. Wystąpienia użytkowników umożliwiają użytkownikom, którzy nie są administratorami na swoich komputerach lokalnych, dołączanie baz danych SQL Server Express i łączenie się z nimi. Każde wystąpienie jest uruchamiane w kontekście zabezpieczeń pojedynczego użytkownika w oparciu o jedno wystąpienie na użytkownika.
Możliwości wystąpienia użytkownika
Wystąpienia użytkowników są przydatne dla użytkowników z systemem Windows w ramach konta użytkownika o najniższych uprawnieniach (LUA). Każdy użytkownik ma uprawnienia administratora systemu programu SQL Server (sysadmin
) do wystąpienia uruchomionego na swoim komputerze bez konieczności uruchamiania jako administrator systemu Windows. Oprogramowanie wykonywane na wystąpieniu użytkownika z ograniczonymi uprawnieniami nie może wprowadzać zmian w całym systemie, ponieważ wystąpienie programu SQL Server Express działa na koncie użytkownika innego niż administrator systemu Windows, a nie jako usługa. Każde wystąpienie użytkownika jest odizolowane od wystąpienia nadrzędnego i z innych wystąpień użytkownika uruchomionych na tym samym komputerze. Bazy danych uruchomione w wystąpieniu użytkownika są otwierane tylko w trybie pojedynczego użytkownika i nie jest możliwe, aby wielu użytkowników łączyło się z bazami danych uruchomionymi w wystąpieniu użytkownika. Replikacja i zapytania rozproszone są również wyłączone dla wystąpień użytkowników.
Uwaga
Wystąpienia użytkowników nie są potrzebne dla użytkowników, którzy są już administratorami na własnych komputerach lub w scenariuszach obejmujących wielu użytkowników bazy danych.
Włączanie wystąpień użytkowników
Aby wygenerować wystąpienia użytkowników, musi być uruchomione wystąpienie nadrzędne programu SQL Server Express. Wystąpienia użytkowników są domyślnie włączone po zainstalowaniu programu SQL Server Express i mogą być jawnie włączone lub wyłączone przez administratora systemu wykonującego procedurę składowaną systemu sp_configure w wystąpieniu nadrzędnym.
-- Enable user instances.
sp_configure 'user instances enabled','1'
-- Disable user instances.
sp_configure 'user instances enabled','0'
Protokół sieciowy dla wystąpień użytkownika musi być lokalnymi nazwanych potoków. Nie można uruchomić wystąpienia użytkownika w zdalnym wystąpieniu programu SQL Server, a identyfikatory logowania programu SQL Server nie są dozwolone.
Nawiązywanie połączenia z wystąpieniem użytkownika
Słowa User Instance
kluczowe i AttachDBFilename
ConnectionString umożliwiają SqlConnection nawiązywanie połączenia z wystąpieniem użytkownika. Wystąpienia użytkowników są również obsługiwane przez SqlConnectionStringBuilder UserInstance
właściwości i AttachDBFilename
.
Rozważ następujące parametry połączenia.
Data Source=.\\SQLExpress;Integrated Security=true;
User Instance=true;AttachDBFilename=|DataDirectory|\InstanceDB.mdf;
Initial Catalog=InstanceDB;
W tym parametry połączenia:
- Słowo
Data Source
kluczowe odnosi się do wystąpienia nadrzędnego programu SQL Server Express, które generuje wystąpienie użytkownika. Wystąpieniem domyślnym jest .\sqlexpress. Integrated Security
jest ustawiona natrue
wartość . Aby nawiązać połączenie z wystąpieniem użytkownika, wymagane jest uwierzytelnianie systemu Windows; Identyfikatory logowania programu SQL Server nie są obsługiwane.- Parametr
User Instance
ma wartośćtrue
, która wywołuje wystąpienie użytkownika. (Wartość domyślna tofalse
.) - Słowo
AttachDbFileName
kluczowe parametry połączenia służy do dołączania podstawowego pliku bazy danych (.mdf), który musi zawierać pełną nazwę ścieżki.AttachDbFileName
odpowiada również kluczom "właściwości rozszerzonych" i "początkowej SqlConnection nazwy pliku" w parametry połączenia. |DataDirectory|
Ciąg podstawienia ujęty w symbole potoku odnosi się do katalogu danych aplikacji otwierającego połączenie i zawiera ścieżkę względną wskazującą lokalizację .mdf i plików dziennika ldf. Jeśli chcesz zlokalizować te pliki w innym miejscu, musisz podać pełną ścieżkę do plików.
Uwaga
Możesz również użyć SqlConnectionStringBuilder.UserInstance właściwości iSqlConnectionStringBuilder.AttachDBFilename, aby utworzyć parametry połączenia w czasie wykonywania.
Ważne
Firma Microsoft zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Jeśli łączysz się z usługą Azure SQL, tożsamości zarządzane dla zasobów platformy Azure to zalecana metoda uwierzytelniania.
Korzystanie z |DataDirectory| Ciąg podstawienia
AttachDbFileName
został rozszerzony w ADO.NET 2.0 z wprowadzeniem |DataDirectory|
ciągu podstawienia (ujętego w symbole potoku). DataDirectory
Element jest używany w połączeniu z elementem AttachDbFileName
w celu wskazania ścieżki względnej do pliku danych, dzięki czemu deweloperzy mogą tworzyć parametry połączenia, które są oparte na ścieżce względnej do źródła danych, zamiast być wymagane do określenia pełnej ścieżki.
Lokalizacja fizyczna, która DataDirectory
wskazuje, zależy od typu aplikacji. W tym przykładzie plik Northwind.mdf, który ma zostać dołączony, znajduje się w folderze \app_data aplikacji.
Data Source=.\\SQLExpress;Integrated Security=true;
User Instance=true;
AttachDBFilename=|DataDirectory|\app_data\Northwind.mdf;
Initial Catalog=Northwind;
W przypadku DataDirectory
użycia wynikowa ścieżka pliku nie może być wyższa w strukturze katalogów niż katalog wskazywany przez ciąg podstawienia. Jeśli na przykład w pełni rozwinięte DataDirectory
jest C:\AppDirectory\app_data, przykładowa parametry połączenia pokazana powyżej działa, ponieważ znajduje się poniżej c:\AppDirectory. Jednak próba określenia DataDirectory
jako |DataDirectory|\..\data
spowoduje błąd, ponieważ \data nie jest podkatalogem \AppDirectory.
Jeśli parametry połączenia ma nieprawidłowo sformatowany ciąg podstawienia, ArgumentException zostanie zgłoszony element .
Uwaga
System.Data.SqlClient usuwa ciągi podstawienia w pełne ścieżki względem systemu plików komputera lokalnego. W związku z tym nazwy ścieżek serwera zdalnego, PROTOKOŁU HTTP i UNC nie są obsługiwane. Wyjątek jest zgłaszany, gdy połączenie jest otwarte, jeśli serwer nie znajduje się na komputerze lokalnym.
Po otwarciu SqlConnection jest przekierowywany z domyślnego wystąpienia programu SQL Server Express do wystąpienia zainicjowanego w czasie wykonywania uruchomionego na koncie obiektu wywołującego.
Uwaga
Może być konieczne zwiększenie ConnectionTimeout wartości, ponieważ obciążenia wystąpień użytkowników mogą trwać dłużej niż w przypadku zwykłych wystąpień.
Poniższy fragment kodu otwiera nowy SqlConnection
element , wyświetla parametry połączenia w oknie konsoli, a następnie zamyka połączenie podczas zamykania using
bloku kodu.
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);
}
}
Uwaga
Wystąpienia użytkowników nie są obsługiwane w kodzie środowiska uruchomieniowego języka wspólnego (CLR), który działa wewnątrz programu SQL Server. Element InvalidOperationException jest zgłaszany, jeśli Open
jest wywoływany na SqlConnection obiekcie, który znajduje się User Instance=true
w parametry połączenia.
Okres istnienia połączenia wystąpienia użytkownika
W przeciwieństwie do wersji programu SQL Server, które działają jako usługa, wystąpienia programu SQL Server Express nie muszą być uruchamiane ręcznie i zatrzymywane. Za każdym razem, gdy użytkownik loguje się i nawiązuje połączenie z wystąpieniem użytkownika, wystąpienie użytkownika jest uruchamiane, jeśli nie jest jeszcze uruchomione. Bazy danych wystąpień użytkownika mają ustawioną AutoClose
opcję, aby baza danych została automatycznie zamknięta po okresie braku aktywności. Proces sqlservr.exe, który jest uruchamiany, jest uruchamiany przez ograniczony limit czasu po zamknięciu ostatniego połączenia z wystąpieniem, więc nie musi być ponownie uruchamiany, jeśli inne połączenie zostanie otwarte przed wygaśnięciem limitu czasu. Wystąpienie użytkownika zostanie automatycznie zamknięte, jeśli żadne nowe połączenie nie zostanie otwarte przed upływem tego limitu czasu. Administrator systemu w wystąpieniu nadrzędnym może ustawić czas trwania limitu czasu dla wystąpienia użytkownika przy użyciu sp_configure , aby zmienić opcję limitu czasu wystąpienia użytkownika. Wartość domyślna to 60 minut.
Uwaga
Jeśli Min Pool Size
jest używany w parametry połączenia z wartością większą niż zero, moduł puli połączeń zawsze będzie obsługiwać kilka otwartych połączeń, a wystąpienie użytkownika nie zostanie automatycznie zamknięte.
Jak działają wystąpienia użytkowników
Przy pierwszym wygenerowaniu wystąpienia użytkownika dla każdego użytkownika główne i bazy danych systemu msdb są kopiowane z folderu Dane szablonu do ścieżki w katalogu lokalnego repozytorium danych aplikacji użytkownika do wyłącznego użytku przez wystąpienie użytkownika. Ta ścieżka jest zwykle następująca C:\Documents and Settings\<UserName>\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS
: . Po uruchomieniu wystąpienia użytkownika pliki tempdb, dziennika i śledzenia są również zapisywane w tym katalogu. Dla wystąpienia jest generowana nazwa, która ma być unikatowa dla każdego użytkownika.
Domyślnie wszyscy członkowie grupy Windows Builtin\Users mają uprawnienia do nawiązywania połączenia w wystąpieniu lokalnym, a także uprawnienia do odczytu i wykonywania w plikach binarnych programu SQL Server. Po zweryfikowaniu poświadczeń użytkownika wywołującego hostujący wystąpienie użytkownika użytkownik staje się on tym wystąpieniem sysadmin
. Tylko pamięć udostępniona jest włączona dla wystąpień użytkownika, co oznacza, że możliwe są tylko operacje na komputerze lokalnym.
Użytkownicy muszą mieć uprawnienia do odczytu i zapisu w plikach .mdf i ldf określonych w parametry połączenia.
Uwaga
Pliki .mdf i ldf reprezentują odpowiednio pliki bazy danych i dziennika. Te dwa pliki są zestawem dopasowanym, dlatego należy zachować ostrożność podczas operacji tworzenia kopii zapasowych i przywracania. Plik bazy danych zawiera informacje o dokładnej wersji pliku dziennika, a baza danych nie zostanie otwarta, jeśli zostanie ona połączona z niewłaściwym plikiem dziennika.
Aby uniknąć uszkodzenia danych, baza danych w wystąpieniu użytkownika jest otwierana z wyłącznym dostępem. Jeśli dwa różne wystąpienia użytkowników współdzielą tę samą bazę danych na tym samym komputerze, użytkownik w pierwszym wystąpieniu musi zamknąć bazę danych, zanim będzie można ją otworzyć w drugim wystąpieniu.
Scenariusze wystąpień użytkownika
Wystąpienia użytkowników udostępniają deweloperom aplikacji bazy danych magazyn danych programu SQL Server, który nie zależy od deweloperów z kontami administracyjnymi na komputerach deweloperskich. Wystąpienia użytkowników są oparte na modelu Access/Jet, w którym aplikacja bazy danych po prostu łączy się z plikiem, a użytkownik automatycznie ma pełne uprawnienia do wszystkich obiektów bazy danych bez konieczności interwencji administratora systemu w celu udzielenia uprawnień. Ma działać w sytuacjach, gdy użytkownik jest uruchomiony w ramach konta użytkownika o najniższych uprawnieniach (LUA) i nie ma uprawnień administracyjnych na serwerze lub komputerze lokalnym, ale musi tworzyć obiekty bazy danych i aplikacje. Wystąpienia użytkowników umożliwiają użytkownikom tworzenie wystąpień w czasie wykonywania uruchamianych w ramach własnego kontekstu zabezpieczeń użytkownika, a nie w kontekście zabezpieczeń bardziej uprzywilejowanej usługi systemowej.
Ważne
Wystąpienia użytkowników powinny być używane tylko w scenariuszach, w których wszystkie aplikacje korzystające z niego są w pełni zaufane.
Scenariusze wystąpień użytkownika obejmują:
Każda aplikacja pojedynczego użytkownika, w której udostępnianie danych nie jest wymagane.
Wdrożenie Technologii ClickOnce. Jeśli program .NET Framework 2.0 (lub nowszy) i program SQL Server Express są już zainstalowane na komputerze docelowym, pakiet instalacyjny pobrany w wyniku akcji ClickOnce można zainstalować i używać przez użytkowników niebędących administratorami. Należy pamiętać, że administrator musi zainstalować program SQL Server Express, jeśli jest to część konfiguracji. Aby uzyskać więcej informacji, zobacz ClickOnce Deployment for Windows Forms (Wdrażanie technologii ClickOnce dla formularzy systemu Windows).
Dedykowane ASP.NET hostingu przy użyciu uwierzytelniania systemu Windows. Pojedyncze wystąpienie programu SQL Server Express może być hostowane w intranecie. Aplikacja łączy się przy użyciu konta platformy ASPNET systemu Windows, a nie personifikacji. Wystąpienia użytkowników nie powinny być używane w scenariuszach hostingu innych firm ani udostępnionych, w których wszystkie aplikacje będą współużytkować to samo wystąpienie użytkownika i nie pozostaną już odizolowane od siebie.