Sdílet prostřednictvím


Databáze s omezením

platí pro: SQL Server Azure SQL DatabaseAzure SQL Managed Instance

Obsažená databáze je databáze, která je izolovaná od jiných databází a od instance SYSTÉMU SQL Server, která je hostitelem databáze. SQL Server pomáhá uživatelům izolovat svou databázi od instance 4 způsoby.

  • Většina metadat, která popisují databázi, se udržuje v databázi. (Kromě údržby metadat v hlavní databázi nebo místo toho.)

  • Všechna metadata jsou definována pomocí stejné kolace.

  • Databázi může provádět ověřování uživatelů, což snižuje závislost databází na přihlášeních instance SQL Serveru.

  • Sestavy prostředí SQL Server (DMV, XEvents atd.) poskytují informace a mohou reagovat na údaje o izolaci.

Některé funkce částečně obsažených databází, například ukládání metadat do databáze, platí pro všechny databáze SQL Serveru. Některé výhody částečně obsažených databází, jako je ověřování na úrovni databáze a kolace katalogu, musí být povoleny, než budou k dispozici. Částečné zavazování je povoleno pomocí příkazů CREATE DATABASE a ALTER DATABASE nebo pomocí aplikace SQL Server Management Studio. Další informace o povolení částečného zahrnutí databáze naleznete v tématu Migrace do částečně obsažené databáze.

Koncepty částečně integrované databáze

Plně obsažená databáze obsahuje všechna nastavení a metadata potřebná k definování databáze a nemá žádné závislosti konfigurace na instanci databázového stroje SQL Serveru, kde je databáze nainstalovaná. V předchozích verzích SQL Serveru mohlo být oddělení databáze od instance SQL Serveru časově náročné a vyžadovalo podrobné znalosti vztahu mezi databází a instancí SQL Serveru. Částečně obsažené databáze usnadňují oddělení databáze od instance SQL Serveru a jiných databází.

Obsažená databáze zvažuje vlastnosti vzhledem k omezení. Každá uživatelem definovaná entita, která spoléhá pouze na funkce, které se nacházejí v databázi, je považována za plně obsaženou. Každá uživatelem definovaná entita, která závisí na funkcích umístěných mimo databázi, se považuje za neobsazenou. (Další informace najdete v části Omezení dále v tomto tématu.)

Následující termíny platí pro model databáze s omezením.

Hranice databáze
Hranice mezi databází a instancí SQL Serveru. Hranice mezi databází a jinými databázemi.

Obsahoval
Prvek, který existuje zcela v hranici databáze.

Nenepodchycené
Prvek, který překračuje hranice databáze.

Neomezená databáze
Databáze s omezením nastavená na NONE. Všechny databáze ve starších verzích než SQL Server 2012 (11.x) nejsou obsažené. Ve výchozím nastavení mají všechny databáze SQL Serveru 2012 (11.x) a novější nastavené omezení na HODNOTU NONE.

Částečně obsažená databáze
Částečně obsažená databáze je obsažená databáze, která umožňuje některé funkce, které překračují hranice databáze. SQL Server obsahuje možnost určit, kdy se hranice omezení protíná.

Uživatelsky omezený
Existují dva typy uživatelů pro obsažené databáze.

  • Uživatel databáze s omezenými právy s heslem

    Uživatelé v databázi s přístupovými hesly jsou ověřováni databází. Další informace najdete v tématu Uživatelé databáze s omezením – zajištění přenositelnosti databáze.

  • Objekty zabezpečení systému Windows

    Autorizovaní uživatelé a členové autorizovaných skupin Windows se můžou připojit přímo k databázi a nepotřebují přihlášení v hlavní databázi. Databáze důvěřuje ověřování systémem Windows.

Uživatelům na základě přihlášení v hlavní databázi lze udělit přístup k obsažené databázi, ale tím by se vytvořila závislost na instanci SQL Serveru. Vytváření uživatelů na základě přihlášení proto vyžaduje částečné zamezení.

