Benutzerinstanzen für Nichtadministratoren

Eine Benutzerinstanz ist eine Funktion, die es Nichtadministratoren ermöglicht, eine lokale Version von SQL Server im eigenen Konto auszuführen. Bei Benutzerinstanzen verfügen Nichtadministratoren über Rechte als Datenbankbesitzer für die Instanz, die im eigenen Konto ausgeführt wird. 

Wichtiger HinweisWichtig

Diese Funktion wird in zukünftigen Versionen von Microsoft SQL Server nicht mehr bereitgestellt. Verwenden Sie diese Funktion beim Entwickeln neuer Anwendungen nicht, und planen Sie das Ändern von Anwendungen, in denen es zurzeit verwendet wird.

Eine Benutzerinstanz (auch untergeordnete Instanz oder Clientinstanz genannt) ist eine Instanz von SQL Server, die von der übergeordneten Instanz (der als Dienst ausgeführten primären Instanz, z. B. sqlExpress) für einen Benutzer generiert wird. Die Benutzerinstanz wird als Benutzerprozess in dem Sicherheitskontext des Benutzers ausgeführt. Die Benutzerinstanz ist von der übergeordneten Instanz und allen anderen Instanzen isoliert, die auf dem Rechner ausgeführt werden. Im Zusammenhang mit der Benutzerinstanzfunktion wird auch der Ausdruck Ausführen von Instanzen als normaler Benutzer (RANU, Run As Normal User) verwendet.

HinweisHinweis

Die SQL Server Express-Onlinedokumentation verweist auf diese Funktion durchgängig mit dem Begriff Benutzerinstanz. Auch diese Funktion wurde mit SQL Server 2005 Express Edition eingeführt.

Gründe für die Verwendung des Benutzerinstanzmodells

Einige Vorteile der Verwendung eines Benutzerinstanzmodells sind unten aufgeführt

  • Die wichtigste Aufgabe des Benutzerinstanzmodells besteht darin, Benutzer von SQL Server, die keine Administratoren sind, voneinander zu isolieren, damit Benutzer die Möglichkeit erhalten, beliebige Datenbanken anzufügen, ohne dabei die Sicherheit anderer Benutzer zu gefährden. Die Isolierung wird dadurch erreicht, dass für jeden Benutzer eine separate Instanz von SQL Server generiert wird.

  • Abgesehen von der Isolierung soll SQL Server Express eine möglichst einfache Verwendung für Nichtadministratoren ermöglichen. Viele Windows-Benutzer besitzen Konten mit Administratorprivilegien. Leider ermöglicht die Ausführung als Administrator bösartiger Software problemlos die Kontrolle über den Computer eines Benutzers zu übernehmen. Im Gegensatz dazu kann bösartige Software, die von Nichtadministratoren ausgeführt wird, keine systemweiten Änderungen durchführen und dadurch das System nur in begrenztem Umfang schädigen.

Übersicht über das Benutzerinstanzmodell

