Udostępnij przez


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 podczas korzystania z .NET Framework Data Provider for SQL Server (SqlClient). Wystąpienie użytkownika to osobna instancja silnika bazy danych SQL Server Express generowana przez instancję nadrzędną. 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 uruchamiane jest w kontekście zabezpieczeń pojedynczego użytkownika w systemie jedno wystąpienie na użytkownika.

Możliwości wystąpienia użytkownika

Wystąpienia użytkowników są przydatne dla osób korzystających z systemu Windows na koncie użytkownika o ograniczonych uprawnieniach (LUA). Każdy użytkownik ma uprawnienia administratora systemu programu SQL Server (sysadmin) dla instancji uruchomionej 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 oraz zapytania rozproszone są także wyłączone dla instancji użytkownika.

Uwaga

Instancje użytkowników nie są potrzebne dla użytkowników, którzy są już administratorami na własnych komputerach, ani przy scenariuszach z wieloma użytkownikami bazy danych.

Włącz wystąpienia użytkowników

Aby wygenerować wystąpienia użytkowników, musi być uruchomione wystąpienie nadrzędne programu SQL Server Express. Instancje użytkownika są domyślnie włączone po zainstalowaniu programu SQL Server Express i mogą być jawnie włączane lub wyłączane przez administratora systemu wykonującego procedurę składowaną systemową w instancji nadrzędnej.

-- 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 logowania do serwera SQL nie są dozwolone.

Połącz się z instancją użytkownika

Słowa kluczowe User Instance oraz AttachDBFilenameConnectionString umożliwiają SqlConnection połączenie z wystąpieniem użytkownika. Wystąpienia użytkowników są również obsługiwane przez właściwości SqlConnectionStringBuilderUserInstance 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 łańcuchu 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 ustawione na true. Aby nawiązać połączenie z wystąpieniem użytkownika, wymagane jest uwierzytelnianie systemu Windows; loginy SQL Server nie są obsługiwane.
  • Parametr User Instance jest ustawiony na true, co wywołuje instancję użytkownika. (Wartość domyślna to false.)
  • Oznaczenie AttachDbFileName parametru połączenia służy do dołączenia podstawowego pliku bazy danych (.mdf), który musi zawierać pełną ścieżkę. AttachDbFileName odpowiada również kluczom "właściwości rozszerzonych" i "nazwy początkowej pliku" w parametrze połączenia SqlConnection.
  • |DataDirectory| Ciąg podstawienia ujęty w znaki rury odnosi się do katalogu danych aplikacji otwierającego połączenie i zawiera ścieżkę względną wskazującą lokalizację plików bazy danych .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żna również użyć właściwości SqlConnectionStringBuilder.UserInstance i SqlConnectionStringBuilder.AttachDBFilename do utworzenia ciągu 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 ciągu zastępczego |DataDirectory|

AttachDbFileName został rozszerzony w ADO.NET 2.0 z wprowadzeniem |DataDirectory| ciągu podstawienia (ujętego w pionowe kreski). DataDirectoryElement 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;

Gdy DataDirectory jest użyto, 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ładowy parametr połączenia pokazany powyżej działa, ponieważ znajduje się w katalogu c:\AppDirectory. Jednak próba określenia DataDirectory jako |DataDirectory|\..\data spowoduje błąd, ponieważ \data nie jest podkatalogem \AppDirectory.

Jeśli parametr połączenia ma nieprawidłowo sformatowany ciąg podstawienia, ArgumentException zostanie zgłoszony.

Uwaga

System.Data.SqlClient przekształca 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 przez środowisko uruchomieniowe, które działa na koncie użytkownika wywołującego.

Uwaga

Może być konieczne zwiększenie wartości ConnectionTimeout, ponieważ wystąpienia użytkowników mogą ładować się dłużej niż zwykłe wystąpienia.

Poniższy fragment kodu otwiera nowy SqlConnection, wyświetla parametry połączenia w oknie konsoli, a następnie zamyka połączenie przy wychodzeniu z bloku kodu 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);
    }
}

Uwaga

Wystąpienia użytkowników nie są obsługiwane w CLR działającym w SQL Server. Element InvalidOperationException jest zgłaszany, jeśli Open jest wywoływany na SqlConnection obiekcie, który ma User Instance=true w parametrach połączenia.

Czas trwania połączenia instancji 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, o ile nie jest już aktywne. Bazy danych wystąpień użytkownika mają ustawioną opcję AutoClose, aby była automatycznie zamykana po okresie braku aktywności. Proces sqlservr.exe, który jest uruchamiany, działa przez określony czas po zamknięciu ostatniego połączenia z instancją, więc nie trzeba go ponownie uruchamiać, jeśli inne połączenie zostanie otwarte przed jego upływem. 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 opcji sp_configure zmiany limitu czasu wystąpienia użytkownika . Wartość domyślna to 60 minut.

Uwaga

Jeśli Min Pool Size jest używany w parametrze połączenia z wartością większą niż zero, puler 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 generowaniu wystąpienia dla każdego użytkownika, systemowe bazy danych master i msdb są kopiowane z folderu "Dane szablonu" do ścieżki wewnątrz 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 z lokalną instancją, a także uprawnienia do odczytu i wykonywania na plikach binarnych SQL Server. Pl-PL: Po zweryfikowaniu poświadczeń użytkownika wywołującego, który hostuje wystąpienie użytkownika, ten użytkownik staje się sysadmin na tym wystąpieniu. Tylko pamięć współdzielona jest włączona dla wystąpień użytkownika, co oznacza, że operacje są możliwe jedynie na maszynie lokalnej.

Użytkownicy muszą mieć uprawnienia do odczytu i zapisu w plikach .mdf i .ldf określonych w łańcuchu 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 sesji 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 baz danych magazyn SQL Server, który nie wymaga posiadania kont administracyjnych na ich 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 z nich korzystające 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).

  • Dedykowany hosting ASP.NET z wykorzystaniem uwierzytelniania 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.

Zobacz też