Row-Level Security
Umožňuje omezit přístup uživatelů či skupině uživatelů k záznamům v tabulce na základě stanovených podmínek. Omezení přístupu se děje přímo na databázové vrstvě a je tak pro aplikace transparentní. Jinými slovy SQL server nedovolí uživateli načíst nepovolená data.
Implementace spočívá ve vytvoření Security Policy, která využívá predikát pro určení, zda záznam v tabulce má být vyřazen z výstupu. Predikát je jednoduchá inline funkce, která vrací tabulku. Neexistuje-li ve výstupní tabulce predikátu žádný řádek, záznam je z datové tabulky odfiltrován a nezobrazen na výstupu.
S uvedenou funkcionalitou souvisí dva nové pohledy:
sys.security_policies
Seznam bezpečnostních politik definovaných pro danou databázi.
sys.security_predicates
Seznam predikátů přiřazených k bezpečnostním politikám databáze.
Query Store
Další zajímavou novinkou je Query Store, který lze zapnout pro jednu konkrétní databázi. Server provádí monitoring dotazů a ukládá jejich historii, plány a runtime statistiky. Zpětně můžete analyzovat efektivnost použitých plánů.
V principu funguje Query Store poměrně jednoduše. Při prvním spuštění dotazu provede SQL engine analýzu struktury dotazu a podívá se do plan cache, zda-li je plán pro daný dotaz k dispozici. Pokud není provede se vytvoření plánu, jeho kompilace a použije se k získání výsledku, který daný dotaz vrátí uživateli. Query Store si tento plán uloží do svého odděleného úložiště. Můžete si povšimnout, jaký byl vybrán index.
V případě druhého spuštění dotazu se použije předkompilovaný plán z Plan Cache. V půběhu času se může změnit struktura indexů zdrojových tabulek, a některé indexy může Query Optimizer vyhodnotit jako výhodnější pro daný dotaz. V tabulce Person jsem vytvořil nový index pro sloupec Title. Při spuštění dotazu proběhne vytvoření nového plánu, který se také uloží do Query Store. Můžete porovnat, který plán je efektivnější pro daný dotaz.
Dále můžete říci, že si přejete používat pouze tento druhý plán (viz tlačítko Force Plan). Při opětovném spuštění dotazu bude server upřednostňovat vámi zvolený plán.
V případě odstranění indexu, který plán používá, dojde k zneplatnění celého plánu. SQL engine se k takto přiřazenému plánu chová jakoby neexistoval a opět použije nějaký jiný existující nebo si jej sám zkompiluje.
V souvislosti s Query Store tedy přibyly nové pohledy
sys.database_query_store_options sys.query_context_settings sys.query_store_plan sys.query_store_query sys.query_store_query_text sys.query_store_runtime_stats sys.query_store_runtime_stats_interval
Uložené procedury
sp_query_store_flush_db sp_query_store_reset_exec_stats sp_query_store_force_plan sp_query_store_unforce_plan sp_query_store_remove_plan sp_query_store_remove_query
sys.dm_exec_session_wait_stats
Přibyly nové informace, které aktuálně vrací tento pohled.
sys.dm_exec_session_wait_stats
Vrací Wait statistiky pro dané sezení. V podstatě vrací stejné informace vztažené k danému sezení jako sys.dm_os_wait_stats doplněné o session_id.