Sdílet prostřednictvím


Začínáme s oprávněními databázového stroje

Platí na:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytický platformový systém (PDW)SQL databáze v Microsoft Fabric

Tento článek popisuje některé základní koncepty zabezpečení a pak popisuje typickou implementaci oprávnění. Oprávnění v databázovém stroji se spravují na úrovni serveru prostřednictvím přihlašovacích údajů a rolí serveru a na úrovni databáze prostřednictvím databázových uživatelů a databázových rolí.

Sql Database a databáze SQL v Microsoft Fabric poskytují stejné možnosti v rámci každé databáze, ale oprávnění na úrovni serveru nejsou k dispozici.

Note

Microsoft Entra ID se dříve označovala jako Azure Active Directory (Azure AD).

Subjekty zabezpečení

Bezpečnostní principál je identita, kterou SQL Server používá, a které mohou být přidělena oprávnění k provádění akcí. Objekty zabezpečení jsou obvykle lidé nebo skupiny lidí, ale můžou to být jiné entity, které předstírají, že jsou lidmi. Objekty zabezpečení je možné vytvářet a spravovat pomocí Transact-SQL příkladů uvedených v tomto článku nebo pomocí aplikace SQL Server Management Studio.

Logins

Přihlášení jsou jednotlivé uživatelské účty pro přihlášení k databázovému stroji SQL Serveru. SQL Server a SQL Database podporují přihlášení založená na ověřování systému Windows a přihlášení na základě ověřování SQL Serveru. Informace o dvou typech přihlášení najdete v tématu Volba režimu ověřování.

Pevné role serveru

Pevné role serveru jsou v SQL Serveru sadou předkonfigurovaných rolí, které poskytují pohodlnou skupinu oprávnění na úrovni serveru. Pomocí příkazu ALTER SERVER ROLE ... ADD MEMBER je možné do rolí přidat přihlášení. Další informace naleznete v tématu ALTER SERVER ROLE. SQL Database nepodporuje pevné role serveru, ale má v master databázi (dbmanager a loginmanager) dvě role, které fungují jako role serveru.

Role serveru definované uživatelem

Na SQL Serveru můžete vytvořit vlastní role serveru a přiřadit jim oprávnění na úrovni serveru. Přihlášení je možné přidat do rolí serveru pomocí příkazu ALTER SERVER ROLE ... ADD MEMBER . Další informace naleznete v tématu ALTER SERVER ROLE. SQL Database nepodporuje role serveru definované uživatelem.

Uživatelé databáze

Pokud chcete udělit přístup pro přihlášení k databázi, vytvoříte v této databázi uživatele databáze a namapujete uživatele databáze na přihlášení. Uživatelské jméno databáze je obvykle stejné jako přihlašovací jméno podle konvence, i když nemusí být stejné. Každý uživatel databáze odpovídá jednomu přihlášení. Přihlášení lze mapovat pouze na jednoho uživatele v databázi, ale může být namapován jako uživatel databáze v několika různých databázích.

Uživatele databáze je také možné vytvořit, kteří nemají odpovídající přihlášení. Tito uživatelé se nazývají uživatelé databáze s omezením. Společnost Microsoft doporučuje používat uživatele databáze s omezením, protože usnadňuje přesun databáze na jiný server. Podobně jako přihlášení může uživatel databáze s omezením použít ověřování systému Windows nebo ověřování SQL Serveru. Další informace naleznete v tématu Nastavení přenositelnosti databáze pomocí obsažené databáze.

Existuje 12 typů uživatelů s mírnými rozdíly v tom, jak se ověřují a kdo představují. Seznam uživatelů zobrazíte v tématu VYTVOŘENÍ UŽIVATELE.

Pevné databázové role

Pevné databázové role jsou sada předkonfigurovaných rolí, které poskytují pohodlnou skupinu oprávnění na úrovni databáze. Uživatele databáze a uživatelem definované databázové role je možné přidat do pevných databázových rolí pomocí příkazu ALTER ROLE ... ADD MEMBER . Další informace naleznete v tématu ALTER ROLE.

Uživatelsky definované databázové role

Uživatelé s CREATE ROLE oprávněním mohou vytvářet nové uživatelem definované databázové role , které představují skupiny uživatelů s běžnými oprávněními. Obvykle jsou oprávnění udělena nebo odepřena pro celou roli, což zjednodušuje správu a monitorování oprávnění. Uživatele databáze je možné přidat do databázových rolí pomocí příkazu ALTER ROLE ... ADD MEMBER . Další informace naleznete v tématu ALTER ROLE.

Další účastníci

