Správa přihlášení a uživatelů v SQL Serveru je klíčovým aspektem administrace databází. Využití PowerShellu, konkrétně modulu sqlserver, může značně zjednodušit a zautomatizovat procesy spojené s těmito úkoly, jako je audit přihlášení, čištění starých přihlášení nebo správa oprávnění na úrovni serveru i databáze.

Pro efektivní správu přihlášení můžeme použít příkaz Get-SqlLogin, který nám umožňuje získat seznam všech SQL přihlášení. Tento příkaz je velmi užitečný pro audit přihlášení, ověřování názvů a kontrolu existence konkrétních přihlášení v SQL Serveru. Dále můžeme přidat tento příkaz do skriptů, čímž zautomatizujeme administrativní úkoly. Pro odstranění starých přihlášení využijeme cmdlet Remove-SqlLogin, jak ukazuje následující skript:

powershell
$params = @{
ServerInstance = "localhost" LoginName = "*Pete*" Wildcard = $true LoginType = "SqlLogin" } Get-SqlLogin @params | Remove-SqlLogin

Tento skript vyhledá všechna přihlášení, která odpovídají danému vzoru (v tomto případě všechna přihlášení obsahující řetězec „Pete“), a následně je odstraní z instance SQL Serveru.

Práce se serverovými rolemi

Pokud jde o přidávání přihlášení do serverových rolí, modul sqlserver není dostatečně robustní pro všechny operace, zejména pro správu rolí na úrovni serveru. Proto je nutné využít objekty SMO (SQL Server Management Objects), které nám umožňují přistupovat k serverovým rolím a přidávat uživatele do specifických rolí.

Následující skript ukazuje, jak přidat přihlášení „Pete“ do role dbcreator, což umožní tomuto uživateli vytvářet nové databáze:

powershell
# Vytvoření instance SMO pro SQL Server
$Server = [Server]::new("localhost") # Vyhledání role dbcreator $ServerRole = $Server.Roles["dbcreator"] # Přidání přihlášení do role $ServerRole.AddMember("Pete")

Tento proces lze rozšířit i o správu rolí na úrovni databáze.

Práce s uživateli databáze

Pokud potřebujeme přidat uživatele do konkrétní databáze, opět se bez SMO neobejdeme. Skript uvedený níže ukazuje, jak přidat uživatele „Pete“ do databáze WideWorldImporters a následně ho přiřadit do role db_datareader, která poskytuje oprávnění pro čtení dat:

powershell
# Vytvoření instance SMO pro SQL Server
$Server = [Server]::new("localhost") # Vytvoření instance databáze $Database = $Server.Databases["WideWorldImporters"] # Vytvoření uživatele v databázi a přiřazení přihlášení $DbUser = [Microsoft.SqlServer.Management.Smo.User]::New($Database, "Pete") $DbUser.Login = "Pete" # Vytvoření uživatele v databázi $DbUser.Create() # Přiřazení uživatele do role db_datareader $DbUser.AddToRole("db_datareader")

Tento skript ukazuje nejen vytvoření databázového uživatele, ale i přiřazení specifických oprávnění prostřednictvím rolí.

Práce s přihlašovacími údaji (Credentials)

V SQL Serveru je objekt Credential používán pro autentifikaci vůči externím zdrojům, jako je připojení k úložištím v cloudu nebo provádění úloh v SQL Server Agentu pod jiným bezpečnostním kontextem. Například, když joby v SQL Server Agentu potřebují zvýšená oprávnění, je možné vytvořit objekt Credential, který mapuje na jiný účet AD, čímž se zajistí, že joby budou vykonávány s odpovídajícími oprávněními.

Pro vytvoření nového přihlašovacího údaje v SQL Serveru můžeme použít následující skript:

powershell
$Password = 'Pa$$w0rd' $SecurePassword = ConvertTo-SecureString $Password -AsPlainText -Force $params = @{ Name = "WinUser" Identity = "POSHSQL\Pete" Secret = $SecurePassword Path = "SQLServer:\SQL\localhost\default" } New-SqlCredential @params

