Sdílet prostřednictvím


Uživatelské instance SQL Serveru Express

Microsoft SQL Server Express Edition (SQL Server Express) podporuje funkci instance uživatele, která je k dispozici pouze při použití rozhraní .NET Framework Zprostředkovatel dat pro SQL Server (SqlClient). Instance uživatele je samostatná instance databázového stroje SQL Server Express, která je generována nadřazenou instancí. Instance uživatelů umožňují uživatelům, kteří nejsou správci na místních počítačích, připojit se k databázím SQL Server Express a připojit se k nim. Každá instance běží v kontextu zabezpečení jednotlivých uživatelů na základě jedné instance na uživatele.

Možnosti instance uživatele

Instance uživatelů jsou užitečné pro uživatele, kteří používají Windows v rámci uživatelského účtu s nejnižším oprávněním (LUA). Každý uživatel má oprávnění správce systému SQL Server (sysadmin) k instanci spuštěné na svém počítači, aniž by museli běžet jako správce systému Windows. Software spuštěný v instanci uživatele s omezenými oprávněními nemůže provádět změny v celém systému, protože instance SYSTÉMU SQL Server Express je spuštěna pod účtem systému Windows bez oprávnění správce uživatele, ne jako služba. Každá instance uživatele je izolovaná od nadřazené instance a od všech ostatních instancí uživatelů spuštěných na stejném počítači. Databáze spuštěné v instanci uživatele jsou otevřeny pouze v režimu jednoho uživatele a není možné, aby se více uživatelů připojilo k databázím spuštěným v instanci uživatele. Replikace a distribuované dotazy jsou také zakázány pro instance uživatelů.

Poznámka:

Instance uživatelů nejsou potřeba pro uživatele, kteří už jsou správci na vlastních počítačích, nebo pro scénáře zahrnující více uživatelů databáze.

Povolení instancí uživatelů

Aby bylo možné generovat instance uživatelů, musí být spuštěna nadřazená instance SQL Serveru Express. Uživatelské instance jsou ve výchozím nastavení povoleny při instalaci SQL Serveru Express a mohou být explicitně povoleny nebo zakázány správcem systému, který spouští sp_configure systém uloženou proceduru v nadřazené instanci.

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

Síťový protokol pro instance uživatelů musí být místní pojmenované kanály. Instanci uživatele nelze spustit ve vzdálené instanci SQL Serveru a přihlášení SQL Serveru nejsou povolená.

Připojení instance uživatele

Klíčová User Instance slova umožňují AttachDBFilenameConnectionStringSqlConnection připojení k instanci uživatele. Instance uživatelů jsou podporovány také vlastnostmi a AttachDBFilename vlastnostmiSqlConnectionStringBuilderUserInstance.

Všimněte si následujících ukázek připojovací řetězec níže:

  • Klíčové Data Source slovo odkazuje na nadřazenou instanci SQL Serveru Express, která generuje instanci uživatele. Výchozí instance je .\sqlexpress.

  • Integrated Security je nastavena na truehodnotu . K připojení k instanci uživatele se vyžaduje ověřování systému Windows; Přihlášení k SQL Serveru se nepodporují.

  • Je nastavena User Instance na truehodnotu , která vyvolá instanci uživatele. (Výchozí hodnota je false.)

  • Klíčové AttachDbFileName slovo připojovací řetězec slouží k připojení primárního souboru databáze (.mdf), který musí obsahovat úplný název cesty. AttachDbFileNametaké odpovídá klíčům "rozšířených vlastností" a "počáteční název souboru" v rámci SqlConnection připojovací řetězec.

  • Náhradní |DataDirectory| řetězec uzavřený v symbolech kanálu odkazuje na datový adresář aplikace, který otevírá připojení, a poskytuje relativní cestu označující umístění databáze .mdf a souborů protokolů .ldf. Pokud chcete tyto soubory najít jinde, musíte zadat úplnou cestu k souborům.

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

