Udostępnij przez


Instancje użytkownika programu SQL Server Express

Pobieranie ADO.NET

Program Microsoft SQL Server Express Edition (SQL Server Express) obsługuje funkcję wystąpienia użytkownika, która jest dostępna tylko w przypadku korzystania z dostawcy danych Microsoft SqlClient dla programu SQL Server. Wystąpienie użytkownika to oddzielna 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 jest uruchamiane w kontekście zabezpieczeń pojedynczego użytkownika na zasadzie jedno wystąpienie na użytkownika.

Możliwości instancji użytkownika

Instancje użytkowników są przydatne dla osób korzystających z systemu Windows na koncie użytkownika z najmniejszymi uprawnieniami (LUA), ponieważ każdy użytkownik ma uprawnienia administratora systemu programu SQL Server (sysadmin) dla instancji uruchomionej na swoim komputerze bez potrzeby działania jako administrator 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ą wyłączone również dla instancji użytkownika.

Aby uzyskać więcej informacji, zobacz "Wystąpienia użytkowników" w książkach programu SQL Server Online.

Uwaga / Notatka

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. Instancje użytkowników są domyślnie włączane po zainstalowaniu programu SQL Server Express i mogą być wyraźnie włączane lub wyłączane przez administratora systemu, który wykonuje procedurę składowaną systemu sp_configure na instancji macierzystej.

-- 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 nazwanymi potokami. Nie można uruchomić instancji użytkownika w zdalnym wystąpieniu programu SQL Server, i loginy SQL Server nie są dozwolone.

Nawiązywanie połączenia z instancją użytkownika

Słowa User Instance kluczowe i AttachDBFilenameConnectionString umożliwiają SqlConnection nawiązywanie połączenia z wystąpieniem użytkownika. Wystąpienia użytkowników są również obsługiwane przez właściwości SqlConnectionStringBuilder, UserInstance i AttachDBFilename.

Zwróć uwagę na poniższe przykładowe parametry połączenia:

  • Słowo kluczowe Data Source odnosi się do nadrzędnego wystąpienia SQL Server Express, które tworzy wystąpienie użytkownika. Wystąpieniem domyślnym jest .\sqlexpress.

  • Integrated Security jest ustawiony na true. Aby nawiązać połączenie z wystąpieniem użytkownika, wymagane jest uwierzytelnianie systemu Windows; loginy programu SQL Server nie są obsługiwane.

  • Element User Instance jest ustawiony na true, co aktywuje instancję użytkownika. (Wartość domyślna to false.)

  • Słowo kluczowe w parametrze połączenia AttachDbFileName służy do dołączania podstawowego pliku bazy danych (.mdf), który musi zawierać pełną ścieżkę dostępu. AttachDbFileName odpowiada również kluczom "właściwości rozszerzonych" i "początkowej nazwy pliku" w parametrach SqlConnection połączenia.

  • |DataDirectory| Ciąg podstawienia obejmujący znaki rury odnosi się do katalogu danych aplikacji otwierającej 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.

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

Uwaga / Notatka

Można również użyć właściwości SqlConnectionStringBuilder, UserInstance i AttachDBFilename aby utworzyć łańcuch połączenia w czasie wykonywania.

Korzystanie z ciągu znaków zastępczych |DataDirectory|

DataDirectory Jest używany w połączeniu z AttachDbFileName , aby wskazać ścieżkę względną do pliku danych, umożliwiając deweloperom tworzenie parametrów 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 użycia DataDirectory, wynikowa ścieżka pliku nie może być położona wyżej w strukturze katalogów niż katalog, do którego odnosi się ciąg podstawienia. Jeśli na przykład w pełni rozwinięty DataDirectory to C:\AppDirectory\app_data, to przykładowy łańcuch połączenia pokazany powyżej działa, ponieważ znajduje się w katalogu C:\AppDirectory lub jego podfolderach. Jednak próba określenia DataDirectory jako |DataDirectory|\..\data spowoduje błąd, ponieważ \data nie jest podkatalogem \AppDirectory.

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

Uwaga / Notatka

Microsoft.Data.SqlClient rozwiązuje ciągi zastępcze do pełnych ścieżek w lokalnym systemie plików. 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 zostaje przekierowany z domyślnego wystąpienia programu SQL Server Express do wystąpienia zainicjowanego w czasie wykonania, działającego na koncie użytkownika wywołującego.

Uwaga / Notatka

Może być konieczne zwiększenie wartości ConnectionTimeout, ponieważ ładowanie instancji użytkowników może trwać dłużej niż w przypadku zwykłych instancji.

Poniższy fragment kodu otwiera nowy SqlConnection, wyświetla łańcuch połączenia w oknie konsoli, a następnie zamyka połączenie przy wychodzeniu z using bloku kodu.

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 / Notatka

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 obiekcie SqlConnection , który znajduje się User Instance=true w parametrach połączenia.

Okres aktywności połączenia indywidualnego 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 się loguje i łączy z instancją użytkownika, instancja jest uruchamiana, jeśli nie działa już wcześniej. Bazy danych instancji użytkownika mają ustawioną AutoClose opcję, dzięki której baza danych jest automatycznie zamykana po okresie braku aktywności. Proces sqlservr.exe, który został uruchomiony, działa przez ograniczony okres czasu po zamknięciu ostatniego połączenia z instancją, więc nie musi być ponownie uruchamiany, jeśli inne połączenie zostanie otwarte przed upływem tego okresu. 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 instancji nadrzędnej może ustawić czas limitu dla instancji użytkownika, zmieniając opcję limitu czasu instancji użytkownika poprzez sp_configure. Wartość domyślna to 60 minut.

Uwaga / Notatka

Jeśli Min Pool Size jest używany w parametrach połączenia z wartością większą niż zero, pula połączeń zawsze będzie utrzymywać kilka otwartych połączeń, a wystąpienie użytkownika nie zostanie automatycznie zamknięte.

Jak działają instancje użytkowników

Podczas pierwszego wygenerowania wystąpienia użytkownika dla każdego użytkownika, systemowe bazy danych master oraz msdb są kopiowane z folderu z Danymi Szablonu do ścieżki w katalogu lokalnego repozytorium danych aplikacji użytkownika, aby były używane wyłącznie przez to wystąpienie użytkownika. Ta ścieżka jest zwykle 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, który hostuje wystąpienie użytkownika, ten użytkownik staje się sysadmin na tym wystąpieniu. Tylko pamięć udostępniona jest włączona dla instancji użytkownika, co oznacza, że możliwe są tylko operacje wykonywane na komputerze lokalnym.

Użytkownicy muszą mieć uprawnienia do odczytu i zapisu w plikach .mdf i ldf określonych w parametrach połączenia.

Uwaga / Notatka

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 instancji 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

Instancje użytkownika udostępniają deweloperom aplikacji baz danych magazyn danych programu SQL Server, który nie wymaga posiadania przez deweloperów kont administracyjnych na swoich komputerach. 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. Instancje użytkowników pozwalają użytkownikom tworzyć wystąpienia podczas wykonywania, które działają w ramach własnego kontekstu bezpieczeństwa użytkownika, a nie w kontekście bezpieczeństwa bardziej uprzywilejowanej usługi systemowej.

Ważne

Wystąpienia użytkowników powinny być używane tylko w przypadkach, 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) lub .NET Core 1.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 użyciem 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.

Dalsze kroki