Sdílet prostřednictvím


Instance uživatelů SQL Serveru Express

Stáhnout ADO.NET

Microsoft SQL Server Express Edition (SQL Server Express) podporuje funkci instance uživatele, která je k dispozici pouze při použití zprostředkovatele dat Microsoft SqlClient pro SQL Server. 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í Systém Windows v rámci uživatelského účtu s minimálním oprávněním (LUA), protože každý uživatel má oprávnění správce systému SQL Server (sysadmin) nad instancí spuštěnou 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ů.

Další informace naleznete v tématu "Instance uživatelů" v SQL Server Books Online.

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í uživatelských instancí

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'  

Pro instance uživatelů musí být síťovým protokolem 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 instanci uživatele

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

Všimněte si následujících ukázkových připojovacích řetězců:

  • 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 nastaveno na true. K připojení k instanci uživatele se vyžaduje ověřování systému Windows; Přihlášení k SQL Serveru se nepodporují.

  • User Instance je nastaveno na true, což vyvolá instanci uživatele. (Výchozí hodnota je false.)

  • Klíčové AttachDbFileName slovo připojovacího řetězce slouží k připojení primárního souboru databáze (.mdf), který musí obsahovat úplný název cesty. AttachDbFileName také odpovídá klíčům "extended properties" a "initial file name" v připojovacím řetězci SqlConnection.

  • 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:

Můžete také použít vlastnosti SqlConnectionStringBuilder, UserInstance a AttachDBFilename k vytvoření připojovacího řetězce za běhu.

Použití náhradního řetězce |DataDirectory|

DataDirectory se 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ězce 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 použití DataDirectory nemůže být výsledná cesta k souboru ve struktuře adresářů výše než adresář určený náhradním řetězcem. 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 bude mít za následek chybu, protože \data není podadresářem \AppDirectory.

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

Poznámka:

Microsoft.Data.SqlClient převede náhradní řetězce na úplné cesty 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.

Při otevření SqlConnection je přesměrován z výchozí instance SQL Serveru Express na instanci iniciovanou za běhu, která je spuštěna 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 nový SqlConnection, zobrazí připojovací řetězec v okně konzoly a poté připojení zavře při ukončení using bloku kódu.

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á se InvalidOperationException, pokud je Open volána na SqlConnection, která má User Instance=true v připojovacím řetězci.

Životnost 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. Proces sqlservr.exe, který je spuštěný, je spuštěn po omezenou dobu časového limitu po zavření posledního připojení k instanci, 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, aby změnil možnost user instance timeout. Výchozí hodnota je 60 minut.

Poznámka:

Pokud Min Pool Size se použije v připojovacím řetězci s hodnotou větší než nula, bude nástroj pro sdružování připojení 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, který hostuje uživatelskou instanci, 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 v souborech .mdf i .ldf zadaných v připojovacím řetězci.

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.

Uživatelské případové scénáře

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 rozhraní .NET Framework 2.0 (nebo novější) nebo .NET Core 1.0 (nebo novější) a SQL Server Express již nainstalovány na cílovém počítači, instalační balíček stažený v důsledku akce ClickOnce lze 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 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é.

Další kroky