GRANT (Transact-SQL)
Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)punkt końcowy analizy SQL w usłudze Microsoft FabricWarehouse w usłudze Microsoft FabricSQL Database w usłudze Microsoft Fabric
Przyznaje uprawnienia zabezpieczane podmiotowi zabezpieczeń. Ogólną koncepcją jest GRANT <some permission> ON <some object> TO <some user, login, or group>
. Aby zapoznać się z ogólnym omówieniem uprawnień, zobacz Uprawnienia (aparat bazy danych).
Transact-SQL konwencje składni
Składnia
Składnia dla programu SQL Server, usługi Azure SQL Database i bazy danych SQL Fabric.
-- Simplified syntax for GRANT
GRANT { ALL [ PRIVILEGES ] }
| permission [ ( column [ , ...n ] ) ] [ , ...n ]
[ ON [ class :: ] securable ] TO principal [ , ...n ]
[ WITH GRANT OPTION ] [ AS principal ]
Składnia dla usług Azure Synapse Analytics, Parallel Data Warehouse i Microsoft Fabric Warehouse.
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
CAŁY
Ta opcja jest przestarzała i jest obsługiwana tylko w przypadku zgodności z poprzednimi wersjami. Nie udziela wszystkich możliwych uprawnień. Udzielanie ALL
jest równoważne z przyznaniem następujących uprawnień.
Zabezpieczany | Uprawnienia |
---|---|
Baza danych |
BACKUP DATABASE , BACKUP LOG , CREATE DATABASE , CREATE DEFAULT , CREATE FUNCTION , CREATE PROCEDURE , CREATE RULE , CREATE TABLE i CREATE VIEW |
Funkcja skalarna |
EXECUTE i REFERENCES |
Funkcja wartościowa tabeli |
DELETE , INSERT , REFERENCES , SELECT i UPDATE |
Procedura składowana | EXECUTE |
Stół |
DELETE , INSERT , REFERENCES , SELECT i UPDATE |
Widok |
DELETE , INSERT , REFERENCES , SELECT i UPDATE |
UPRAWNIENIA
Uwzględniane pod kątem zgodności z normą ISO. Nie zmienia zachowania ALL
.
uprawnienia
Nazwa uprawnienia. Prawidłowe mapowania uprawnień do zabezpieczanych elementów opisano w poniższych sekcjach.
kolumny
Określa nazwę kolumny w tabeli, na której są przyznawane uprawnienia. Nawiasy (
i )
są wymagane.
klasy
Określa klasę zabezpieczaną, na której jest udzielane uprawnienie. Wymagany jest ::
kwalifikatora zakresu.
zabezpieczane
Określa zabezpieczanie, na którym udzielono uprawnień.
ABY podmiotu zabezpieczeń
Nazwa podmiotu zabezpieczeń. Podmioty zabezpieczeń, którym można przyznać uprawnienia do zabezpieczania, różnią się w zależności od zabezpieczanego. Zapoznaj się z poniższymi sekcjami, aby zapoznać się z prawidłowymi kombinacjami.
OPCJA UDZIELANIA
Wskazuje, że grante będzie również mieć możliwość udzielenia określonego uprawnienia innym podmiotom zabezpieczeń.
podmiotu zabezpieczeń as
Użyj klauzuli AS <principal>
, aby wskazać, że podmiot zabezpieczeń zarejestrowany jako podmiot przyznający uprawnienie powinien być podmiotem zabezpieczeń innym niż osoba wykonująca instrukcję. Załóżmy na przykład, że Mary
użytkownika ma principal_id
12
, a Raul
użytkownika jest podmiotem zabezpieczeń 15
. Mary wykonuje GRANT SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul;
Teraz tabela sys.database_permissions
wskazuje, że grantor_principal_id
została 15
(Raul
), mimo że instrukcja została rzeczywiście wykonana przez użytkownika 12
(Mary
).
Używanie klauzuli AS
zwykle nie jest zalecane, chyba że trzeba jawnie zdefiniować łańcuch uprawnień. Aby uzyskać więcej informacji, zobacz Podsumowanie algorytmu sprawdzania uprawnień.
Użycie AS
w tej instrukcji nie oznacza możliwości personifikacji innego użytkownika.
Uwagi
Pełna składnia instrukcji GRANT
jest złożona. Poprzedni diagram składni został uproszczony, aby zwrócić uwagę na jego strukturę. Pełna składnia udzielania uprawnień do określonych zabezpieczania jest opisana w artykułach wymienionych w dalszej części tego artykułu.
Instrukcję REVOKE
można użyć do usunięcia przyznanych uprawnień, a instrukcja DENY
może służyć do zapobiegania uzyskaniu przez podmiot zabezpieczeń określonego uprawnienia za pośrednictwem GRANT
.
Przyznanie uprawnienia usuwa DENY
lub REVOKE
tego uprawnienia w określonym zabezpieczaniu. Jeśli to samo uprawnienie zostanie odrzucone w wyższym zakresie, który zawiera zabezpieczane, DENY
ma pierwszeństwo. Jednak cofnięcie przyznanego uprawnienia w wyższym zakresie nie ma pierwszeństwa.
Uprawnienia na poziomie bazy danych są przyznawane w zakresie określonej bazy danych. Jeśli użytkownik potrzebuje uprawnień do obiektów w innej bazie danych, utwórz konto użytkownika w innej bazie danych lub przyznaj kontu użytkownika dostęp do innej bazy danych, a także bieżącej bazy danych.
Ostrożność
DENY
na poziomie tabeli nie ma pierwszeństwa przed GRANT
na poziomie kolumny. Ta niespójność w hierarchii uprawnień została zachowana ze względu na zgodność z poprzednimi wersjami. Zostanie on usunięty w przyszłej wersji.
Procedura składowana systemu sp_helprotect
zgłasza uprawnienia do zabezpieczania na poziomie bazy danych.
W usłudze Microsoft Fabric nie można obecnie jawnie wykonywać CREATE USER
. Po wykonaniu GRANT
lub DENY
użytkownik jest tworzony automatycznie.
Z OPCJĄ UDZIELANIA
GRANT ... WITH GRANT OPTION
określa, że podmiot zabezpieczeń odbierający uprawnienie ma możliwość udzielenia określonego uprawnienia innym kontom zabezpieczeń. Gdy podmiot zabezpieczeń, który otrzymuje uprawnienie, jest rolą lub grupą systemu Windows, należy użyć klauzuli AS
, gdy uprawnienie obiektu musi być dodatkowo przyznane użytkownikom, którzy nie są członkami grupy lub roli. Ponieważ tylko użytkownik, a nie grupa lub rola, może wykonać instrukcję GRANT
, określony członek grupy lub roli musi użyć klauzuli AS
, aby jawnie wywołać rolę lub członkostwo w grupie podczas udzielania uprawnień. W poniższym przykładzie pokazano, jak WITH GRANT OPTION
jest używana w przypadku udzielenia roli lub grupy systemu 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;
Wykres uprawnień programu SQL Server
Aby uzyskać wykres rozmiaru plakatu wszystkich uprawnień aparatu bazy danych w formacie PDF, zobacz https://aka.ms/sql-permissions-poster.
Uprawnienia
Grantor (lub podmiot zabezpieczeń określony z opcją AS
) musi mieć uprawnienie do GRANT OPTION
lub wyższe uprawnienie, które oznacza przyznanie uprawnienia. W przypadku korzystania z opcji AS
mają zastosowanie dodatkowe wymagania. Aby uzyskać szczegółowe informacje, zobacz artykuł dotyczący zabezpieczania.
Właściciele obiektów mogą udzielać uprawnień do obiektów, których są właścicielami. Podmioty z CONTROL
uprawnienia do zabezpieczania mogą udzielać uprawnień do tego zabezpieczanego.
Udziel uprawnień CONTROL SERVER
, takich jak członkowie sysadmin stałej roli serwera, mogą przyznać wszelkie uprawnienia do zabezpieczania na serwerze. Grantees CONTROL
uprawnienia do bazy danych, takich jak członkowie db_owner stałej roli bazy danych, mogą udzielić wszelkich uprawnień do zabezpieczania w bazie danych. Grantees CONTROL
uprawnienia do schematu mogą przyznać dowolne uprawnienie do dowolnego obiektu w schemacie.
Przykłady
W poniższej tabeli wymieniono zabezpieczane elementy i artykuły, które opisują zabezpieczaną składnię.