Share via


SQL Server Express-gebruikersinstanties

ADO.NET downloaden

Microsoft SQL Server Express Edition (SQL Server Express) ondersteunt de functie van het gebruikersexemplaren. Deze functie is alleen beschikbaar wanneer u de Microsoft SqlClient-gegevensprovider voor SQL Server gebruikt. Een gebruikersexemplaar is een afzonderlijk exemplaar van de SQL Server Express Database Engine dat wordt gegenereerd door een ouder exemplaar. Met gebruikersexemplaren kunnen gebruikers die geen beheerders op hun lokale computers zijn, verbinding maken met SQL Server Express-databases. Elke instantie draait onder de beveiligingscontext van de individuele gebruiker, met één instantie per gebruiker.

Mogelijkheden van gebruikersinstantiaties

Gebruikersonstanties zijn nuttig voor gebruikers die Windows uitvoeren onder een gebruikersaccount met minimale bevoegdheden (LUA), omdat elke gebruiker SQL Server-systeembeheerdersbevoegdheden (sysadmin) heeft voor de instantie die op hun computer wordt uitgevoerd, zonder dat ze als Windows-beheerder hoeven te functioneren. Software die wordt uitgevoerd op een gebruikersexemplaren met beperkte machtigingen, kan geen systeembrede wijzigingen aanbrengen omdat het exemplaar van SQL Server Express wordt uitgevoerd onder het Windows-account van de gebruiker zonder administrator, niet als een service. Elk gebruikersexemplaar is geïsoleerd van het bovenliggende exemplaar en van andere gebruikersexemplaren die op dezelfde computer worden uitgevoerd. Databases die worden uitgevoerd op een gebruikersexemplaren, worden alleen in de modus voor één gebruiker geopend en het is niet mogelijk dat meerdere gebruikers verbinding maken met databases die worden uitgevoerd op een gebruikersexemplaren. Replicatie en gedistribueerde query's worden ook uitgeschakeld voor gebruikersexemplaren.

Zie Gebruikersexemplaren in SQL Server Books Online voor meer informatie.

Opmerking

Gebruikersexemplaren zijn niet nodig voor gebruikers die al beheerders zijn op hun eigen computers of voor scenario's waarbij meerdere databasegebruikers betrokken zijn.

Gebruikersinstanties inschakelen

Als u gebruikersexemplaren wilt genereren, moet een hoofdexemplaar van SQL Server Express actief zijn. Gebruikersexemplaren worden standaard ingeschakeld wanneer SQL Server Express is geïnstalleerd en ze kunnen expliciet worden ingeschakeld of uitgeschakeld door een systeembeheerder die de sp_configure systeem opgeslagen procedure uitvoert op het bovenliggende exemplaar.

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

Het netwerkprotocol voor gebruikersexemplaren moet lokale Named Pipes zijn. Een gebruikersexemplaar kan niet worden gestart op een extern exemplaar van SQL Server en SQL Server-aanmeldingen zijn niet toegestaan.

Verbinding maken met een gebruikersexemplaar

Met het trefwoord User Instance en de trefwoorden AttachDBFilenameConnectionString kan een SqlConnection gebruiker verbinding maken met een gebruikersexemplaar. Gebruikersexemplaren worden ook ondersteund door de SqlConnectionStringBuilderUserInstance en AttachDBFilename eigenschappen.

Let op het volgende over de voorbeeldverbindingsreeks die hieronder wordt weergegeven:

  • Het Data Source trefwoord verwijst naar het bovenliggende exemplaar van SQL Server Express dat het gebruikersexemplaar genereert. De standaardinstantie is .\sqlexpress.

  • Integrated Security is ingesteld op true. Windows-verificatie is vereist om verbinding te maken met een gebruikersinstantie. SQL Server-aanmeldingen worden niet ondersteund.

  • De User Instance is ingesteld op true, waarmee een gebruiker instantie wordt aangeroepen. (De standaardwaarde is false.)

  • Het AttachDbFileName trefwoord voor de verbindingsreeks wordt gebruikt om het primaire databasebestand (.mdf) toe te voegen, dat de volledige padnaam moet bevatten. AttachDbFileName komt ook overeen met de sleutels 'uitgebreide eigenschappen' en 'initiële bestandsnaam' binnen een SqlConnection verbindingsreeks.

  • De |DataDirectory| vervangingstekenreeks in de pijpsymbolen verwijst naar de gegevensmap van de toepassing die de verbinding opent en biedt een relatief pad dat de locatie aangeeft van de .mdf- en LDF-database en logboekbestanden. Als u deze bestanden ergens anders wilt vinden, moet u het volledige pad naar de bestanden opgeven.

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

