Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
SQL Server Express Edition 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.
Povolit instance 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 během instalace SQL Serveru Express a mohou být systémovým správcem explicitně povoleny nebo zakázány tak, že na nadřazené instanci spustí systémovou uloženou proceduru sp_configure.
-- 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í k uživatelské instanci
Umožňují SqlConnection připojit se k instanci uživatele pomocí klíčových slov User Instance a AttachDBFilenameConnectionString. Uživatelské instance jsou také podporovány vlastnostmi SqlConnectionStringBuilder, UserInstance a AttachDBFilename.
Zvažte následující připojovací řetězec.
Data Source=.\\SQLExpress;Integrated Security=true;
User Instance=true;AttachDBFilename=|DataDirectory|\InstanceDB.mdf;
Initial Catalog=InstanceDB;
V tomto připojovacím řetězci:
- Klíčové
Data Sourceslovo odkazuje na nadřazenou instanci SQL Serveru Express, která generuje instanci uživatele. Výchozí instance je .\sqlexpress. -
Integrated Securityje nastaveno natrue. K připojení k instanci uživatele se vyžaduje ověřování systému Windows; Přihlášení k SQL Serveru se nepodporují. - Nastavení
User Instancenatruevyvolá instanci uživatele. (Výchozí hodnota jefalse.) - Klíčové slovo připojovacího řetězce
AttachDbFileNameslouží pro připojení primárního souboru databáze (.mdf), který musí obsahovat úplnou cestu.AttachDbFileNametaké odpovídá klíčům "rozšířených vlastností" a "počátečního názvu souboru" v SqlConnection připojovacím řetězci. - 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.
Poznámka:
K sestavení připojovacího řetězce za běhu můžete použít také vlastnosti SqlConnectionStringBuilder.UserInstance a SqlConnectionStringBuilder.AttachDBFilename.
Důležité
Microsoft doporučuje používat nejbezpečnější dostupný tok ověřování. Pokud se připojujete k Azure SQL, Spravované identity pro prostředky Azure jsou doporučenou metodou ověřování.
Použití náhradního řetězce |DataDirectory|
AttachDbFileName byla rozšířena v ADO.NET 2.0 se zavedením náhradního řetězce |DataDirectory| (uzavřeného ve svislítkách).
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;
Když je použit DataDirectory, výsledná cesta k souboru nemůže být ve struktuře adresářů výše než adresář, který je určen náhradním řetězcem. Pokud je například plně rozšířený 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 bude mít za následek chybu, protože \data není podadresářem \AppDirectory.
Pokud má připojovací řetězec nesprávně formátovaný řetězec nahrazení, bude vyvolána chyba ArgumentException.
Poznámka:
System.Data.SqlClient rozpozná náhradní řetězce do úplných cest v souborovém systému 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.
Při otevření se SqlConnection přesměruje z výchozí instance SQL Serveru Express na instanci iniciovanou za běhu a 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 je Open volána na SqlConnection, která má User Instance=true v připojovacím řetězci.
Životnost připojení uživatelské instance
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 upravit délku časového limitu pro uživatelskou instanci pomocí změny možnosti sp_configure pomocí . Výchozí hodnota je 60 minut.
Poznámka:
Pokud se Min Pool Size použije v připojovacím řetězci s hodnotou větší než nula, pool připojení bude vždy udržovat několik otevřených spojení a uživatelská instance se automaticky nevypne.
Jak fungují instance uživatelů
Při prvním vygenerování instance uživatele pro každého uživatele se systémové databáze mastermsdb zkopírují ze složky Data šablony do cesty pod adresářem místního úložiště dat aplikace pro výhradní použití uživatelskou instancí. 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íší také 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 uživatelských instancí
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é.