SQL Server Express-BenutzerinstanzenSQL Server Express User Instances

Microsoft SQL Server Express Edition (SQL Server Express) unterstützt die Benutzerinstanzfunktion, die die Verwendung des .NET Framework-Datenanbieters für SQL Server (SqlClient) voraussetzt.Microsoft SQL Server Express Edition (SQL Server Express) supports the user instance feature, which is only available when using the .NET Framework Data Provider for SQL Server (SqlClient). Eine Benutzerinstanz ist eine separate Instanz der SQL Server Express-Datenbank-Engine, die von einer übergeordneten Instanz generiert wird.A user instance is a separate instance of the SQL Server Express Database Engine that is generated by a parent instance. Mit Benutzerinstanzen können Benutzer, die auf ihrem lokalen Computer nicht mit Administratorrechten arbeiten, eine Verbindung zu SQL Server Express-Datenbanken herstellen.User instances allow users who are not administrators on their local computers to attach and connect to SQL Server Express databases. Jede Instanz wird im Sicherheitskontext des jeweiligen Benutzers ausgeführt, wobei für jeden Benutzer genau eine Instanz erstellt wird.Each instance runs under the security context of the individual user, on a one-instance-per-user basis.

Was können Benutzerinstanzen?User Instance Capabilities

Benutzerinstanzen eignen sich für Benutzer, die Windows in einem Konto der untersten Berechtigungsebene (Least-Priviledged User Account, LUA) ausführen, da jeder Benutzer über SQL Server-Systemadministratorberechtigungen (sysadmin) für die Instanz verfügt, die auf seinem Computer ausgeführt wird, ohne dass dazu auch Windows mit Administratorrechten ausgeführt werden muss.User instances are useful for users who are running Windows under a least-privilege user account (LUA) because each user has SQL Server system administrator (sysadmin) privileges over the instance running on her computer without needing to run as a Windows administrator as well. Software, die in einer Benutzerinstanz mit eingeschränkten Berechtigungen ausgeführt wird, kann keine systemweiten Änderungen vornehmen, da die SQL Server Express-Instanz beim Benutzer über das Windows-Konto ohne Administratorberechtigung und nicht als Dienst ausgeführt wird.Software executing on a user instance with limited permissions cannot make system-wide changes because the instance of SQL Server Express is running under the non-administrator Windows account of the user, not as a service. Jede Benutzerinstanz ist von ihrer übergeordneten Instanz und von allen anderen Benutzerinstanzen isoliert, die auf demselben Computer ausgeführt werden.Each user instance is isolated from its parent instance and from any other user instances running on the same computer. Auf einer Benutzerinstanz installierte Datenbanken werden nur im Einzelbenutzermodus geöffnet. Es ist ausgeschlossen, dass mehrere Benutzer eine Verbindung mit einer Datenbank herstellen können, die auf einer Benutzerinstanz ausgeführt wird.Databases running on a user instance are opened in single-user mode only, and it is not possible for multiple users to connect to databases running on a user instance. Replikation und verteilte Abfragen sind für Benutzerinstanzen ebenfalls deaktiviert.Replication and distributed queries are also disabled for user instances.

Weitere Informationen dazu finden Sie im Abschnitt zu Benutzerinstanzen in der SQL Server-Onlinedokumentation.For more information, see "User Instances" in SQL Server Books Online.

Hinweis

Benutzer, die auf ihrem Computer bereits mit Administratorberechtigungen arbeiten, benötigen keine Benutzerinstanzen. Auch in Szenarien mit mehreren Datenbankbenutzern sind Benutzerinstanzen nicht erforderlich.User instances are not needed for users who are already administrators on their own computers, or for scenarios involving multiple database users.

Aktivieren von BenutzerinstanzenEnabling User Instances

Zum Generieren von Benutzerinstanzen muss eine übergeordnete Instanz von SQL Server Express ausgeführt werden.To generate user instances, a parent instance of SQL Server Express must be running. Benutzer Instanzen werden standardmäßig aktiviert, wenn SQL Server Express installiert ist. Sie können von einem Systemadministrator, der die gespeicherte System Prozedur sp_configure auf der übergeordneten Instanz ausführt, explizit aktiviert oder deaktiviert werden.User instances are enabled by default when SQL Server Express is installed, and they can be explicitly enabled or disabled by a system administrator executing the sp_configure system stored procedure on the parent instance.

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

