GRANT (Transact-SQL)
platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)koncový bod SQL Analytics ve službě Microsoft FabricWarehouse v Microsoft Fabricdatabáze SQL v Microsoft Fabric
Uděluje oprávnění k zabezpečitelnému objektu zabezpečení. Obecným konceptem je GRANT <some permission> ON <some object> TO <some user, login, or group>
. Obecné informace o oprávněních naleznete v tématu Oprávnění (databázový stroj).
Syntax
Syntaxe pro SQL Server, Azure SQL Database a databázi SQL Fabric.
-- Simplified syntax for GRANT
GRANT { ALL [ PRIVILEGES ] }
| permission [ ( column [ , ...n ] ) ] [ , ...n ]
[ ON [ class :: ] securable ] TO principal [ , ...n ]
[ WITH GRANT OPTION ] [ AS principal ]
Syntaxe pro Azure Synapse Analytics, paralelní datový sklad a sklad Microsoft Fabric.
GRANT
<permission> [ , ...n ]
[ ON [ <class_type> :: ] securable ]
TO principal [ , ...n ]
[ WITH GRANT OPTION ]
[;]
<permission> ::=
{ see the tables below }
<class_type> ::=
{
LOGIN
| DATABASE
| OBJECT
| ROLE
| SCHEMA
| USER
}
Argumenty
VŠICHNI
Tato možnost je zastaralá a udržuje se pouze kvůli zpětné kompatibilitě. Neuděluje všechna možná oprávnění. Udělení ALL
odpovídá udělení následujících oprávnění.
Zabezpečený | Dovolení |
---|---|
Databáze |
BACKUP DATABASE , BACKUP LOG , CREATE DATABASE , CREATE DEFAULT , CREATE FUNCTION , CREATE PROCEDURE , CREATE RULE , CREATE TABLE a CREATE VIEW |
Skalární funkce |
EXECUTE a REFERENCES |
Table-valued function |
DELETE , INSERT , REFERENCES , SELECT a UPDATE |
Uložená procedura | EXECUTE |
Stůl |
DELETE , INSERT , REFERENCES , SELECT a UPDATE |
Pohled |
DELETE , INSERT , REFERENCES , SELECT a UPDATE |
PRIVILEGIA
Součástí je dodržování předpisů ISO. Nemění chování ALL
.
oprávnění
Název oprávnění. Platné mapování oprávnění na zabezpečitelné jsou popsány v následujících částech.
sloupce
Určuje název sloupce v tabulce, u které se oprávnění udělují. Jsou vyžadovány závorky (
a )
.
třídy
Určuje třídu zabezpečitelné, pro kterou se oprávnění uděluje. Je vyžadován kvalifikátor oboru ::
.
zabezpečitelné
Určuje zabezpečitelný, pro který se oprávnění uděluje.
objektu zabezpečení
Název objektu zabezpečení. Objekty zabezpečení, u kterých lze udělit oprávnění k zabezpečitelnému, se liší v závislosti na zabezpečitelném objektu. Platné kombinace najdete v následujících částech.
MOŽNOST UDĚLENÍ
Označuje, že příjemce bude mít také možnost udělit zadané oprávnění jiným objektům zabezpečení.
objektu zabezpečení AS
Pomocí klauzule AS <principal>
uveďte, že objekt zabezpečení zaznamenaný jako grantor oprávnění by měl být jiným objektem než osoba provádějící příkaz. Například předpokládáme, že Mary
uživatele má principal_id
12
a Raul
uživatele je hlavní 15
. Mary spustí GRANT SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul;
Nyní tabulka sys.database_permissions
označuje, že grantor_principal_id
byl 15
(Raul
), i když příkaz skutečně spustil uživatel 12
(Mary
).
Použití klauzule AS
se obvykle nedoporučuje, pokud není nutné explicitně definovat řetěz oprávnění. Další informace najdete v tématu Souhrn algoritmu kontroly oprávnění.
Použití AS
v tomto příkazu neznamená schopnost zosobnit jiného uživatele.
Poznámky
Úplná syntaxe příkazu GRANT
je složitá. Předchozí diagram syntaxe byl zjednodušen tak, aby upoutat pozornost na jeho strukturu. Kompletní syntaxe pro udělení oprávnění pro konkrétní zabezpečitelné je popsána v článcích uvedených dále v tomto článku.
Příkaz REVOKE
lze použít k odebrání udělených oprávnění a příkaz DENY
lze použít k tomu, aby objekt zabezpečení nemohl získat konkrétní oprávnění prostřednictvím GRANT
.
Udělení oprávnění odebere DENY
nebo REVOKE
daného oprávnění k danému zabezpečitelnému. Pokud je stejné oprávnění odepřeno ve vyšším rozsahu, který obsahuje zabezpečitelné, má přednost DENY
. Odvolání uděleného oprávnění ve vyšším rozsahu ale nemá přednost.
Oprávnění na úrovni databáze jsou udělena v rámci rozsahu zadané databáze. Pokud uživatel potřebuje oprávnění k objektům v jiné databázi, vytvořte uživatelský účet v jiné databázi nebo udělte uživatelskému účtu přístup k druhé databázi a aktuální databázi.
Opatrnost
DENY
na úrovni tabulky nemá přednost před GRANT
na úrovni sloupce . Tato nekonzistence v hierarchii oprávnění byla zachována kvůli zpětné kompatibilitě. V budoucí verzi se odebere.
Systémová uložená procedura sp_helprotect
hlásí oprávnění k zabezpečitelné úrovni databáze.
V Microsoft Fabric se CREATE USER
momentálně nedají explicitně spustit. Při spuštění GRANT
nebo DENY
se uživatel vytvoří automaticky.
S MOŽNOSTÍ UDĚLENÍ
GRANT ... WITH GRANT OPTION
určuje, že objekt zabezpečení, který oprávnění přijímá, má možnost udělit zadané oprávnění jiným účtům zabezpečení. Pokud je objekt zabezpečení, který obdrží oprávnění, role nebo skupina Systému Windows, musí být klauzule AS
použita, když je potřeba dále udělit oprávnění k objektu uživatelům, kteří nejsou členy skupiny nebo role. Vzhledem k tomu, že pouze uživatel, nikoli skupina nebo role, může spustit příkaz GRANT
, musí konkrétní člen skupiny nebo role použít klauzuli AS
k explicitní vyvolání členství role nebo skupiny při udělení oprávnění. Následující příklad ukazuje, jak se WITH GRANT OPTION
používá při udělení role nebo skupině Windows.
-- Execute the following as a database owner
GRANT EXECUTE ON TestProc TO TesterRole WITH GRANT OPTION;
EXEC sp_addrolemember TesterRole, User1;
-- Execute the following as User1
-- The following fails because User1 does not have the permission as the User1
GRANT EXECUTE ON TestProc TO User2;
-- The following succeeds because User1 invokes the TesterRole membership
GRANT EXECUTE ON TestProc TO User2 AS TesterRole;
Graf oprávnění SQL Serveru
Plakátový graf všech oprávnění databázového stroje ve formátu PDF najdete v tématu https://aka.ms/sql-permissions-poster.
Dovolení
Grantor (nebo objekt zabezpečení zadaný pomocí možnosti AS
) musí mít buď oprávnění samotná s GRANT OPTION
, nebo vyšší oprávnění, které znamená udělení oprávnění. Pokud používáte možnost AS
, platí další požadavky. Podrobnosti najdete v článku o zabezpečitelném konkrétním článku.
Vlastníci objektů můžou udělit oprávnění k objektům, které vlastní. Objekty zabezpečení s oprávněním CONTROL
pro zabezpečitelné můžou udělit oprávnění k danému zabezpečitelnému.
Udělení oprávnění CONTROL
k databázi, jako jsou členové db_owner pevné databázové role, můžou udělit jakékoli oprávnění k jakémukoli zabezpečitelnému v databázi. Udělení oprávnění CONTROL
schématu může udělit jakékoli oprávnění k libovolnému objektu v rámci schématu.
Příklady
V následující tabulce jsou uvedeny zabezpečitelné položky a články, které popisují syntaxi specifickou pro zabezpečitelnost.
Zabezpečený | Syntaxe GRANT |
---|---|
Role aplikace | |
Shromáždění | |
Asymetrický klíč | oprávnění asymetrického klíče GRANT (Transact-SQL) |
Skupina dostupnosti | oprávnění skupiny dostupnosti GRANT (Transact-SQL) |
Certifikát | |
Smlouva | |
Databáze | |
Přihlašovací údaje s vymezeným oborem databáze | |
Zakončení | |
katalog Full-Text | |
seznam stop Full-Text | |
Funkce | oprávnění k objektu GRANT (Transact-SQL) |
Přihlášení do systému | |
Typ zprávy | |
Objekt | oprávnění k objektu GRANT (Transact-SQL) |
Fronta | oprávnění k objektu GRANT (Transact-SQL) |
Vazba vzdálené služby | |
Role | |
Cesta | |
Schéma | oprávnění k schématu GRANT (Transact-SQL) |
Seznam vlastností vyhledávání | oprávnění k seznamu vlastností hledání GRANT (Transact-SQL) |
Server | |
Služba | |
Uložená procedura | oprávnění k objektu GRANT (Transact-SQL) |
Symetrický klíč | UDĚLIT oprávnění symetrického klíče (Transact-SQL) |
Synonymum | oprávnění k objektu GRANT (Transact-SQL) |
Systémové objekty | UDĚLIT oprávnění k systémovému objektu (Transact-SQL) |
Stůl | oprávnění k objektu GRANT (Transact-SQL) |
Typ | |
Uživatel | |
Pohled | oprávnění k objektu GRANT (Transact-SQL) |
Kolekce schémat XML | oprávnění k kolekci schématu XML (Transact-SQL) |
Související obsah
-
odepřít (Transact-SQL) -
ODVOLÁNÍ (Transact-SQL) -
sp_addlogin (Transact-SQL) -
sp_adduser (Transact-SQL) -
sp_changedbowner (Transact-SQL) -
sp_dropuser (Transact-SQL) -
sp_helprotect (Transact-SQL) - sp_helpuser (Transact-SQL)