Tento skript vytvoří nový objekt přihlašovacích údajů, který bude použit pro autentifikaci k Windows účtu „POSHSQL\Pete“.

Pro správu přihlašovacích údajů, jejich vyhledávání nebo odstraňování, můžeme použít cmdlet Get-SqlCredential a Remove-SqlCredential, jak je ukázáno v následujícím příkladu:

powershell
$params = @{
Name = "WinUser" Path = "SQLServer:\SQL\localhost\default" } Get-SqlCredential @params | Remove-SqlCredential

Správa dostupnosti pomocí AlwaysOn

Modul sqlserver obsahuje několik cmdletů pro správu AlwaysOn Availability Groups, což je klíčová technologie pro zajištění vysoké dostupnosti a disaster recovery v SQL Serveru. Tyto cmdlety umožňují správu skupin dostupnosti, monitorování a konfiguraci replikace dat. V plném rozsahu se však správa AlwaysOn Groups v této knize neprobírá, ale pro detailní informace je možné se obrátit na publikace jako SQL Server 2019 AlwaysOn, které pokrývají tuto oblast.

Jak pracovat s modulem sqlserver v PowerShellu: základy a doporučení pro efektivní využití

Práce s modulem sqlserver v PowerShellu se stala nezbytnou součástí administrace SQL Serveru, ať už jde o spouštění dotazů, správu databází nebo automatizaci rutinních úkolů. Tento modul nabízí silné nástroje pro správu serveru, ale jeho efektivní využívání vyžaduje určité znalosti a zkušenosti, aby bylo možné maximalizovat jeho potenciál a správně nastavit procesy.

Základním nástrojem pro práci s modulem sqlserver je cmdlet Invoke-SqlCmd, který slouží k provádění T-SQL dotazů z PowerShellu. Tento nástroj je univerzální a nabízí velkou flexibilitu, což umožňuje jak jednorázové spuštění skriptů, tak i složité operace s proměnnými, parametry a chybovými hláškami.

Použití Invoke-SqlCmd k vykonávání dotazů je jednoduché, ale pro jeho efektivní nasazení je třeba pochopit několik základních principů. První z nich je správná konstrukce dotazů, které je třeba spustit. Cmdlet podporuje přímé zadání dotazu ve formě řetězce nebo načtení SQL souboru, což výrazně usnadňuje práci, pokud máme složitější skripty, které je potřeba spustit opakovaně.

Při práci s parametry je nutné mít na paměti, že některé operace mohou vyžadovat dynamické předání hodnot, které mohou být specifikovány při každém volání cmdletu. Parametry mohou být použity k předání hodnot do SQL dotazů nebo k nastavení specifických vlastností připojení k databázi. Důležité je, že při použití parametrů musí být vždy zajištěno správné zpracování dat a ochrana proti potenciálním bezpečnostním hrozbám, jako jsou SQL injekce.

Správné zacházení s chybami je další klíčovou dovedností při práci s Invoke-SqlCmd. Chybová hlášení mohou být vrácena nejen při nesprávném dotazu, ale i při problémech s připojením k databázi nebo v případě, že server neodpovídá. Je nezbytné mít připravený plán pro diagnostiku a opravu těchto problémů, což zahrnuje sledování chybových kódů a textových popisů.

Jednou z často používaných funkcí je zapisování výsledků do souboru. Tento postup se využívá především v případě, kdy je potřeba uchovávat výsledky pro pozdější analýzu nebo audit. PowerShell umožňuje snadno přesměrovat výstup do souboru ve formátu CSV nebo TXT, což může být užitečné pro generování reportů.