Důležité

Povolení částečně obsažených databází deleguje kontrolu nad přístupem k instanci SQL Serveru vlastníkům databáze. Další informace naleznete v tématu osvědčené postupy zabezpečení s databázemi s omezením.

Hranice databáze
Vzhledem k tomu, že částečně obsažené databáze oddělují funkce databáze od funkcí instance, existuje jasně definovaná čára mezi těmito dvěma prvky, která se nazývá hranice databáze.

Uvnitř hranice databáze je model databáze, ve kterém se databáze vyvíjejí a spravují. Mezi příklady entit umístěných uvnitř databáze patří systémové tabulky, jako je sys.tables, uživatelé v rámci databáze s hesly a uživatelské tabulky v aktuální databázi, na které se odkazuje dvoudílným názvem.

Mimo hranice databáze je model správy, který se týká funkcí a správy na úrovni instance. Mezi příklady entit umístěných mimo hranici databáze patří systémové tabulky jako sys.endpoints, uživatelé namapovaní na účty a uživatelské tabulky v jiné databázi, na kterou odkazuje třídílný název.

Containment

Uživatelské entity, které se nacházejí výhradně v databázi, jsou považovány za obsažené. Všechny entity, které se nacházejí mimo databázi nebo se spoléhají na interakci s funkcemi mimo databázi, se považují za neobsazené.

Obecně platí, že entity uživatelů spadají do následujících kategorií zahrnutí:

  • Plně obsažené uživatelské entity (ty, které nikdy nepřekračují hranice databáze), například sys.indexes. Veškerý kód, který tyto funkce používá, nebo jakýkoli objekt, který odkazuje pouze na tyto entity, je také plně obsažen.

  • Nezařazené uživatelské entity (ty, které překračují hranice databáze), například sys.server_principals nebo samotný objekt zabezpečení serveru (přihlášení). Jakýkoli kód, který tyto entity používá, nebo jakékoli funkce, které odkazují na tyto entity, nejsou obsaženy.

Částečně obsažená databáze

Funkce obsažené databáze je aktuálně k dispozici pouze v částečně obsaženém stavu. Částečně obsažená databáze je obsažená databáze, která umožňuje použití neobsažených funkcí.

Pomocí zobrazení sys.dm_db_uncontained_entities a sys.sql_modules (Transact-SQL) můžete vrátit informace o neobsazených objektech nebo funkcích. Určením stavu zahrnutí prvků databáze můžete zjistit, jaké objekty nebo funkce musí být nahrazeny nebo změněny, aby bylo možné zvýšit úroveň zahrnutí.

Důležité

Vzhledem k tomu, že některé objekty mají výchozí nastavení omezení none, může toto zobrazení vrátit falešně pozitivní výsledky.

Chování částečně obsažených databází se liší od chování databází, které nejsou obsažené, pokud jde o kolaci. Další informace o problémech s kolací naleznete v tématu Contained Database Collations.

Výhody používání částečně obsažených databází

Dochází k problémům a komplikacím spojeným s neúplnými databázemi, které se dají vyřešit pomocí částečně obsažené databáze.

Přesun databáze

Jedním z problémů, ke kterým dochází při přesouvání databází, je, že některé důležité informace můžou být při přesunu databáze z jedné instance do druhé nedostupné. Přihlašovací údaje se například ukládají v instanci místo v databázi. Když přesunete databázi, která není obsažená z jedné instance do jiné instance SQL Serveru, zůstanou tyto informace za sebou. Musíte identifikovat chybějící informace a přesunout je s databází do nové instance SQL Serveru. Tento proces může být náročný a časově náročný.

Částečně obsažená databáze může do databáze ukládat důležité informace, aby databáze po přesunutí stále obsahovala informace.

Poznámka:

Částečně obsažená databáze může poskytnout dokumentaci popisující funkce používané databází, které nelze oddělit od instance. To zahrnuje seznam dalších vzájemně propojených databází, systémová nastavení, která databáze vyžaduje, ale nemůže být obsažena atd.