Als Netzwerkprotokoll für Benutzerinstanzen kommen lokale Named Pipes zum Einsatz.The network protocol for user instances must be local Named Pipes. Benutzerinstanzen können nicht auf einer Remoteinstanz von SQL Server gestartet werden, und SQL Server-Anmeldungen sind ebenfalls nicht zulässig.A user instance cannot be started on a remote instance of SQL Server, and SQL Server logins are not allowed.

Herstellen einer Verbindung mit einer BenutzerinstanzConnecting to a User Instance

Mit User Instance den AttachDBFilename Schlüsselwörtern und ConnectionString kann eine eine SqlConnection Verbindung mit einer Benutzer Instanz herstellen.The User Instance and AttachDBFilenameConnectionString keywords allow a SqlConnection to connect to a user instance. Benutzerinstanzen werden auch von den SqlConnectionStringBuilder-Eigenschaften UserInstance und AttachDBFilename unterstützt.User instances are also supported by the SqlConnectionStringBuilderUserInstance and AttachDBFilename properties.

Beachten Sie bei der unten genannten Beispielverbindungszeichenfolge Folgendes:Note the following about the sample connection string shown below:

  • Das Data Source-Schlüsselwort verweist auf die übergeordnete Instanz von SQL Server Express, die die Benutzerinstanz generiert.The Data Source keyword refers to the parent instance of SQL Server Express that is generating the user instance. Die Standardinstanz ist .\sqlexpress.The default instance is .\sqlexpress.

  • Für Integrated Security ist true festgelegt.Integrated Security is set to true. Zur Herstellung einer Verbindung mit einer Benutzerinstanz ist die Windows-Authentifizierung erforderlich. SQL Server-Anmeldungen werden nicht unterstützt.To connect to a user instance, Windows Authentication is required; SQL Server logins are not supported.

  • Für User Instance ist true festgelegt, wodurch eine Benutzerinstanz aufgerufen wird.The User Instance is set to true, which invokes a user instance. (Der Standardwert ist false.)(The default is false.)

  • Das Schlüsselwort für die AttachDbFileName-Verbindungszeichenfolge wird verwendet, um die primäre Datenbankdatei (.mdf) anzufügen. Diese muss den vollständigen Pfadnamen enthalten.The AttachDbFileName connection string keyword is used to attach the primary database file (.mdf), which must include the full path name. AttachDbFileName entspricht auch den Schlüsseln "extended properties" und "initial file name" in einer SqlConnection-Verbindungszeichenfolge.AttachDbFileName also corresponds to the "extended properties" and "initial file name" keys within a SqlConnection connection string.

  • Die |DataDirectory|-Ersatzzeichenfolge zwischen den vertikalen Strichen (|) verweist auf das Datenverzeichnis der Anwendung, die die Verbindung öffnet, und gibt den relativen Pfad zum Speicherort der MDF- und LDF-Datenbank- und Protokolldateien an.The |DataDirectory| substitution string enclosed in the pipe symbols refers to the data directory of the application opening the connection and provides a relative path indicating the location of the .mdf and .ldf database and log files. Wenn sich diese Dateien woanders befinden, müssen Sie den vollständigen Pfad zu den Dateien angeben.If you want to locate these files elsewhere, you must provide the full path to the files.

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

Hinweis

Sie können mit der SqlConnectionStringBuilderUserInstance-Eigenschaft und der AttachDBFilename-Eigenschaft eine Verbindungszeichenfolge zur Laufzeit erstellen.You can also use the SqlConnectionStringBuilderUserInstance and AttachDBFilename properties to build a connection string at run time.

Verwenden der |DataDirectory| -Ersetzungs ZeichenfolgeUsing the |DataDirectory| Substitution String

AttachDbFileName wurde in ADO.NET 2.0 mit der Einführung der |DataDirectory|-Ersatzzeichenfolge (zwischen Pipesymbolen) erweitert.AttachDbFileName was extended in ADO.NET 2.0 with the introduction of the |DataDirectory| (enclosed in pipe symbols) substitution string. DataDirectory wird in Verbindung mit AttachDbFileName verwendet, um einen relativen Pfad zu einer Datendatei anzugeben. Damit wird es Entwicklern ermöglicht, Verbindungszeichenfolgen zu erstellen, die auf einem relativen Pfad zur Datenquelle basieren. Es muss kein vollständiger Pfad angegeben werden.DataDirectory is used in conjunction with AttachDbFileName to indicate a relative path to a data file, allowing developers to create connection strings that are based on a relative path to the data source instead of being required to specify a full path.

Auf welchen physischen Speicherort DataDirectory verweist, hängt von der Art der Anwendung ab.The physical location that DataDirectory points to depends on the type of application. In diesem Beispiel befindet sich die anzufügende Datei Northwind.mdf im Ordner \app_data der Anwendung.In this example, the Northwind.mdf file to be attached is located in the application's \app_data folder.

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