Poznámka:

K sestavení připojovací řetězec v době běhu můžete použít SqlConnectionStringBuilderUserInstance také vlastnosti a AttachDBFilename vlastnosti.

Použití objektu |DataDirectory| Náhradní řetězec

AttachDbFileName byla rozšířena v ADO.NET 2.0 se zavedením náhradního |DataDirectory| řetězce (uzavřeným v symbolech potrubí). DataDirectoryse používá ve spojení s AttachDbFileName uvedením relativní cesty k datovému souboru, což vývojářům umožňuje vytvářet připojovací řetězec založené na relativní cestě ke zdroji dat místo toho, aby museli zadat úplnou cestu.

Fyzické umístění, na které DataDirectory odkazuje, závisí na typu aplikace. V tomto příkladu je soubor Northwind.mdf, který se má připojit, umístěný ve složce \app_data aplikace.

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

Při DataDirectory použití nemůže být výsledná cesta k souboru ve struktuře adresářů vyšší než adresář odkazován na náhradní řetězec. Pokud je například plně rozbalený DataDirectory C:\AppDirectory\app_data, funguje ukázková připojovací řetězec uvedená výše, protože je pod c:\AppDirectory. Pokus o zadání DataDirectory jako |DataDirectory|\..\data výsledek chyby, protože \data nejsou podadresářem \AppDirectory.

Pokud má připojovací řetězec nesprávně formátovaný řetězec nahrazení, ArgumentException vyvolá se chyba.

Poznámka:

System.Data.SqlClient přeloží náhradní řetězce do úplných cest v systému souborů místního počítače. Proto nejsou podporovány názvy cest vzdáleného serveru, PROTOKOLU HTTP a UNC. Při otevření připojení dojde k výjimce, pokud server není umístěn v místním počítači.

SqlConnection Při otevření se přesměruje z výchozí instance SQL Serveru Express na instanci spuštěnou za běhu spuštěnou pod účtem volajícího.

Poznámka:

Může být nutné zvýšit ConnectionTimeout hodnotu, protože načtení instancí uživatelů může trvat déle než běžné instance.

Následující fragment kódu otevře novou SqlConnection, zobrazí připojovací řetězec v okně konzoly a poté připojení zavře při ukončení using bloku kódu.

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

Poznámka:

Uživatelské instance nejsou podporovány v kódu CLR (Common Language Runtime), který běží uvnitř SQL Serveru. Vyvolá seInvalidOperationException, pokud Open je volána na objektuSqlConnection, který má User Instance=true v připojovací řetězec.

Doba života Připojení instance uživatele

Na rozdíl od verzí SQL Serveru, které běží jako služba, nemusí být instance SQL Serveru Express spuštěny a zastaveny ručně. Pokaždé, když se uživatel přihlásí a připojí k instanci uživatele, instance uživatele se spustí, pokud ještě není spuštěná. Databáze instancí uživatelů mají nastavenou AutoClose možnost, aby se databáze po určité době nečinnosti automaticky vypnula. Spuštěný proces sqlservr.exe se po zavření posledního připojení k instanci uchovává po omezenou dobu časového limitu, takže se nemusí restartovat, pokud se před vypršením časového limitu otevře jiné připojení. Instance uživatele se automaticky vypne, pokud se před vypršením časového limitu neotevře žádné nové připojení. Správce systému v nadřazené instanci může nastavit dobu časového limitu pro instanci uživatele pomocí sp_configure změnit možnost časového limitu instance uživatele. Výchozí hodnota je 60 minut.

Poznámka:

Pokud Min Pool Size se použije v připojovací řetězec s hodnotou větší než nula, fond připojení bude vždy udržovat několik otevřených připojení a instance uživatele se automaticky nevypne.

Jak fungují instance uživatelů