Opmerking

U kunt ook de SqlConnectionStringBuilderUserInstance en AttachDBFilename eigenschappen gebruiken om tijdens runtime een verbindingsreeks te maken.

Het gebruik van de |DataDirectory| vervangingsreeks

DataDirectory wordt gebruikt in combinatie met AttachDbFileName om een relatief pad naar een gegevensbestand aan te geven, zodat ontwikkelaars verbindingsreeksen kunnen maken die zijn gebaseerd op een relatief pad naar de gegevensbron in plaats van dat ze een volledig pad moeten opgeven.

De fysieke locatie waarnaar DataDirectory wordt verwezen, is afhankelijk van het type toepassing. In dit voorbeeld bevindt het Northwind.mdf bestand dat moet worden bijgevoegd zich in de map \app_data van de toepassing.

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

Wanneer DataDirectory wordt gebruikt, kan het resulterende bestandspad niet hoger zijn in de mapstructuur dan de map die door de vervangingstekenreeks wordt verwezen. Als de volledig uitgevouwen DataDirectory naam bijvoorbeeld C:\AppDirectory\app_data is, werkt de voorbeeldverbindingsreeks die hierboven wordt weergegeven, omdat deze zich onder c:\AppDirectory bevindt. Als u echter probeert DataDirectory als |DataDirectory|\..\data op te geven, treedt er een fout op omdat \data geen submap van \AppDirectory is.

Als de verbindingsreeks een onjuist opgemaakte vervangingstekenreeks heeft, wordt er een ArgumentException gegenereerd.

Opmerking

Microsoft.Data.SqlClient hiermee worden de vervangingstekenreeksen omgezet in volledige paden op basis van het bestandssysteem van de lokale computer. Daarom worden externe server-, HTTP- en UNC-padnamen niet ondersteund. Er wordt een uitzondering gegenereerd wanneer de verbinding wordt geopend als de server zich niet op de lokale computer bevindt.

Wanneer de SqlConnection wordt geopend, wordt het omgeleid van het standaardexemplaar van SQL Server Express naar een door de runtime geïnitialiseerd exemplaar dat wordt uitgevoerd onder het account van de aanroeper.

Opmerking

Het kan nodig zijn om de ConnectionTimeout waarde te verhogen, omdat het langer kan duren voordat gebruikersexemplaren worden geladen dan gewone exemplaren.

Het volgende codefragment opent een nieuw SqlConnection, geeft de verbindingsreeks weer in het consolevenster en sluit vervolgens de verbinding bij het afsluiten van het using codeblok.

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

Opmerking

Gebruikersexemplaren worden niet ondersteund in CLR-code (Common Language Runtime) die wordt uitgevoerd in SQL Server. Een InvalidOperationException wordt gegenereerd als Open wordt aangeroepen op een SqlConnection die User Instance=true in de verbindingsreeks heeft.

Levensduur van een gebruikersinstantieverbinding

In tegenstelling tot versies van SQL Server die als een service worden uitgevoerd, hoeven SQL Server Express-exemplaren niet handmatig te worden gestart en gestopt. Telkens wanneer een gebruiker zich aanmeldt en verbinding maakt met een gebruikersexemplaar, wordt het gebruikersexemplaar gestart als deze nog niet actief is. Databases van gebruikersexemplaren hebben de AutoClose optie ingesteld, zodat de database automatisch wordt afgesloten na een periode van inactiviteit. Het sqlservr.exe proces dat wordt gestart, wordt gedurende een beperkte time-outperiode uitgevoerd nadat de laatste verbinding met het exemplaar is gesloten. Het hoeft dus niet opnieuw te worden gestart als er een andere verbinding wordt geopend voordat de time-out is verlopen. Het gebruikersinstance wordt automatisch afgesloten indien er geen nieuwe verbinding wordt geopend voordat die time-outperiode is verlopen. Een systeembeheerder op het bovenliggende exemplaar kan de duur van de time-outperiode voor een gebruikersinstantie instellen door sp_configure te gebruiken om de time-out van de gebruikersinstantie te wijzigen. De standaardwaarde is 60 minuten.

Opmerking

Als Min Pool Size wordt gebruikt in de verbindingsreeks met een waarde die groter is dan nul, onderhoudt de verbindingspooler altijd enkele geopende verbindingen en wordt de gebruikersinstantie niet automatisch afgesloten.

Hoe gebruikersinstantiaties werken