Bei Verwendung von DataDirectory darf sich der resultierende Dateipfad in der Verzeichnisstruktur nicht über dem Verzeichnis befinden, auf das in der Ersatzzeichenfolge verwiesen wird.When DataDirectory is used, the resulting file path cannot be higher in the directory structure than the directory pointed to by the substitution string. Wenn z. B. das vollständige Datenverzeichnis in C:\AppDirectory\app_dataDataDirectory lautet, funktioniert die oben genannte Beispielverbindungszeichenfolge, weil sie sich unterhalb von C:\AppDirectory befindet.For example, if the fully expanded DataDirectory is C:\AppDirectory\app_data, then the sample connection string shown above works because it is below c:\AppDirectory. Wenn aber versucht wird, das DataDirectory als |DataDirectory|\..\data anzugeben, wird ein Fehler ausgelöst, weil <legacyBold>\data</legacyBold> kein Unterverzeichnis von <legacyBold>\AppDirectory</legacyBold> ist.However, attempting to specify DataDirectory as |DataDirectory|\..\data will result in an error because \data is not a subdirectory of \AppDirectory.

Wenn die Verbindungszeichenfolge eine nicht ordnungsgemäß formatierte Ersatzzeichenfolge enthält, wird eine ArgumentException ausgelöst.If the connection string has an improperly formatted substitution string, an ArgumentException will be thrown.

Hinweis

System.Data.SqlClient löst die Ersatzzeichenfolgen in vollständige Pfade des Dateisystems auf dem lokalen Computer auf.System.Data.SqlClient resolves the substitution strings into full paths against the local computer file system. Deshalb werden Remoteserver-, HTTP- und UNC-Pfadnamen nicht unterstützt.Therefore, remote server, HTTP, and UNC path names are not supported. Wenn sich der Server nicht auf dem lokalen Computer befindet und die Verbindung geöffnet wird, wird eine Ausnahme ausgelöst.An exception is thrown when the connection is opened if the server is not located on the local computer.

Wenn die SqlConnection geöffnet ist, wird sie von der standardmäßigen SQL Server Express-Instanz an eine Instanz umgeleitet, die zur Laufzeit initiiert und unter dem Konto des Aufrufers ausgeführt wird.When the SqlConnection is opened, it is redirected from the default SQL Server Express instance to a run-time initiated instance running under the caller's account.

Hinweis

Eventuell ist es notwendig, den Wert für ConnectionTimeout hoch zu setzen, da die Benutzerinstanzen u. U. mehr Zeit zum Laden benötigen als reguläre Instanzen.It may be necessary to increase the ConnectionTimeout value since user instances may take longer to load than regular instances.

Das folgende Codefragment öffnet eine neue SqlConnection, zeigt die Verbindungszeichenfolge im Konsolenfenster an und schließt dann beim Beenden des using-Codeblocks die Verbindung.The following code fragment opens a new SqlConnection, displays the connection string in the console window, and then closes the connection when exiting the using code block.

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);  
    }  
}  

Hinweis

Benutzerinstanzen werden von CLR-Code (Common Language Runtime), der innerhalb von SQL Server ausgeführt wird, nicht unterstützt.User instances are not supported in common language runtime (CLR) code that is running inside of SQL Server. Es wird eine InvalidOperationException ausgelöst, wenn Open für eine SqlConnection aufgerufen wird, deren Verbindungszeichenfolge User Instance=true enthält.An InvalidOperationException is thrown if Open is called on a SqlConnection that has User Instance=true in the connection string.

Lebensdauer einer Verbindung mit einer BenutzerinstanzLifetime of a User Instance Connection