Při prvním vygenerování instance uživatele pro každého uživatele se hlavní databáze a systémové databáze msdb zkopírují ze složky Data šablony do cesty pod adresářem místního úložiště dat aplikace uživatele pro výhradní použití instancí uživatele. Tato cesta je obvykle C:\Documents and Settings\<UserName>\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS. Při spuštění instance uživatele se do tohoto adresáře zapíše také databáze tempdb, protokol a trasovací soubory. Pro instanci se vygeneruje název, který zaručuje jedinečnost pro každého uživatele.

Ve výchozím nastavení mají všichni členové skupiny Windows Builtin\Users udělená oprávnění pro připojení k místní instanci a také oprávnění ke čtení a spouštění v binárních souborech SQL Serveru. Po ověření přihlašovacích údajů volajícího uživatele hostujícího instanci uživatele se tento uživatel stane sysadmin v této instanci. Pro instance uživatelů je povolena pouze sdílená paměť, což znamená, že je možné provádět pouze operace na místním počítači.

Uživatelům musí být udělena oprávnění ke čtení i zápisu pro soubory .mdf i .ldf zadané v připojovací řetězec.

Poznámka:

Soubory .mdf a .ldf představují soubory databáze a protokolu. Tyto dva soubory jsou spárované sady, takže je potřeba při operacích zálohování a obnovení provést opatrně. Soubor databáze obsahuje informace o přesné verzi souboru protokolu a databáze se neotevře, pokud je spojená s nesprávným souborem protokolu.

Aby nedošlo k poškození dat, otevře se databáze v instanci uživatele s výhradním přístupem. Pokud dvě různé instance uživatelů sdílejí stejnou databázi na stejném počítači, musí uživatel v první instanci zavřít databázi, aby ji bylo možné otevřít v druhé instanci.

Scénáře instancí uživatelů

Uživatelské instance poskytují vývojářům databázových aplikací úložiště dat SQL Serveru, které nezávisí na vývojářích, kteří mají účty pro správu na svých vývojových počítačích. Instance uživatelů jsou založené na modelu Access/Jet, kde se databázová aplikace jednoduše připojuje k souboru a uživatel má automaticky úplná oprávnění ke všem databázovým objektům bez nutnosti zásahu správce systému k udělení oprávnění. Má fungovat v situacích, kdy uživatel běží pod uživatelským účtem s nejnižšími oprávněními (LUA) a nemá oprávnění správce na serveru nebo místním počítači, ale potřebuje vytvářet databázové objekty a aplikace. Instance uživatelů umožňují uživatelům vytvářet instance za běhu, které běží pod vlastním kontextem zabezpečení uživatele, a ne v kontextu zabezpečení privilegované systémové služby.

Důležité

Uživatelské instance by se měly používat jenom ve scénářích, kdy jsou všechny aplikace, které ji používají, plně důvěryhodné.

Scénáře uživatelských instancí zahrnují:

  • Libovolná aplikace s jedním uživatelem, ve které není vyžadováno sdílení dat.

  • Nasazení ClickOnce Pokud jsou na cílovém počítači již nainstalované rozhraní .NET Framework 2.0 (nebo novější) a SQL Server Express, instalační balíček stažený v důsledku akce ClickOnce je možné nainstalovat a používat uživatele bez oprávnění správce. Upozorňujeme, že pokud je součástí instalace, musí správce nainstalovat SQL Server Express. Další informace naleznete v tématu Nasazení ClickOnce pro model Windows Forms.

  • Vyhrazené ASP.NET hostování pomocí ověřování systému Windows. Jednu instanci SQL Serveru Express je možné hostovat v intranetu. Aplikace se připojuje pomocí účtu ASPNET pro Windows, ne pomocí zosobnění. Instance uživatelů by se neměly používat pro scénáře hostování třetích stran ani pro sdílené hostitelské scénáře, kdy by všechny aplikace sdílely stejnou instanci uživatele a už by mezi sebou nebyly izolované.

Viz také