Mezi další objekty zabezpečení, které zde nejsou popsány, patří aplikační role a přihlášení a uživatelé na základě certifikátů nebo asymetrických klíčů.

Obrázek znázorňující vztahy mezi uživateli Systému Windows, skupinami Windows, přihlašovacími údaji a uživateli databáze najdete v tématu Vytvoření uživatele databáze.

Typický scénář

Následující příklad představuje běžnou a doporučenou metodu konfigurace oprávnění.

Ve službě Windows Active Directory nebo Microsoft Entra ID

  1. Vytvořte uživatele pro každou osobu.
  2. Vytvořte skupiny Windows, které představují pracovní jednotky a pracovní funkce.
  3. Přidejte uživatele Windows do skupin Windows.

Pokud se uživatel připojí k mnoha databázím

  1. Vytvořte přihlášení pro skupiny Windows. (Pokud používáte ověřování SQL Serveru, přeskočte kroky služby Active Directory a tady vytvořte přihlášení k ověřování SQL Serveru.)

  2. V uživatelské databázi vytvořte uživatele databáze pro přihlášení představující skupiny Windows.

  3. V uživatelské databázi vytvořte jednu nebo více uživatelsky definovaných databázových rolí, z nichž každá představuje podobnou funkci. Můžete mít například roli finančního analytika a roli obchodního analytika.

  4. Přidejte uživatele databáze do jedné nebo více uživatelsky definovaných databázových rolí.

  5. Udělte oprávnění k uživatelsky definovaným databázovým rolím.

Pokud se uživatel připojí jenom k jedné databázi

  1. V uživatelské databázi vytvořte uživatele databáze s omezením pro skupinu Windows. (Pokud používáte ověřování SQL Serveru, přeskočte kroky služby Active Directory a tady vytvořte ověřování uživatele databáze SQL Server s omezením.)

  2. V uživatelské databázi vytvořte jednu nebo více uživatelsky definovaných databázových rolí, z nichž každá představuje podobnou funkci. Můžete mít například roli finančního analytika a roli obchodního analytika.

  3. Přidejte uživatele databáze do jedné nebo více uživatelsky definovaných databázových rolí.

  4. Udělte oprávnění k uživatelsky definovaným databázovým rolím.

Typickým výsledkem v tomto okamžiku je, že uživatel Windows je členem skupiny Windows. Skupina Windows má přihlášení k SQL Serveru nebo SQL Database. Přihlašování je namapováno na identitu uživatele v databázi uživatelů. Uživatel je členem databázové role. Teď potřebujete k roli přidat oprávnění.

Přiřadit oprávnění

Většina příkazů oprávnění má následující formát:

<authorization> <permission> ON <securable>::<name> TO <principal>;
  • <authorization> musí být GRANT, REVOKEnebo DENY.

  • <permission> stanoví akci, kterou povolíte nebo zakážete. Přesný počet oprávnění se liší mezi SQL Serverem a Službou Azure SQL Database. Informace o oprávněních najdete v tématu Oprávnění (databázový stroj) a viz graf dále v tomto článku.

  • ON <securable>::<name> je typ zabezpečitelného (server, serverový objekt, databáze nebo databázový objekt) a jeho název. Některá oprávnění nevyžadují <securable>::<name>, protože jsou v kontextu jednoznačná nebo nevhodná. CREATE TABLE Například oprávnění nevyžaduje klauzuli <securable>::<name> (GRANT CREATE TABLE TO Mary;umožňuje Mary vytvářet tabulky).

  • <principal> je objekt zabezpečení (přihlášení, uživatel nebo role), který obdrží nebo ztratí oprávnění. Pokud možno, udělte oprávnění příslušným rolím.

Následující příklad příkazu uděluje UPDATE oprávnění v Parts tabulce nebo zobrazení obsažené ve schématu Production k roli s názvem PartsTeam:

GRANT UPDATE ON OBJECT::Production.Parts TO PartsTeam;

Následující příklad příkazu uděluje UPDATE oprávnění ke schématu Production a následně k libovolné tabulce nebo zobrazení obsažené v tomto schématu roli s názvem ProductionTeam, což je efektivnější a škálovatelnější přístup k přiřazování oprávnění než na úrovni jednotlivých objektů.

GRANT UPDATE ON SCHEMA::Production TO ProductionTeam;

Oprávnění jsou udělena objektům zabezpečení (přihlášení, uživatelům a rolím) pomocí příkazu GRANT . Oprávnění jsou explicitně odepřena pomocí DENY příkazu. Pomocí příkazu REVOKE se dříve udělené nebo odepřené oprávnění odebere. Oprávnění jsou kumulativní, přičemž uživatel obdrží všechna oprávnění udělená uživateli, přihlášení a libovolným členstvím ve skupinách; jakékoli odepření oprávnění však přepíše všechna udělení.