Další oblastí, kterou je třeba věnovat pozornost, je správa bezpečnostních objektů. Práce s přihlášeními, rolí serveru a uživatelskými účty je nezbytná pro správnou konfiguraci a zabezpečení SQL Serveru. Modul sqlserver nabízí cmdlety pro vytváření a správu přihlášení, databázových uživatelů a dalších bezpečnostních objektů. Tyto cmdlety pomáhají nejen při administraci, ale také při auditu přístupových práv a auditování uživatelských aktivit.

Je důležité také pochopit, jak správně nastavit kontext uživatele, který provádí operace na serveru. Bez správného nastavení tohoto kontextu mohou nastat problémy s oprávněními, přístupem k určitým datům a výkonností skriptů.

Zabezpečení na úrovni databáze se neomezuje pouze na správu uživatelů a přihlášení. Důležité je také správné použití přihlašovacích údajů a používání bezpečných metod autentifikace. Cmdlet Invoke-SqlCmd podporuje autentifikaci pomocí přihlašovacích údajů a certifikátů, což je klíčové pro ochranu citlivých dat.

Pokud jde o správu dostupnosti a replikace, modul sqlserver poskytuje nástroje pro práci s Availability Groups. Tento prvek je kritický pro zajištění vysoké dostupnosti a obnovy po havárii v produkčním prostředí. Správná konfigurace těchto funkcí je důležitá pro minimalizaci výpadků a optimalizaci výkonu.

Je nutné také pečlivě spravovat bezpečnostní objekty, jako jsou role serveru a databáze. Výběr správné role pro uživatele a definování konkrétních přístupových práv zajišťuje, že administrátor bude mít pod kontrolou, kdo a jakým způsobem může manipulovat s databázovými objekty.

Přechod na správu pomocí Invoke-SqlCmd a automatizace těchto procesů umožňuje nejen zvýšit efektivitu správy databázových prostředí, ale také snižuje riziko lidské chyby a zvyšuje konzistenci operací. V kombinaci s dalšími nástroji PowerShellu lze dosáhnout plně automatizovaných procesů, které šetří čas a zdroje.

Pro zajištění dlouhodobé udržitelnosti a bezpečnosti je vhodné při práci s modulem sqlserver také pravidelně aktualizovat bezpečnostní protokoly a monitorovat provoz. Zároveň je důležité neustále sledovat výkonnostní metriky a přizpůsobovat skripty aktuálním potřebám.

Jak efektivně spravovat fragmentaci indexů v SQL Serveru pomocí dynamických skriptů pro rebuild

Fragmentace indexů je častým problémem v databázových systémech, zejména v případě, kdy se s databázemi pracuje na dlouhodobé bázi. Tento jev může výrazně zpomalit výkon dotazů a snížit efektivitu ukládání dat. Správná správa a optimalizace indexů je tedy klíčová pro udržení vysoké výkonnosti SQL Serveru. Jedním z nejúčinnějších nástrojů pro tento účel je dynamický skript pro rebuild indexů, který je schopen efektivně zajišťovat pouze ty operace, které jsou nezbytné.

Skript pro rebuild indexů využívá funkci sys.dm_db_index_physical_stats, což je dynamická funkce správy v SQL Serveru, která vrací statistiky o fragmentaci indexů. Tyto statistiky zahrnují informace o externí fragmentaci indexu, což je klíčový ukazatel pro rozhodování, zda je index třeba znovu vybudovat, reorganizovat nebo ho nechat bez změn. K tomu je nutné použít několik parametrů, které definují konkrétní databázi, tabulku nebo index, na který se funkce vztahuje.

Funkce sys.dm_db_index_physical_stats nabízí různé parametry pro filtrování požadovaných dat. Mezi hlavní patří:

  • Database_ID: Identifikátor databáze, na kterou funkce bude aplikována.

  • Object_ID: Identifikátor objektu (tabulky), na který se funkce vztahuje.

  • Index_ID: Identifikátor konkrétního indexu. 1 obvykle označuje index tabulky (clustered index).

  • Mode: Tento parametr určuje úroveň podrobnosti skenování. Možnosti zahrnují:

    • LIMITED: Skenuje pouze ne-leaf úrovně indexu.

    • SAMPLED: Skenuje 1 % stránek v tabulce, což je výhodné pro velké tabulky.

    • DETAILED: Skenuje 100 % stránek tabulky, což může být časově náročné, ale poskytuje podrobné údaje.