Výhoda uživatelů omezené databáze s funkcí Always On

Snížením vazeb na instanci SQL Serveru mohou být částečně obsažené databáze užitečné pro převzetí služeb při selhání při použití skupin dostupnosti Always On.

Vytváření uživatelů s omezením umožňuje uživateli připojit se přímo k obsažené databázi. Jedná se o velmi důležitou funkci ve scénářích s vysokou dostupností a zotavením po havárii, jako je řešení AlwaysOn. Pokud jsou uživatelé obsaženými uživateli, v případě selhání by se lidé mohli připojit k sekundární instanci bez vytváření přihlášení v instanci, která hostí sekundární. To poskytuje okamžitou výhodu. Další informace najdete v tématu Přehled skupin dostupnosti AlwaysOn (SQL Server) a předpokladů, omezení a doporučení pro skupiny dostupnosti AlwaysOn (SQL Server).

Počáteční vývoj databází

Vzhledem k tomu, že vývojář nemusí vědět, kde se nasadí nová databáze, omezení nasazených dopadů prostředí na databázi sníží práci a obavy vývojáře. V modelu, který není obsažený, musí vývojář zvážit možné dopady prostředí na novou databázi a program odpovídajícím způsobem. Díky použití částečně obsažených databází ale můžou vývojáři zjistit dopady na úrovni instance na databázi a problémy na úrovni instance pro vývojáře.

Správa databáze

Udržování nastavení databáze v databázi, nikoli v hlavní databázi, umožňuje každému vlastníkovi databáze větší kontrolu nad jejich databází, aniž by udělil oprávnění správce sysadmin vlastníka databáze.

Omezení

Částečně obsažené databáze neumožňují následující funkce.

  • Replikace, zachytávání dat změn nebo sledování změn

  • Číslovaný postup

  • Objekty vázané na schéma, které závisí na předdefinovaných funkcích se změnami kolace

  • Změna vazby vyplývající ze změn kolace, včetně odkazů na objekty, sloupce, symboly nebo typy

Výstraha

Dočasné uložené procedury jsou momentálně povolené. Vzhledem k tomu, že dočasné uložené procedury obsahují porušení zabezpečení, neočekává se, že budou podporovány v budoucích verzích databáze s omezením.

Identifikace uzavřenosti databáze

Existují dva nástroje, které vám pomůžou identifikovat stav zahrnutí databáze. sys.dm_db_uncontained_entities (Transact-SQL) je pohled, který zobrazuje všechny potenciálně neobsazené entity v databázi. Událost database_uncontained_usage nastane, když je v době běhu identifikována jakákoli skutečná neobsažená entita.

sys.dm_db_uncontained_entities

Toto zobrazení ukazuje všechny entity v databázi, které by mohly být neudržitelné, například ty, které překračují hranici databáze. To zahrnuje entity uživatelů, které mohou používat objekty mimo databázový model. Vzhledem k tomu, že zahrnutí některých entit (například těch používajících dynamické SQL) nelze určit do doby běhu, může zobrazení zobrazit některé entity, které nejsou ve skutečnosti obsaženy. Další informace najdete v tématu sys.dm_db_uncontained_entities (Transact-SQL).

událost databáze neobsaženého použití

XEvent nastane pokaždé, když je během běhu identifikována neobsažená entita. To zahrnuje entity pocházející z klientského kódu. K tomuto XEventu dojde pouze pro skutečné neobsahované entity. K události však dochází pouze za běhu. Proto nebudou neohraničené uživatelské entity, které jste nespustili, touto událostí XEvent identifikovány.

Viz také

Upravené funkce (obsažená databáze)
Obsahové kolace databáze
Osvědčené postupy zabezpečení s databázemi s omezením
Migrace do částečně obsažené databáze
Uživatelé databáze s omezením – zajištění přenositelnosti databáze