Delen via


SQL Server Express-gebruikersexemplaren

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

Mogelijkheden van gebruikersexemplaren

Gebruikersexemplaren zijn handig voor gebruikers die Windows uitvoeren onder een gebruikersaccount met minimale bevoegdheden (LUA). Elke gebruiker heeft sql Server-systeembeheerdersbevoegdheden (sysadmin) voor het exemplaar dat op hun computer wordt uitgevoerd zonder ook als Windows-beheerder te hoeven worden uitgevoerd. 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 gebruikersexemplaren 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.

Notitie

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

Gebruikersexemplaren inschakelen

Als u gebruikersexemplaren wilt genereren, moet een bovenliggend exemplaar van SQL Server Express worden uitgevoerd. 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 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 gebruikersexemplaren kunnen niet worden gestart op een extern exemplaar van SQL Server en SQL Server-aanmeldingen zijn niet toegestaan.

Verbinding maken naar een gebruikersexemplaren

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

Let op het volgende over de voorbeeld-verbindingsreeks hieronder weergegeven:

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

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

  • De User Instance is ingesteld op true, waarmee een gebruikersexemplaren worden aangeroepen. (De standaardwaarde is false.)

  • Het AttachDbFileName trefwoord verbindingsreeks wordt gebruikt om het primaire databasebestand (.mdf) toe te voegen, dat de volledige padnaam moet bevatten. AttachDbFileNamekomt 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;  

Notitie

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

De | gebruikenDataDirectory | Vervangingstekenreeks

AttachDbFileName werd uitgebreid in ADO.NET 2.0 met de introductie van de |DataDirectory| vervangingstekenreeks (tussen pijpsymbolen). DataDirectorywordt gebruikt in combinatie met AttachDbFileName het aangeven van een relatief pad naar een gegevensbestand, zodat ontwikkelaars verbindingsreeks s 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 versie bijvoorbeeld C:\AppDirectory\app_data is, werkt het voorbeeld verbindingsreeks hierboven wordt weergegeven, omdat het lager is dan c:\AppDirectory. Als u echter probeert op te geven DataDirectory , |DataDirectory|\..\data 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.

Notitie

System.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 service wordt geopend, wordt deze omgeleid van het standaardexemplaren van SQL Server Express naar een door runtime geïnitieerd exemplaar dat wordt uitgevoerd onder het account van de aanroeper.

Notitie

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 nieuwSqlConnection, geeft de verbindingsreeks weer in het consolevenster en sluit vervolgens de verbinding bij het afsluiten van het using codeblok.

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

Notitie

Gebruikersexemplaren worden niet ondersteund in CLR-code (Common Language Runtime) die wordt uitgevoerd in SQL Server. Er InvalidOperationException wordt een gegooid als Open wordt opgeroepen op een SqlConnection die User Instance=true zich in de verbindingsreeks bevindt.

Levensduur van een gebruikersexemplaren Verbinding maken ion

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 gebruikersexemplaren, wordt het gebruikersexemplaren gestart als deze nog niet wordt uitgevoerd. 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 gebruikersexemplaren worden automatisch afgesloten als 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 gebruikersexemplaren instellen met behulp van sp_configure om de time-outoptie van het gebruikersexemplaren te wijzigen. De standaardwaarde is 60 minuten.

Notitie

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

Hoe gebruikersexemplaren werken

De eerste keer dat een gebruikersexemplaren voor elke gebruiker worden gegenereerd, worden de hoofd - en msdb-systeemdatabases gekopieerd uit de map Sjabloongegevens naar een pad onder de map met lokale toepassingsgegevensopslagplaats van de gebruiker voor exclusief gebruik door het gebruikersexemplaren. Dit pad is doorgaans C:\Documents and Settings\<UserName>\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS. Wanneer een gebruikersexemplaren worden 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 het gebruikersexemplaren zijn geverifieerd, wordt die gebruiker de sysadmin gebruiker 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.

Notitie

De .mdf- en LDF-bestanden vertegenwoordigen respectievelijk de database- en logboekbestanden. Deze twee bestanden zijn een overeenkomende set, dus zorg ervoor dat u de back-up- en herstelbewerkingen moet uitvoeren. 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 het gebruikersexemplaren 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 wordt uitgevoerd onder een gebruikersaccount met minimale bevoegdheden (LUA) en geen beheerdersbevoegdheden op de server of lokale computer heeft, maar nog databaseobjecten en toepassingen moet 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) 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.

  • Toegewezen ASP.NET hosting met Behulp van Windows-verificatie. 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.

Zie ook