Na základě výsledků, které funkce vrací, je možné identifikovat fragmentaci indexů. V případě, že fragmentace přesáhne určitou hodnotu, například 25 %, je vhodné provést rebuild indexu. Tento proces spočívá v úplném přestavění indexu a odstranění fragmentace, což vede ke zlepšení výkonu dotazů a snížení nároků na úložný prostor.

Důležité je také pochopit, jak fungují jednotlivé sloupce, které funkce sys.dm_db_index_physical_stats vrací. Mezi nejdůležitější patří:

  • avg_fragmentation_in_percent: Průměrné procento externí fragmentace, což je indikátor toho, jak moc je index rozbitý.

  • fragment_count: Počet fragmentů v indexu.

  • avg_fragment_size_in_pages: Průměrná velikost fragmentu v počtu 8KB stránek.

  • page_count: Počet stránek v indexu.

Na základě těchto statistik lze přesně zjistit, zda je index přetížený fragmentací a zda je nezbytné provést operace, jako je rebuild nebo reorganizace. Rebuild znamená, že celý index bude přestavěn, což zajišťuje maximální efektivitu, ale je časově náročnější. Reorganizace, naopak, je méně náročná a provádí se na úrovni jednotlivých stránek, což může pomoci při mírné fragmentaci.

Pokud je fragmentace nízká nebo střední, může být efektivnější použít skript, který pouze reorganizuje indexy. Tato operace je rychlejší než rebuild, ale její účinnost závisí na konkrétní míře fragmentace. Proto je doporučeno pravidelně monitorovat úroveň fragmentace, aby bylo možné optimálně zvolit vhodnou operaci.

Skript pro rebuild indexů je tedy efektivním nástrojem pro automatizaci správy fragmentace v SQL Serveru. Skript, který vybere pouze indexy s vysokou fragmentací a provede na nich rebuild, může výrazně zlepšit výkon bez zbytečného zatěžování serveru. Tento přístup umožňuje udržet databázi v optimálním stavu, aniž by došlo k nadměrnému zatížení serveru.

Příklad dynamického skriptu pro rebuild indexů vypadá takto:

powershell
$GetDatabaseParams = @{ SqlInstance = "localhost" Query = " SELECT name FROM sys.databases WHERE database_id > 4 " } $databases = Invoke-DbaQuery @GetDatabaseParams | Select-Object -ExpandProperty Name $params = @{ SqlInstance = "localhost" Query = " DECLARE @SQL NVARCHAR(MAX) SET @SQL = ( ... ) " }

Tento skript umožňuje získat seznam databází, na kterých je třeba provést analýzu fragmentace. Na základě těchto informací je pak možné spustit skript, který provede rebuild pouze těch indexů, které vykazují fragmentaci nad stanovenou hranicí.

Chcete-li minimalizovat potenciální problémy s výkonem, měli byste se soustředit na optimalizaci nejen indexů, ale i samotného návrhu databázové struktury. Dobrý návrh indexů a pravidelná údržba jsou klíčové pro udržení vysokého výkonu SQL Serveru. Regularita údržby, včetně analýzy fragmentace a vhodné volby mezi reorganizací a rebuildem, by měla být součástí každodenní správy databáze.

Jak centralizovat správu údržby v SQL Serveru?

Správa konfigurace a údržby SQL Serveru je klíčovým aspektem pro udržení optimálního výkonu a dostupnosti systému. V současnosti stále více správců databází využívá automatizační nástroje, jako je DSC (Desired State Configuration), pro správu konfigurace SQL Serveru, což zjednodušuje a urychluje správu. Tento přístup se neomezuje pouze na operační systém, ale i na samotný SQL Server, čímž se eliminuje problém s odchylkami konfigurace a zajišťuje její stálá správnost.