Die Merkmale des Benutzerinstanzmodells können folgendermaßen zusammengefasst werden:

  • Eine übergeordnete Instanz von SQL Server muss ausgeführt werden, damit Benutzerinstanzen erstellt werden können.

  • Wenn Sie SQL Server Express installieren, wird vom Setup ein Ordner für Vorlagendaten erstellt. Dort werden bereinigte Systemdatenbanken gespeichert, die vom Benutzerinstanzprozess verwendet werden, falls dieser aufgerufen wird.

  • Verwenden Sie zum Aufrufen das user instance-Schlüsselwort für die Verbindungszeichenfolge in SQLClient; dieses Schlüsselwort kann true oder false sein. Standardmäßig wird false verwendet. Wenn false festgelegt ist, bedeutet dies, dass keine Unterstützung für Benutzerinstanzen aktiviert ist und dass das ursprüngliche Verhalten beibehalten wird. Wenn user instance auf true festgelegt ist, wird das Benutzerinstanzmodell während des ADO. NET-Aufrufs connection.open aktiviert.

    HinweisHinweis

    Der System.Data.SqlClient-Namespace definiert eine Reihe von Klassen, die den Zugriff auf die SQL Server-Datenbank ermöglichen und zusammenfassend als .NET-Datenanbieter für SQL Server oder als SqlClient bezeichnet werden. Verwaltete Anwendungen arbeiten mit SqlClient über die API von ADO .NET zusammen, um in den SQL Server-Datenbanken gespeicherte Daten und Schemainformationen abzufragen und zu ändern. Weitere Informationen finden Sie der Dokumentation für Visual Studio 2005.

  • Beim ersten Erstellen einer Benutzerinstanz für einen Benutzer werden Systemdatenbanken vom Ordner für Vorlagendaten in einen Pfad unter dem Datenrepositoryverzeichnis der lokalen Anwendung des Benutzers kopiert und dort für die exklusive Verwendung durch die Benutzerinstanz bereitgestellt. Dieser Pfad lautet i. d. R. Laufwerk:\Dokumente und Einstellungen\Username\Lokale Einstellungen\Anwendungsdaten\Microsoft\Microsoft SQL Server Data\SQLEXPRESS.

  • Der Benutzer stellt als SysAdmin eine Verbindung zu dieser neuen Benutzerinstanz her und verwendet die Datenbank selbst dann, wenn er für die übergeordnete Instanz keine Administratorrechte besitzt.

    SicherheitshinweisSicherheitshinweis

    Anmeldenamen, die während des Setups als Mitglieder der festen Serverrolle sysadmin bereitgestellt werden, werden als Administratoren in der Vorlagendatenbank bereitgestellt. Sie sind Mitglieder der festen Serverrolle sysadmin auf der Benutzerinstanz, sofern sie nicht entfernt werden.

  • Wenn die Benutzerinstanz generiert ist, leitet SQLClient alle Aufrufe zur Benutzerinstanz um.

HinweisHinweis

Die READONLY-Eigenschaften der Benutzerdatenbanken werden aus Dateisystemattributen und -berechtigungen der primären Datei für die Datenbank abgeleitet. ALTER DATABASE SET READ_ONLY/READ_WRITE-Einstellungen sind nicht anwendbar.

Verbindungszeichenfolge für die Verwendung der Benutzerinstanz

conn string =
"Data Source=.\\SQLExpress" +
"integrated security=true;" + 
"attachdbfilename=|DataDirectory|\mydb.mdf;" +
"user instance=true"
string connstr = GetConnectionString(); // get from config
using(SqlConnection conn = new SqlConnection(connstr)) {
  // this will connect to the user instance, not to the 
  // default SSE instance
  conn.Open();
  // use the connection to the user instance
}

Herstellen einer Verbindung zu einer Benutzerinstanz

Die Netzwerkprotokollunterstützung für Benutzerinstanzen erfolgt nur über lokale, benannte Pipes. Das bedeutet, dass Benutzer von einem Remotecomputer aus keine Verbindung mit einer Benutzerinstanz herstellen können.

Informationen über das Herstellen einer Verbindung mit der Benutzerinstanz mithilfe von SQL Server Management Studio finden Sie unter "SQL Server Management Studio and SQL Server Express" in SQL Server Express-Onlinedokumentation.

HinweisHinweis

Weitere Informationen zu benannten Pipes oder Netzwerkprotokollen finden Sie in der Hilfe für den SQL Server-Konfigurations-Manager. Um auf diese Hilfe über das Menü Start zuzugreifen, klicken Sie auf Ausführen und geben Sie dann SQLServerManager.msc ein. Durch diese Eingabe wird der SQL Server-Konfigurations-Manager geöffnet. Klicken Sie auf das Menü Hilfe, um auf die Hilfe zuzugreifen. Zum Anzeigen von Netzwerkprotokollen für SQL Server klicken Sie auf die Option SQL Server-Netzwerkkonfiguration.