Caution

Běžnou chybou je pokus o odstranění GRANT pomocí DENY namísto REVOKE. To může způsobit problémy, když uživatel obdrží oprávnění z více zdrojů, což může být běžný scénář. Následující příklad ukazuje princip.

Skupina Sales přijímá SELECT oprávnění k OrderStatus tabulce prostřednictvím příkazu GRANT SELECT ON OBJECT::OrderStatus TO Sales;. Uživatel Jae je členem Sales role. Jae také obdržel k SELECT tabulce oprávnění pod vlastním uživatelským jménem na základě příkazu OrderStatus. Předpokládá se, že správce chce odebrat GRANT z role Sales.

  • Pokud správce správně spustí REVOKE SELECT ON OBJECT::OrderStatus TO Sales;, Jae si zachová SELECT přístup k OrderStatus tabulce prostřednictvím jeho individuálního GRANT příkazu.

  • Pokud správce nesprávně spustí DENY SELECT ON OBJECT::OrderStatus TO Sales;, pak Jae, jako člen role Sales, je odepřeno oprávnění SELECT, protože oprávnění DENY k Sales přepisuje jejich individuální GRANT.

Note

Oprávnění je možné nakonfigurovat pomocí sady Management Studio. Vyhledejte zabezpečitelné v Průzkumníku objektů, klikněte pravým tlačítkem myši na zabezpečitelný a pak vyberte Vlastnosti. Vyberte stránku Oprávnění . Nápovědu k používání stránky oprávnění najdete v tématu Oprávnění nebo Stránka zabezpečitelných objektů.

Hierarchie oprávnění

Oprávnění mají nadřazenou a podřízenou hierarchii. To znamená, že pokud udělíte SELECT oprávnění k databázi, toto oprávnění zahrnuje SELECT oprávnění pro všechna (podřízená) schémata v databázi. Pokud udělíte SELECT oprávnění ve schématu, zahrnuje SELECT oprávnění ke všem (podřízeným) tabulkám a zobrazením v rámci schématu. Oprávnění jsou tranzitivní: pokud udělíte SELECT oprávnění k databázi, zahrnuje to oprávnění pro všechna podřízená schémata a všechny tabulky a zobrazení v nižších úrovních.

Oprávnění mají také nadřazená oprávnění. Oprávnění CONTROL k objektu obvykle poskytuje všechna ostatní oprávnění k objektu.

Vzhledem k tomu, že nadřazená nebo podřízená hierarchie i krytá hierarchie můžou pracovat se stejnými oprávněními, může být systém oprávnění komplikovaný. Vezmeme si například tabulku (Region), která je ve schématu (Customers) v databázi (SalesDB).

  • CONTROLOprávnění k tabulce zahrnuje všechna ostatní oprávnění v tabulce RegionRegion , včetně ALTERSELECTINSERT, , UPDATE, DELETEa některá další oprávnění.

  • SELECT ve schématu Customers , které vlastní Region tabulku, obsahuje SELECT oprávnění k Region tabulce.

Oprávnění k tabulce SELECT lze dosáhnout některým z těchto šesti příkazů:

GRANT SELECT ON OBJECT::Region TO Jae;

GRANT CONTROL ON OBJECT::Region TO Jae;

GRANT SELECT ON SCHEMA::Customers TO Jae;

GRANT CONTROL ON SCHEMA::Customers TO Jae;

GRANT SELECT ON DATABASE::SalesDB TO Jae;

GRANT CONTROL ON DATABASE::SalesDB TO Jae;

Udělení nejmenšího oprávnění

První oprávnění uvedená dříve (GRANT SELECT ON OBJECT::Region TO Jae;) jsou nejpodrobnější. Toto tvrzení je nejmenším možným oprávněním, které uděluje SELECT. S tím nejsou poskytována žádná oprávnění pro podřízené objekty. Je dobrým principem vždy udělit nejnižší možné oprávnění, ale měli byste zvážit udělení na vyšších úrovních, aby se zjednodušil systém udělování.

Takže pokud Jae potřebuje oprávnění k celému schématu, udělte SELECT jednou na úrovni schématu místo toho, abyste udělovali SELECT opakovaně na úrovni tabulky nebo zobrazení. Návrh databáze může výrazně ovlivnit, jak úspěšná může být tato strategie. Tato strategie funguje nejlépe, když je vaše databáze navržená tak, aby objekty, které potřebují stejná oprávnění, byly zahrnuty do jednoho schématu.