De eerste keer dat een gebruikersexemplaar voor een gebruiker wordt gegenereerd, worden de master en msdb-systeemdatabases gekopieerd uit de map Sjabloongegevens naar een pad binnen de lokale toepassing-gegevensopslag van de gebruiker voor exclusief gebruik door het gebruikersexemplaar. Dit pad is doorgaans C:\Documents and Settings\<UserName>\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS. Wanneer een gebruikersinstantie wordt gestart, worden de tempdb-, logboek- en traceringsbestanden ook naar deze map geschreven. Er wordt een naam gegenereerd voor het exemplaar, dat gegarandeerd uniek is voor elke gebruiker.

Standaard krijgen alle leden van de groep Windows Builtin\Users machtigingen om verbinding te maken op het lokale exemplaar, evenals lees- en uitvoermachtigingen voor de binaire SQL Server-bestanden. Zodra de referenties van de aanroepende gebruiker die als host fungeert voor de gebruikersexemplaar zijn geverifieerd, wordt die gebruiker de sysadmin op dat exemplaar. Alleen gedeeld geheugen is ingeschakeld voor gebruikersexemplaren, wat betekent dat alleen bewerkingen op de lokale computer mogelijk zijn.

Gebruikers moeten zowel lees- als schrijfmachtigingen krijgen voor de .mdf- en LDF-bestanden die zijn opgegeven in de verbindingsreeks.

Opmerking

De .mdf- en LDF-bestanden vertegenwoordigen respectievelijk de database- en logboekbestanden. Deze twee bestanden vormen een bij elkaar horende set, dus er moet voorzichtigheid worden betracht bij het uitvoeren van back-up- en herstelbewerkingen. Het databasebestand bevat informatie over de exacte versie van het logboekbestand en de database wordt niet geopend als deze is gekoppeld aan het verkeerde logboekbestand.

Om beschadiging van gegevens te voorkomen, wordt een database in de gebruikersinstantie geopend met exclusieve toegang. Als twee verschillende gebruikersexemplaren dezelfde database op dezelfde computer delen, moet de gebruiker op het eerste exemplaar de database sluiten voordat deze in een tweede instantie kan worden geopend.

Scenario's voor gebruikersexemplaren

Gebruikersexemplaren bieden ontwikkelaars van databasetoepassingen een SQL Server-gegevensarchief dat niet afhankelijk is van ontwikkelaars met beheerdersaccounts op hun ontwikkelcomputers. Gebruikersexemplaren zijn gebaseerd op het Access/Jet-model, waarbij de databasetoepassing eenvoudig verbinding maakt met een bestand en de gebruiker automatisch volledige machtigingen heeft voor alle databaseobjecten zonder tussenkomst van een systeembeheerder om machtigingen te verlenen. Het is bedoeld om te werken in situaties waarin de gebruiker onder een gebruikersaccount met minimale rechten (LUA) wordt uitgevoerd en geen beheerdersbevoegdheden op de server of locale computer heeft, maar toch databaseobjecten en toepassingen moet kunnen maken. Met gebruikersexemplaren kunnen gebruikers exemplaren maken tijdens runtime die worden uitgevoerd onder de eigen beveiligingscontext van de gebruiker en niet in de beveiligingscontext van een meer bevoegde systeemservice.

Belangrijk

Gebruikersexemplaren mogen alleen worden gebruikt in scenario's waarin alle toepassingen die deze gebruiken volledig worden vertrouwd.

Scenario's voor gebruikersexemplaren zijn:

  • Elke toepassing voor één gebruiker waarbij het delen van gegevens niet is vereist.

  • ClickOnce-implementatie. Als .NET Framework 2.0 (of hoger) of .NET Core 1.0 (of hoger) en SQL Server Express al op de doelcomputer zijn geïnstalleerd, kan het installatiepakket dat is gedownload als gevolg van een ClickOnce-actie worden geïnstalleerd en gebruikt door niet-beheerders. Houd er rekening mee dat een beheerder SQL Server Express moet installeren als dat deel uitmaakt van de installatie. Zie ClickOnce Deployment voor Windows Forms voor meer informatie.

  • Specifieke ASP.NET-hosting met Windows Authenticatie. Eén EXEMPLAAR van SQL Server Express kan worden gehost op een intranet. De toepassing maakt verbinding met het ASPNET Windows-account, niet met imitatie. Gebruikersexemplaren mogen niet worden gebruikt voor scenario's van derden of gedeelde hosting waarbij alle toepassingen hetzelfde gebruikersexemplaren delen en niet langer geïsoleerd van elkaar blijven.

Volgende stappen