Im Unterschied zu SQL Server-Versionen, die als Dienst ausgeführt werden, müssen SQL Server Express-Instanzen nicht manuell gestartet und beendet werden.Unlike versions of SQL Server that run as a service, SQL Server Express instances do not need to be manually started and stopped. Die Benutzerinstanz wird gestartet, sobald sich ein Benutzer anmeldet und eine Verbindung mit einer Benutzerinstanz herstellt, sofern sie nicht bereits ausgeführt wird.Each time a user logs in and connects to a user instance, the user instance is started if it is not already running. Die AutoClose-Option ist bei Benutzerinstanzdatenbanken so eingerichtet, dass die Datenbank nach einer bestimmten Zeit der Inaktivität automatisch geschlossen wird.User instance databases have the AutoClose option set so that the database is automatically shut down after a period of inactivity. Der Prozess sqlservr.exe läuft nach dem Schließen der letzten Verbindung mit der Instanz für einen gewissen Zeitraum weiter und muss daher nicht neu gestartet werden, wenn innerhalb dieser Zeit eine andere Verbindung geöffnet wird.The sqlservr.exe process that is started is kept running for a limited time-out period after the last connection to the instance is closed, so it does not need to be restarted if another connection is opened before the time-out has expired. Wird innerhalb dieser Zeit keine neue Verbindung geöffnet wird, wird die Benutzerinstanz automatisch geschlossen.The user instance automatically shuts down if no new connection opens before that time-out period has expired. Ein Systemadministrator auf der übergeordneten Instanz kann die Dauer des Timeout Zeitraums für eine Benutzer Instanz mithilfe von sp_configure festlegen, um die Timeout Option für die Benutzer Instanz zu ändern.A system administrator on the parent instance can set the duration of the time-out period for a user instance by using sp_configure to change the user instance timeout option. Der Standardwert ist 60 Minuten.The default is 60 minutes.

Hinweis

Wenn in der Verbindungszeichenfolge Min Pool Size mit einem Wert größer als 0 verwendet wird, hält die Verbindungspoolfunktion stets einige geöffnete Verbindungen aufrecht, und die Benutzerinstanz wird nicht automatisch geschlossen.If Min Pool Size is used in the connection string with a value greater than zero, the connection pooler will always maintain a few opened connections, and the user instance will not automatically shut down.

So funktionieren BenutzerinstanzenHow User Instances Work

Wenn eine Benutzer Instanz zum ersten Mal für jeden Benutzer generiert wird, werden die System Datenbanken Master und msdb aus dem Ordner Vorlagen Daten in einen Pfad im Verzeichnis des lokalen Anwendungsdatenrepository des Benutzers kopiert, um die Benutzer Instanz exklusiv zu verwenden.The first time a user instance is generated for each user, the master and msdb system databases are copied from the Template Data folder to a path under the user's local application data repository directory for exclusive use by the user instance. Dieser Pfad lautet in der Regel C:\Documents and Settings\<UserName>\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS.This path is typically C:\Documents and Settings\<UserName>\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS. Wenn eine Benutzer Instanz gestartet wird, werden die tempdb-, Protokoll-und Ablauf Verfolgungs Dateien ebenfalls in dieses Verzeichnis geschrieben.When a user instance starts up, the tempdb, log, and trace files are also written to this directory. Es wird ein Name für die Instanz generiert, der für jeden Benutzer garantiert eindeutig ist.A name is generated for the instance, which is guaranteed to be unique for each user.

Standardmäßig sind alle Member der Gruppe <legacyBold>Windows Builtin\Users</legacyBold> berechtigt, über die lokale Instanz Verbindungen herzustellen und die SQL Server-Binärdateien zu lesen und auszuführen.By default all members of the Windows Builtin\Users group are granted permissions to connect on the local instance as well as read and execute permissions on the SQL Server binaries. Nachdem die Anmeldeinformationen des Benutzers verifiziert wurden, der die Benutzerinstanz hostet, wird dieser Benutzer zum sysadmin für diese Instanz.Once the credentials of the calling user hosting the user instance have been verified, that user becomes the sysadmin on that instance. Für Benutzerinstanzen ist nur ein gemeinsam genutzter Speicherbereich (Shared Memory) aktiviert, sodass der Benutzer nur Vorgänge auf seinem lokalen Computer ausführen kann.Only shared memory is enabled for user instances, which means that only operations on the local machine are possible.

Die Benutzer müssen sowohl Lese- als auch Schreibberechtigungen für die in der Verbindungszeichenfolge angegebenen MDF- und LDF-Dateien erhalten.Users must be granted both read and write permissions on the .mdf and .ldf files specified in the connection string.

Hinweis

Bei der MDF- und der LDF-Datei handelt es sich um die Datenbank- bzw. um die Protokolldatei.The .mdf and .ldf files represent the database and log files, respectively. Diese beiden Dateien sind ein zusammengehöriger Satz, daher ist bei Sicherungs- und Wiederherstellungsvorgängen Vorsicht geboten.These two files are a matched set, so care must be taken during backup and restore operations. Die Datenbankdatei enthält Informationen zur exakten Version der Protokolldatei, und wenn die Datenbankdatei mit der falschen Protokolldatei gekoppelt wird, kann sie nicht geöffnet werden.The database file contains information about the exact version of the log file, and the database will not open if it is coupled with the wrong log file.