Tip

Při návrhu databáze a jejích objektů naplánujte od začátku, jak aplikace a uživatelé přistupují k těmto objektům. Tyto informace slouží k řízení přístupu k tabulkám, zobrazením, funkcím a uloženým procedurám pomocí schémat. Schémata umožňují snadněji seskupovat typy přístupu.

Diagram oprávnění

Následující obrázek znázorňuje oprávnění a jejich vztahy mezi sebou. Některá oprávnění vyšší úrovně (například CONTROL SERVER) jsou uvedená mnohokrát. V tomto článku je plakát příliš malý na přečtení. Plakát oprávnění databázového stroje v plné velikosti si můžete stáhnout ve formátu PDF .

Snímek obrazovky s oprávněními databázového stroje PDF

Pro zobrazení vztahů mezi hlavními objekty databázového stroje, serveru a databázovými objekty se podívejte na Hierarchie oprávnění (databázový stroj).

Oprávnění versus pevné role serveru a pevné databáze

Oprávnění pevných rolí serveru a pevných databázových rolí jsou podobná, ale ne úplně stejná jako podrobná oprávnění. Například členové pevné role serveru sysadmin mají všechna oprávnění k instanci SQL Serveru, stejně jako přihlášení s oprávněním CONTROL SERVER .

Udělení CONTROL SERVER oprávnění však neuděluje přihlášení členovi pevné role serveru sysadmin a přidání přihlášení k pevné roli serveru sysadmin neuděluje CONTROL SERVER oprávnění explicitně. Uložená procedura někdy kontroluje oprávnění kontrolou pevné role a nekontroluje podrobné oprávnění.

Například odpojení databáze vyžaduje členství v db_owner pevné databázové roli. Ekvivalentní CONTROL DATABASE oprávnění nestačí. Tyto dva systémy pracují paralelně, ale zřídka vzájemně spolupracují. Společnost Microsoft doporučuje používat novější, podrobný systém oprávnění místo pevných rolí, kdykoli je to možné.

Monitorování oprávnění

Následující zobrazení vrací informace o zabezpečení. Všechna zobrazení související se zabezpečením naleznete v tématu Zobrazení katalogu zabezpečení (Transact-SQL).

View Description
sys.server_principals 1 Přihlášení a role serveru definované uživatelem na serveru
sys.database_principals Uživatelé a uživatelem definované role v databázi
sys.server_permissions 1 Oprávnění udělená pro uživatelská přihlášení a pevné role serveru definované uživatelem
sys.database_permissions Oprávnění udělená uživatelům a uživatelsky definovaným pevným databázovým rolím
sys.database_role_members Členství v databázové roli
sys.server_role_members 1 Členství v roli serveru

1 Toto zobrazení není ve službě SQL Database k dispozici.

Examples

Následující příkazy vracejí užitečné informace o oprávněních.

A. Seznam oprávnění databáze pro každého uživatele

Pokud chcete vrátit explicitní oprávnění udělená nebo odepřená v databázi (SQL Server a SQL Database), spusťte v databázi následující příkaz Transact-SQL.

SELECT perms.state_desc AS State,
       permission_name AS [Permission],
       obj.name AS [on Object],
       dp.name AS [to User Name]
FROM sys.database_permissions AS perms
     INNER JOIN sys.database_principals AS dp
         ON perms.grantee_principal_id = dp.principal_id
     INNER JOIN sys.objects AS obj
         ON perms.major_id = obj.object_id;

B. Seznam členů role serveru

Pokud chcete vrátit členy rolí serveru (pouze SQL Server), spusťte následující příkaz.

SELECT roles.principal_id AS RolePrincipalID,
       roles.name AS RolePrincipalName,
       server_role_members.member_principal_id AS MemberPrincipalID,
       members.name AS MemberPrincipalName
FROM sys.server_role_members AS server_role_members
     INNER JOIN sys.server_principals AS roles
         ON server_role_members.role_principal_id = roles.principal_id
     LEFT OUTER JOIN sys.server_principals AS members
         ON server_role_members.member_principal_id = members.principal_id;

C. Seznam všech principů databáze, které jsou členy role na úrovni databáze

Pokud chcete vrátit členy databázových rolí (SQL Server a SQL Database), spusťte v databázi následující příkaz.

SELECT dRole.name AS [Database Role Name],
       dp.name AS [Members]
FROM sys.database_role_members AS dRo
     INNER JOIN sys.database_principals AS dp
         ON dRo.member_principal_id = dp.principal_id
     INNER JOIN sys.database_principals AS dRole
         ON dRo.role_principal_id = dRole.principal_id;