Modul SqlserverDsc poskytuje různé prostředky pro konfiguraci SQL Serveru, včetně bezpečnosti, výkonu a dostupnosti. S využitím těchto prostředků je možné dynamicky upravovat nastavení SQL Serveru, což výrazně zjednodušuje administrativní úkony. Například prostředek SqlMaxDop je schopný automaticky vyhodnotit a nastavit nejvhodnější hodnotu pro maximální počet paralelních operací na serveru, čímž odpadá potřeba manuálního zásahu při změně konfigurace.

Jedním z dalších velmi užitečných prostředků je SqlScriptQuery, který umožňuje definovat vlastní dotazy pro získání, testování a nastavení konfigurace. Tento přístup dává administrátorovi plnou flexibilitu, protože může přizpůsobit nastavení pro specifické potřeby, pokud není k dispozici připravený prostředek pro danou konfiguraci. Tímto způsobem lze přizpůsobit i složité konfigurace, které nelze automaticky spravovat pomocí standardních prostředků.

Při používání prostředku SqlScriptQuery je důležité, aby dotaz pro získání stavu (GetQuery) vracel výsledek v JSON formátu. To umožňuje jednoduše monitorovat stav konfigurace a podle potřeby provést změny. Pokud dotaz pro ověření (TestQuery) zjistí, že konfigurace neodpovídá požadovanému stavu, vyvolá chybu a následně se spustí dotaz pro nastavení (SetQuery), který upraví konfiguraci na požadovanou úroveň.

Správa údržby na více serverech může být složitá, pokud není zajištěna centralizovaná správa. V případě SQL Serveru se stále více doporučuje vytvářet vlastní systémy pro centralizovanou údržbu, které umožní správcům databází provádět údržbu napříč celým podnikem s minimálním zásahem. Dříve doporučované řešení s využitím SQL Server Agent Master a Target serverů, které umožňuje cílovým serverům stáhnout úkoly z centrálního serveru, má své limity, především co se týče flexibility. V současnosti je efektivnější vytvořit vlastní systém, který se snadno integruje do automatizačního procesu a umožňuje flexibilní úpravy údržby.

Pro tento přístup je ideálním řešením vytvoření centrálního systému pro správu údržby na jednom SQL Serveru, který bude hostit databázi inventáře. Tato databáze obsahuje tabulky a zobrazení definující, jaké údržbové úkoly se mají provádět na jakých serverech a kdy. Tento systém umožňuje správcům efektivně spravovat údržbu na všech serverech v organizaci, protože všechny skripty a plány údržby jsou uloženy na jednom místě. Ušetří se tak čas, který by byl jinak strávený aktualizováním skriptů na stovkách serverů.

Příkladem může být SQL Server Agent job, který je na centrálním serveru spuštěn neustále a volá skripty pro údržbu na základě definovaných časových plánů. Tímto způsobem se zjednoduší správa údržby, protože aktualizace je nutné provádět pouze na jednom serveru, a ne na každém jednotlivém serveru v podniku.

Nejdůležitější výhodou tohoto přístupu je flexibilita. I když je údržba centralizována, každý server může mít své vlastní specifické plány údržby. To je klíčové pro efektivní správu různých serverů v podnikové infrastruktuře, zejména pokud jde o časování úkolů, jako jsou zálohy, které mohou vyžadovat různé časové rámce na různých serverech.

Při použití takového systému je třeba mít na paměti, že správně nastavené plány údržby a automatizace mohou výrazně zjednodušit každodenní operace správy databází, ušetřit čas a snížit riziko chyb. Samozřejmě, správci databází musí mít pevné pochopení toho, jak systém funguje a jak efektivně využít nástroje, které mají k dispozici, aby zajistili optimální výkon a dostupnost svých SQL Serverů.