Cvičení – řízení, kdo má přístup k databázi

Dokončeno

I když se možná budete moct připojit k databázi přes síť, která neznamená, že můžete získat přístup k samotným datům. Po vrstveném přístupu chcete zajistit, aby k datům skutečně měli přístup jenom uživatelé, kteří potřebují přístup k datům. Tento přístup je místo, kde se hraje ověřování a autorizace.

Ověřování

Ověřování je proces kontroly identity. Tato identita může být uživatel, služba spuštěná v systému nebo samotný systém, například virtuální počítač. Prostřednictvím procesu ověřování se ujistěte, že osoba nebo systém je tím, za koho se tvrdí. SQL Database podporuje dva typy ověřování: ověřování SQL a ověřování Microsoft Entra.

Ověřování SQL

Metoda ověřování SQL používá uživatelské jméno a heslo. Uživatelské účty je možné vytvořit v hlavní databázi a udělit jim oprávnění ve všech databázích na serveru. Můžete také vytvářet uživatele v samotné databázi, označované jako uživatelé s omezením, a udělit jim přístup pouze k této databázi. Při vytváření logického serveru pro vaši databázi jste zadali přihlášení správce serveru pomocí uživatelského jména a hesla. Pomocí těchto přihlašovacích údajů můžete ověřit jakoukoli databázi na daném serveru jako vlastníka databáze nebo dbo.

Ověřování Microsoft Entra

Tato metoda ověřování používá identity spravované pomocí ID Microsoft Entra a podporuje se pro spravované a integrované domény. Kdykoli je to možné, použijte ověřování Microsoft Entra (integrované zabezpečení). Pomocí ověřování Microsoft Entra můžete spravovat identity uživatelů databáze a dalších služby Microsoft v jednom centrálním umístění. Centrální správa ID poskytuje jediné místo pro správu uživatelů databáze a zjednodušuje správu oprávnění. Pokud chcete použít ověřování Microsoft Entra, musíte vytvořit dalšího správce serveru s názvem Správce Microsoft Entra, který může spravovat uživatele a skupiny Microsoft Entra. Tento správce může také provádět všechny operace jako běžný správce serveru.

Autorizace

Autorizace určuje, co může identita v rámci databáze Azure SQL Database dělat. Tato autorizace se řídí oprávněními udělenými přímo k uživatelskému účtu a členství v rolích databáze. Role databáze se používá ke seskupení oprávnění, aby se usnadnila správa. Přidejte uživatele k roli, aby udělil oprávnění, která má role. Tato oprávnění můžou zahrnovat možnost přihlášení k databázi, možnost číst tabulku a možnost přidávat a odebírat sloupce z databáze. Doporučený postup je udělit uživatelům co nejmenší možná oprávnění. Proces udělení autorizace uživatelům SQL i Microsoft Entra je stejný.

V tomto příkladu je účet správce serveru, ke kterému se připojujete, členem role db_owner, která má oprávnění provádět cokoli v databázi.

Ověřování a autorizace v praxi

Doporučený postup je, aby aplikace k ověření používala vyhrazený účet. Omezíte tak počet oprávnění udělených aplikaci a snížíte riziko škodlivých aktivit v případě ohrožení kódu aplikace útoky v podobě injektáže SQL. Doporučujeme vytvořit uživatele databáze s omezením, který umožňuje, aby se vaše aplikace ověřila přímo v databázi. Další informace najdete v tématu Uživatelé databáze s omezením – zajištění přenositelnosti databáze.

Ověřování Microsoft Entra slouží k centrální správě identit uživatelů databáze a jako alternativy k ověřování SQL Serveru.

Podívejte se, jak nastavit uživatele a udělit mu přístup k databázi. V tomto případě použijete ověřování SQL pro uživatele, ale proces bude v podstatě stejný, pokud použijete ověřování Microsoft Entra.

Vytvoření uživatele databáze

Vytvořte nového uživatele, kterého můžete použít k udělení přístupu.

  1. V Cloud Shellu se na virtuálním počítači appServer znovu připojte k databázi jako váš ADMINUSER.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    
  2. Spuštěním příkazu níže vytvořte nového uživatele. Tento uživatel je uživatel s omezením , který povoluje přístup pouze k databázi marketplace . Podle potřeby upravte heslo, ale nezapomeňte si ho poznamenat, protože ho potřebujete pro další krok.

    CREATE USER ApplicationUser WITH PASSWORD = 'YourStrongPassword1';
    GO
    

S těmito přihlašovacími údaji se uživatel může ověřit v databázi, ale nemá oprávnění k přístupu k žádným datům. Udělte tomuto uživateli přístup.

Udělení oprávnění uživateli

Nastavte uživatele jako člena db_datareader a db_datawriter role a udělte mu přístup ke čtení a zápisu do databáze. Chcete také zabránit tomuto uživateli v přístupu k tabulce s adresami.

  1. I když jste stále připojení k sqlcmdserveru appServer, spuštěním následujícího příkazu T-SQL udělte db_datareader uživateli, který jste vytvořili, role a db_datawriter role.

    ALTER ROLE db_datareader ADD MEMBER ApplicationUser;
    ALTER ROLE db_datawriter ADD MEMBER ApplicationUser;
    GO
    
  2. Rozsah přístupu můžete dále zúžit. Pomocí operátoru DENY můžete uživateli odepřít přístup k jiným prvkům v databázi. Spuštěním následujícího příkazu T-SQL odepřete uživateli ApplicationUser možnost vybírat data z tabulky SalesLT.Address.

    DENY SELECT ON SalesLT.Address TO ApplicationUser;
    GO
    

Teď se přihlaste jako tento uživatel a podívejte se na tuto konfiguraci v akci.

  1. I když stále na příkazovém řádku T-SQL, zadáním ukončete exit relaci.

  2. Teď se znovu přihlaste k databázi, ale jako uživatel, který jste vytvořili.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U 'ApplicationUser' -P '[password]' -N -l 30
    
  3. Spusťte následující dotaz. Tento dotaz načítá data z tabulky, ke které má uživatel oprávnění k přístupu.

    SELECT FirstName, LastName, EmailAddress, Phone FROM SalesLT.Customer;
    GO
    

    Měl by se zobrazit seznam zákazníků.

    FirstName      LastName       EmailAddress                    Phone
    -------------- -------------- ------------------------------- ------------
    Orlando        Gee            orlando0@adventure-works.com    245-555-0173
    Keith          Harris         keith0@adventure-works.com      170-555-0127
    Donna          Carreras       donna0@adventure-works.com      279-555-0130
    Janet          Gates          janet1@adventure-works.com      710-555-0173
    ...
    
  4. Podívejte se, co se stane, když se pokusíte dotazovat na tabulku, ke které nemáte přístup.

    SELECT * FROM SalesLT.Address;
    GO
    

    Měla by se zobrazit zpráva s informací, že k této tabulce nemáte přístup.

    Msg 229, Level 14, State 5, Server server-22942, Line 1
    The SELECT permission was denied on the object 'Address', database 'marketplace', schema 'SalesLT'.
    

Jak vidíte tady, i když jste databázi udělili přístup pro čtení a zápis, můžete dále zabezpečit přístup k datům tím, že explicitně odepřete přístup k tabulkám. Pokud máte více uživatelů se stejným přístupem, můžete vytvořit vlastní role s vhodnými oprávněními a zjednodušit si tak správu.

Je důležité databázi správně zabezpečit a udělovat přístup jen tam, kde je to nutné. Azure SQL Database vám dává možnost plné kontroly nad ověřováním a autorizací identit za účelem přístupu k datům ve vaší databázi.