Zabezpečení serveru závisí hlavně na tom, jak správně můžete nakonfigurovat přístupová oprávnění k objektům. Poskytnutí nadměrných oprávnění uživateli může způsobit mnoho problémů. Ne, uživatel nebude používat vaše chyby. Místo toho to udělá jakýkoli hacker nebo já. V tomto případě můžete zapomenout na své tabulky s daty nebo celou databázi.
Z nějakého důvodu je zabezpečení databáze ochranou zvenčí, jako je například hacker. To se však stává velmi zřídka. Jsem programátor ve velké firmě a administrátora ani nenapadne chránit serverové porty, kde je vše otevřené. Na jediném serveru je spousta databází, programů a dokonce i FTP server a za posledních 5 let nebyl nikdy napaden. Naštěstí jsem přesvědčil správce, aby nasadil WEB server na samostatný hardware. V opačném případě, pokud by někdo znal IP adresu našeho hlavního serveru, mohl by jej hacknout každý lenoch. Databáze ani Windows nebyly již několik let opraveny.
Interní problémy však vznikají každý den kvůli nesprávné bezpečnostní politice. Všichni uživatelé se přihlásí s administrátorskými právy a mohou vytvářet, co chtějí. To je skutečný problém, protože nadměrná oprávnění umožňují lenochům ukázat svou úplnou negramotnost. Proto budeme zvažovat zabezpečení bez ohledu na to, odkud hrozba pochází – od hackera nebo od uživatele.
V tomto článku se budeme zabývat všemi nezbytnými základy bezpečnostní ochrany před hackery i uživateli. Jako příklad jsem zvolil MS SQL Server, protože obsahuje vše dostupné v jiných databázích (Oracle, MySQL atd.) a má další možnosti správy zabezpečení. Někdo by si mohl myslet, že to dělá MS strmější. Někdy však mohou být dodatečné funkce přehnané a způsobovat problémy.
Role serveru
Ve Windows a dalších operačních systémech existují skupiny a uživatelé pro správu oprávnění. Můžeme sdružovat uživatele do skupiny a udělovat práva všem najednou, což je mnohem jednodušší, než přidělovat práva každému uživateli zvlášť. Pro tyto účely v databázích existuje pojem „role“.
Předpokládejme, že 100 uživatelů má mít oprávnění číst data z konkrétní tabulky. Poskytnout každému uživateli toto oprávnění je otrava. Je mnohem jednodušší vytvořit roli, která má povoleno číst, a pak do ní přidat všechny požadované uživatele. Výsledek je podobný seskupování.
SQL Server má dva typy rolí:server a databáze. Role serveru jsou předdefinované a nelze je změnit.
Otevřete větev Role Security/Server v Enterprise Manager, aby se v pravé části okna zobrazil seznam dostupných rolí. Popis definuje, co může uživatel dělat s odpovídající rolí.
Role serveru v MS SQL Server a okno správce rolí
Chcete-li do role přidat existujícího uživatele, poklepejte na řádek role. V okně, které se zobrazí, můžete přidat uživatele do role nebo je odstranit. Karta Oprávnění podrobně popisuje, co může každý uživatel dělat.
Uživatelé
Chcete-li spravovat uživatele, otevřete v Enterprise Manager větev Security/Logins. V pravé části uvidíte seznam všech uživatelů serveru. Ve výchozím nastavení je přístup udělen administrátorům domény a vestavěným přihlašovacím účtům, jako je sa.
Chcete-li přidat nového uživatele, klepněte pravým tlačítkem myši kamkoli do prázdné pravé části okna a v zobrazené nabídce vyberte možnost Nové přihlášení. Zcela nahoře v okně vyberte uživatelské jméno. Pokud potřebujete vybrat existující doménu nebo uživatele počítače, klikněte na tlačítko (…) napravo od vstupního pole a v doméně se zobrazí pole pro vyhledávání uživatele.
Přidání nového uživatele
Níže můžete vybrat typ ověřování – Windows nebo SQL Server. Pokud zvolíte Windows, nemusíte zadávat heslo, protože jej server načte ze systému. Můžete však přepnout buď Udělit přístup (povolit přístup) nebo Odepřít přístup (zakázat). V druhém případě bude uživatel registrován v databázi, ale nebude se moci připojit – to je zakázáno.
Pokud zvolíte ověřování SQL Server, budete muset nastavit heslo, protože v tomto případě bude uloženo v systémových tabulkách databázového serveru. Vezměte prosím na vědomí, že i když je v nastavení serveru specifikováno pouze ověřování Windows, můžete vytvářet záznamy SQL serveru, ale s těmito záznamy se nebudete moci přihlásit do systému.
Na kartě Role serveru můžete určit, jaká role serveru bude uživateli přidělena. Proto i ve fázi vytváření můžete přidat uživatele do potřebných rolí.
Uživatelský přístup k databázím
Na kartě Přístup k databázi zadejte databáze, se kterými může uživatel pracovat. Zde je okno rozděleno na dvě části:v horní polovině lze vybrat databázi, do které je povolen přístup, a ve spodním seznamu vybrat databázovou roli. Tato role v databázi bude definovat uživatelská oprávnění. Jednomu uživateli lze přidělit několik rolí.
Vytvořte účet qq, který bude mít přístup k databázi Northwind. Toto je standardní testovací databáze vytvořená při nasazení serveru.
Uložte změny.
Nyní otevřete větev Databáze/Northwind/Uživatelé a podívejte se na seznam uživatelů, kteří mají povolen přístup k vybrané databázi. Upozorňujeme, že zde existuje účet qq. V jiných databázích není žádný účet, protože přístup k nim pro našeho nového uživatele je zakázán.
Role v databázi
Každá databáze může mít své vlastní role, které definují přístupová oprávnění k objektům. Mnoho správců se s těmito oprávněními nerado obtěžuje. Instalují tedy vestavěný výchozí veřejný, který povoluje téměř vše. Pokud chybí oprávnění pro veřejnou roli, jednoduše přidejte uživatele do role serveru správce systému. V tomto případě se databáze stane zranitelnou.
Každý uživatel by měl mít svá vlastní a nezbytná oprávnění. Co není dovoleno, musí být zakázáno. Role, které již na serveru existují, se nesmí používat, protože jejich oprávnění jsou otevřená všem. Doporučuje se je dokonce všechny smazat, zvláště ten veřejný.
Vytvoření role
Chcete-li vytvořit novou databázovou roli, klepněte pravým tlačítkem na větev Databáze/Název databáze/Role. V nabídce, která se zobrazí, vyberte Nová databázová role. Otevře se okno Vlastnosti databázové role – Nová role. V horní části okna zadejte název role.
Chceme například vytvořit roli pro účetní. Chcete-li to provést, zadejte Buh do pole Název.
Vytvoření databázové role
Níže vyberte typ role, například standardní výchozí. Uprostřed okna je seznam uživatelů, kteří budou přidáni do role. Zatím je seznam prázdný. Pokud však klikneme na Přidat, přidáme uživatele například do dříve vytvořeného účtu qq. Ve fázi vytváření role se nic jiného dělat nedá. Uložte změny kliknutím na OK.
Přístupová oprávnění
Nyní se podíváme, jak můžeme nastavit oprávnění. Poklepáním na vytvořenou roli Buh otevřete okno pro úpravy. Vezměte prosím na vědomí, že tlačítko Povolení je nyní k dispozici. Teprve když je role zaregistrována v databázi, můžeme změnit její práva. Klepnutím na toto tlačítko otevřete okno Vlastnosti role databáze.
Nastavení přístupových oprávnění pro role
V horní části okna je seznam databázových rolí, takže mezi nimi můžete rychle přepínat. Nyní je vybrána role Buh. Uprostřed okna je velká mřížka s následujícími sloupci:
- Objekt – názvy objektů;
- Vlastník – vlastník objektu;
- SELECT – oprávnění prohlížet data nebo provádět příkaz SELECT. Je k dispozici pouze pro tabulky a pohledy;
- INSERT – oprávnění přidat data nebo provést příkaz INSERT. Je k dispozici pouze pro tabulky a pohledy;
- UPDATE – oprávnění upravovat data nebo provádět příkaz UPDATE. Je k dispozici pouze pro tabulky a pohledy;
- Povolení DELETE smazat data nebo provést příkaz DELETE. Je k dispozici pouze pro tabulky a pohledy;
- EXEC – oprávnění ke spouštění uložených procedur a funkcí. Je k dispozici pouze pro uložené procedury a funkce;
- DRI (deklarativní referenční integrita). Je k dispozici pouze pro tabulky, pohledy a funkce.
Pro novou roli nejsou žádná oprávnění. Chcete-li zobrazit tabulku, například Kategorie, zaškrtněte políčko na průsečíku řádku Kategorie a sloupce VYBRAT. V rámečku uvidíte zelené zaškrtnutí, které znamená povolení. Druhé kliknutí změní zaškrtnutí na značku červeného křížku a znamená zákaz. To může být nezbytné, pokud uživateli udělíte oprávnění a přidáte ho do jiné role, kde je povolen přístup k vybrané akci. Třetí kliknutí odebere veškerá oprávnění k akci a ponechá pole prázdné. To znamená, že není přístup; lze jej však delegovat, pokud je uživatel přidán do jiné role s oprávněními k objektu nebo jsou oprávnění výslovně specifikována.
Pokud vyberete řádek s objektem tabulky nebo pohledu, zpřístupní se tlačítko Sloupce ve spodní části okna. Předpokládejme, že jste vybrali tabulku a klikli na toto tlačítko. Otevře se okno, ve kterém můžete nastavit oprávnění pro jednotlivé sloupce tabulky.
Nastavení oprávnění sloupců
To je skutečně skvělá možnost, protože některé sloupce odpovědné za integritu databáze nesmí měnit uživatelé ani hackeři. Je lepší zakázat operace UPDATE nebo SELECT (pokud je to možné) pro tyto sloupce.
Individualismus
Role je vhodné použít, když je potřeba kombinovat podobné uživatele. Mnoho účetních například potřebuje získat přístup k finančním tabulkám. Udělení oprávnění každému účetnímu je časově náročné. Je mnohem jednodušší vytvořit roli pro účetního, udělit jí oprávnění a poté do této role přidat všechny účetní účty.
Existují však případy, kdy by oprávnění měla být pro uživatele jedinečná, nebo je nutné kromě oprávnění udělených rolí udělit další oprávnění. Například jeden z účetních potřebuje mít přístup k tabulkám personálního oddělení. V tomto případě je lepší přidat oprávnění přímo účetnímu, než vytvářet novou roli.
Nejprve jsme prozkoumali role, abychom si na ně zvykli. Ve většině případů existuje samostatný účet pro účetní, samostatný účet pro ekonomy atd. V tomto případě se většina lidí připojuje k serveru pomocí jednoho účtu. Tedy kontrolovat, kdo co dělá, je nemožné. V případě potřeby je lepší používat individuální oprávnění, přičemž každý uživatel musí mít svůj vlastní účet.
Oprávnění k tabulkám
Podívejme se, jak můžeme udělit oprávnění konkrétním objektům, například tabulkám.
Ve stromu objektů vyberte větev Databáze/Northwind/Tabulky. V pravé části se otevře seznam všech tabulek. Klikněte pravým tlačítkem na libovolnou tabulku a vyberte Všechny úkoly/Spravovat oprávnění. Otevře se okno Vlastnosti oprávnění, které je podobné oknu Vlastnosti role databáze se seznamem uživatelů namísto seznamu objektů. Objekt je tabulka, na kterou jsme klikli, a její název bude uveden v rozevírací nabídce okna. Nyní musíme nastavit oprávnění k tomuto objektu pro různé uživatele.
Nastavení oprávnění u tabulky
Seznam oprávnění je následující:zobrazení, aktualizace, přidání, odstranění, spuštění a správa. Pokud kliknete na tlačítko Sloupce, otevře se okno pro nastavení oprávnění k objektu na úrovni polí tabulky pro konkrétního uživatele.
Zobrazení
Máme dva stoly. Jedna z nich uchovává seznam zaměstnanců, zatímco další tabulka obsahuje informace o počtu odpracovaných hodin za měsíc a přijatých mzdách (oficiální a skryté mzdy).
Předpokládejme, že za vámi přijde daňový úředník a požádá vás, abyste ukázali mzdy pracovníků. Navíc se ptají, zda jste zaplatili všechny daně. Jaké akce musíte na své straně provést?
První návrh vzešel ze třetí řady – vytvořit nového uživatele, který smí číst tabulky včetně seznamu zaměstnanců a mezd. Kromě toho byste neměli zapomenout uzavřít sloupec se skrytou mzdou. Ve skutečnosti je řešení správné, ale absolutně neúčinné.
Nejlepší možností je vytvořit pohled, SQL dotaz, který vybírá data. V databázi to vypadá jako tabulka. Data SQL můžete vybrat pomocí dotazů a udělit oprávnění. Ukázalo se, že dotaz bude proveden proti dotazu.
Chcete-li vytvořit zobrazení, spusťte následující dotaz:
CREATE VIEW salary AS SELECT fields for a tax official FROM Employees, Wages WHERE joins
Nyní je ve větvi Databases/Northwind/Views nový objekt Mzdy. Pokud na něj kliknete pravým tlačítkem a vyberete Všechny úkoly/Spravovat oprávnění, otevře se okno pro udělení oprávnění. Nastavte povolení pro finančního úředníka a uložte jej. Chcete-li zkontrolovat obsah zobrazení, spusťte dotaz:
SELECT * FROM salary
Jak vidíte, je zde přístup jako k jednoduché tabulce. Daňový úředník si také bude myslet, že vidí skutečná data. Ve skutečnosti však tento dotaz bude obsahovat pouze data, která potřebujeme.
V reálném životě nelze daňového úředníka tak snadno oklamat, protože to nejsou hlupáci. Tento příklad však ukazuje, že pohled může být dokonalou bezpečnostní metodou. Můžeme zobrazit data, která uživatelé potřebují, a nic jiného. Zároveň máme všechny nástroje pro správu oprávnění k pohledu bez ovlivnění přístupových oprávnění v tabulkách.
Různé pohledy na stejné tabulky tedy mohou zobrazovat různá data. Pokud chcete zobrazit další sloupec, přidejte zobrazení do dotazu. V tomto případě není potřeba měnit oprávnění.
Zobrazení systému
V každé databázi mohou být systémové pohledy vytvořené serverem automaticky. Nedoporučuji jim udělovat oprávnění, protože mohou zobrazovat některé další informace, které mohou hackerovi pomoci nastavit oprávnění nebo jednoduše zničit data. Systémové pohledy začínají předponou sys a systém je specifikován ve sloupci Typ seznamu.
Postupy a funkce
Moderní databázové servery podporují uložené procedury a funkce. Toto je kód PL/SQL nebo Transact-SQL v závislosti na databázi, která se spouští na databázovém serveru. Pomocí těchto postupů můžeme provádět libovolné operace na serveru nebo jednoduše vybírat data, jako v pohledu. U každé procedury můžeme nastavit oprávnění.
Při kontrole rolí jsme již viděli procedury v seznamu objektů, kterým můžete nastavit oprávnění, a v těchto řádcích je k dispozici pouze sloupec EXEC, protože procedury lze pouze spouštět.
Uložené procedury a funkce jsou uloženy v konkrétní databázi. Chcete-li zobrazit procedury databáze Northwind, vyberte větev Databáze/Northwind/Uložené procedury. Existuje mnoho systémových procedur, jejichž názvy začínají prefixem dt_ a System je specifikován ve sloupci Typ. Pokud je to možné, doporučuje se neudělit přístup k těmto postupům. Funkce můžete vidět ve větvi Databáze/Northwind/Uživatelsky definované funkce.
Chcete-li změnit oprávnění k procedurám a funkcím, klikněte pravým tlačítkem na jejich název a v nabídce vyberte Všechny úlohy/Spravovat oprávnění. V okně, které se objeví, můžete změnit pouze sloupec EXEC pro procedury a sloupce EXEC a DRI pro funkce.
Zásady oprávnění
Někteří správci nastavují oprávnění na základě existující role, například veřejné. To není pravda, protože v této roli mohou existovat oprávnění, která uživatelé nepotřebují. Zkuste tedy nastavit zcela nové oprávnění.
Pokud jde o mě, vždy vytvořím novou roli a udělím minimální sadu oprávnění. Pokud uživatelé požádají o další oprávnění a jsou skutečně nezbytná, přidám další oprávnění. Pokud ve výchozím nastavení povolíte vše, neexistuje žádná záruka, že v budoucnu budou nepotřebná a nebezpečná práva smazána.
Dalším problémem nastavení méně oprávnění je zvyk. Uživatelé si mohou zvyknout na to, že jim je uděleno mnoho oprávnění a zákaz pak způsobí vážný skandál. Nikdo nemá rád, když jsou porušována jeho práva.
Tabulky/databáze
Databáze ukládají svá nastavení a skryté vlastnosti do systémových tabulek a databází. Neliší se od ostatních databázových objektů a lze k nim nastavit oprávnění. V žádném případě nepovolujte uživatelům přístup k těmto tabulkám bez zvláštní potřeby.
V SQL Server jsou důležitá systémová data uložena v hlavní databázi a databázi msdb. Tyto databáze tedy musí být chráněny. V Oracle existuje každá databáze jako samostatný objekt a systémové tabulky jsou uloženy společně s tabulkami uživatelů.
Téměř všechny databázové servery nabízejí instalaci testovacích databází, které lze použít pro učení nebo testování systému. Pokud je máte, smažte – protože k těmto databázím je nastaven veřejný přístup. Pokud hacker zná jména nebo vlastnosti jakéhokoli existujícího objektu v systému, značně mu to zjednoduší úlohu.
Při připojování k testovací databázi můžete na serveru provádět některé příkazy a poškodit OS nebo fungující databázi. V systému by neměly být žádné další věci. Navíc takové tabulky/databáze mají poměrně vysoká oprávnění i pro hosta.
Shrnutí
Navzdory skutečnosti, že jsme jako příklad použili MS SQL Server, koncepty oprávnění, rolí a autentizace existují ve všech databázích.
Když znáte všechna pravidla, která jsme zvažovali, jediné, co potřebujete, je prozkoumat zvláštnosti jejich použití ve vaší databázi.