Verwaltung von Benutzerinstanzen

Wenn Sie Administrator sind und Benutzerinstanzen verwalten möchten, werden folgende Informationen hilfreich für Sie sein.

Sicht/gespeicherte Prozedur/Transact-SQL-Code

Beschreibung

SELECT * FROM sys.dm_os_child_instances (Transact-SQL)

Mithilfe dieses Befehls können Sie eine virtuelle Sicht ausführen, die alle auf der übergeordneten Instanz generierten Benutzerinstanzen auflistet.

SHUTDOWN

Beendet SQL Server. Mit diesem Befehl können Sie die Benutzerinstanz beenden. Weitere Informationen zum Verwenden von SHUTDOWN finden Sie unter SHUTDOWN (Transact-SQL) in der SQL Server-Onlinedokumentation.

sp_configure 'user instances enabled'

Steuert das Aktivieren und Deaktivieren des Benutzerinstanzfeatures.

Um die Generierung von Benutzerinstanzen zu aktivieren, verwenden Sie folgenden Befehl:

sp_configure 'user instances enabled','1' 

RECONFIGURE;

GO

Um die Generierung von Benutzerinstanzen zu deaktivieren, verwenden Sie folgenden Befehl:

sp_configure 'user instances enabled','0'.

sp_configure 'user instance timeout'

Verwenden Sie folgenden Befehl:

sp_configure 'show advanced options', 1;

RECONFIGURE;

GO

sp_configure 'user instance timeout', 5;

GO

Dabei ist 5 der Minimalwert und 65535 der Maximalwert.

Sie benötigen sp_configure 'show advanced options', um das Timeout anzuzeigen und festzulegen. Weitere Informationen zum Anzeigen von erweiterten Optionen finden Sie unter Festlegen von Serverkonfigurationsoptionen in der SQL Server-Onlinedokumentation.

Sie können das Timeout für die Benutzerinstanz sowohl in der übergeordneten Instanz als auch in der Benutzerinstanz festlegen.

Wenn eine Benutzerinstanz gestartet wird, ruft sie den Timeoutwert immer von der übergeordneten Instanz ab. Sobald die Benutzerinstanz gestartet wurde, kann jedoch mithilfe von sp_configure der Timeoutwert geändert werden, der nur für diese Instanz gültig ist.

Einschränkungen bei der Verwendung von Benutzerinstanzen

Wenn Sie Benutzerinstanzen verwenden, kann dies dazu führen, dass Funktionen in SQL Server Express nur eingeschränkt funktionsfähig sind. In der folgenden Liste werden mögliche Einschränkungen beschrieben:

  • Jedem Benutzer steht nur eine Benutzerinstanz zur Verfügung.

  • Die Replikation wird deaktiviert.

  • Benutzerinstanzen unterstützen nicht die SQL Server-Authentifizierung. Nur die Windows-Authentifizierung wird unterstützt.

  • Das einzige für Benutzerinstanzen unterstützte Netzwerkprotokoll ist Named Pipes.

  • Die Benutzerinstanz nutzt die Registrierungseinträge der übergeordneten Instanz.

  • Es gibt keine Unterstützung für Benutzerinstanzen mit systemeigenem Code. Diese Funktion wird nur mit ADO .NET unterstützt.

  • Die Volltextsuche wird auf einer SQL Server Express-Benutzerinstanz nicht unterstützt.

  • Der WMI-Anbieter für Serverereignisse wird für die dynamisch erzeugten Benutzerinstanzen nicht unterstützt. Für die übergeordneten SQL Server Express-Instanz sollte der WMI-Anbieter jedoch noch funktionsfähig sein. Weitere Informationen zum WMI-Anbieter finden Sie unter WMI-Anbieter für Serverereignisse in der SQL Server-Onlinedokumentation.