Um die Beschädigung von Daten zu vermeiden, werden Datenbanken in der Benutzerinstanz mit exklusivem Zugriff geöffnet.To avoid data corruption, a database in the user instance is opened with exclusive access. Wenn zwei verschiedene Benutzerinstanzen auf dieselbe Datenbank auf demselben Computer zugreifen, muss der Benutzer der ersten Benutzerinstanz die Datenbank schließen, bevor der Benutzer der zweiten Benutzerinstanz die Datenbank öffnen kann.If two different user instances share the same database on the same computer, the user on the first instance must close the database before it can be opened in a second instance.

BenutzerinstanzszenarienUser Instance Scenarios

Benutzerinstanzen stellen Entwicklern von Datenbankanwendungen einen SQL Server-Datenspeicher zur Verfügung, der nicht voraussetzt, dass die Entwickler auf ihren Entwicklungscomputern mit Administratorberechtigungen arbeiten.User instances provide developers of database applications with a SQL Server data store that does not depend on developers having administrative accounts on their development computers. Benutzerinstanzen basieren auf dem Access/Jet-Modell, bei dem die Datenbankanwendung einfach eine Verbindung mit einer Datei herstellt und der Benutzer automatisch volle Berechtigungen für alle Datenbankobjekte erhält, ohne dass ein Systemadministrator eingreifen und diese Berechtigungen gewähren muss.User instances are based on the Access/Jet model, where the database application simply connects to a file, and the user automatically has full permissions on all of the database objects without needing the intervention of a system administrator to grant permissions. Die Verwendung dieses Modells bietet sich für Situationen an, in denen der Benutzer mit einem Konto der untersten Berechtigungsebene (Least-Priviledged User Account, LUA) arbeitet und keine Administratorberechtigungen für den Server oder den lokalen Computer besitzt, dennoch aber Datenbankobjekte und Anwendungen erstellen können muss.It is intended to work in situations where the user is running under a least-privilege user account (LUA) and does not have administrative privileges on the server or local machine, yet needs to create database objects and applications. Mit Benutzerinstanzen können Benutzer Laufzeitinstanzen erstellen, die im Sicherheitskontext des Benutzers und nicht im Sicherheitskontext eines Systemdienstes mit umfangreicheren Berechtigungen ausgeführt werden.User instances allow users to create instances at run time that run under the user's own security context, and not in the security context of a more privileged system service.

Wichtig

Benutzerinstanzen sollten nur in Szenarien eingesetzt werden, in denen alle Anwendungen, die die Instanzen verwenden, vollständig vertrauenswürdig sind.User instances should only be used in scenarios where all the applications using it are fully trusted.

Zu den Benutzerinstanzszenarien gehören folgende Szenarien:User instance scenarios include:

  • alle Einzelbenutzeranwendungen, in denen keine Datenfreigabe erforderlich istAny single-user application where sharing data is not required.

  • ClickOnce-Bereitstellung:ClickOnce deployment. Auf Computern, auf denen .NET Framework 2.0 (oder höher) und SQL Server Express bereits installiert sind, kann das im Rahmen einer ClickOnce-Aktion heruntergeladene Installationspaket installiert und von Benutzern ohne Administratorberechtigung verwendet werden.If the .NET Framework 2.0 (or later) and SQL Server Express are already installed on the target computer, the installation package downloaded as a result of a ClickOnce action can be installed and used by non-administrator users. Beachten Sie, dass die Installation von SQL Server Express, sofern diese Teil des Setups ist, von einem Administrator vorgenommen werden muss.Note that an administrator must install SQL Server Express if that is part of the setup. Weitere Informationen finden Sie unter ClickOnce-Bereitstellung für Windows Forms.For more information, see ClickOnce Deployment for Windows Forms.

  • dediziertes ASP.NET-Hosting mit Windows-Authentifizierung:Dedicated ASP.NET hosting using Windows Authentication. Eine einzelne SQL Server Express-Instanz kann in einem Intranet gehostet werden.A single SQL Server Express instance can be hosted on an intranet. Die Anwendung stellt die Verbindung über das ASPNET-Windows-Konto und nicht durch einen Identitätswechsel her.The application connects using the ASPNET Windows account, not by using impersonation. Benutzerinstanzen dürfen nicht in Drittanbieterszenarien oder Szenarien mit gemeinsamem Hosting verwendet werden, in denen alle Anwendungen dieselbe Benutzerinstanz nutzen und damit nicht mehr voneinander isoliert sind.User instances should not be used for third-party or shared hosting scenarios where all applications would share the same user instance and would no longer remain isolated from each other.

Siehe auchSee also