GRANT (Transact-SQL)
gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-analysslutpunkt i Microsoft FabricWarehouse i Microsoft FabricSQL-databas i Microsoft Fabric
Beviljar behörigheter för ett huvudnamn som kan skyddas. Det allmänna konceptet är att GRANT <some permission> ON <some object> TO <some user, login, or group>
. En allmän beskrivning av behörigheter finns i behörigheter (databasmotor).
Transact-SQL syntaxkonventioner
Syntax
Syntax för SQL Server, Azure SQL Database och Fabric SQL Database.
-- Simplified syntax for GRANT
GRANT { ALL [ PRIVILEGES ] }
| permission [ ( column [ , ...n ] ) ] [ , ...n ]
[ ON [ class :: ] securable ] TO principal [ , ...n ]
[ WITH GRANT OPTION ] [ AS principal ]
Syntax för Azure Synapse Analytics, Parallel Data Warehouse och 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
}
Argument
ALLA
Det här alternativet är inaktuellt och underhålls endast för bakåtkompatibilitet. Den beviljar inte alla möjliga behörigheter. Att bevilja ALL
motsvarar att bevilja följande behörigheter.
Skyddsbar | Behörigheter |
---|---|
Databas |
BACKUP DATABASE , BACKUP LOG , CREATE DATABASE , CREATE DEFAULT , CREATE FUNCTION , CREATE PROCEDURE , CREATE RULE , CREATE TABLE och CREATE VIEW |
Skalär funktion |
EXECUTE och REFERENCES |
Tabellvärdesfunktion |
DELETE , INSERT , REFERENCES , SELECT och UPDATE |
Lagrad procedur | EXECUTE |
Bord |
DELETE , INSERT , REFERENCES , SELECT och UPDATE |
Utsikt |
DELETE , INSERT , REFERENCES , SELECT och UPDATE |
PRIVILEGIER
Ingår för ISO-efterlevnad. Ändrar inte beteendet för ALL
.
behörighet
Namnet på en behörighet. Giltiga mappningar av behörigheter till skyddsbara filer beskrivs i följande avsnitt.
kolumn
Anger namnet på en kolumn i en tabell där behörigheter beviljas. Parenteserna (
och )
krävs.
klass
Anger klassen för den skyddsbara som behörigheten beviljas för. Omfångskvalificeraren ::
krävs.
Anger det skydd som behörigheten beviljas för.
ATT huvudnamn
Namnet på ett huvudnamn. De huvudkonton som behörigheter för en skyddsbar kan beviljas till varierar beroende på vilka som kan skyddas. Se följande avsnitt för giltiga kombinationer.
ALTERNATIVET BEVILJA
Anger att den beviljande också kommer att ges möjlighet att bevilja den angivna behörigheten till andra huvudkonton.
AS huvudnamn
Använd AS <principal>
-satsen för att ange att huvudkontot som registrerats som beviljare av behörigheten ska vara ett annat huvudnamn än den person som kör -instruktionen. Anta till exempel att användaren Mary
har principal_id
12
och att användaren Raul
är huvudnamn 15
. Mary kör GRANT SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul;
Nu visar tabellen sys.database_permissions
att grantor_principal_id
var 15
(Raul
) trots att instruktionen faktiskt kördes av användaren 12
(Mary
).
Användning av AS
-satsen rekommenderas vanligtvis inte om du inte uttryckligen behöver definiera behörighetskedjan. Mer information finns i sammanfattning av algoritmen för behörighetskontroll.
Användningen av AS
i den här instruktionen innebär inte möjligheten att personifiera en annan användare.
Anmärkningar
Den fullständiga syntaxen för GRANT
-instruktionen är komplex. Det tidigare syntaxdiagrammet förenklades för att uppmärksamma dess struktur. Fullständig syntax för att bevilja behörigheter för specifika skyddsbara objekt beskrivs i artiklarna som anges senare i den här artikeln.
Instruktionen REVOKE
kan användas för att ta bort beviljade behörigheter, och DENY
-instruktionen kan användas för att förhindra att ett huvudnamn får en specifik behörighet via en GRANT
.
Om du beviljar en behörighet tar DENY
eller REVOKE
av behörigheten bort för den angivna skyddsbara filen. Om samma behörighet nekas med ett högre omfång som innehåller det skyddbara objektet har DENY
företräde. Men att återkalla den beviljade behörigheten i ett högre omfång har inte företräde.
Behörigheter på databasnivå beviljas inom den angivna databasens omfång. Om en användare behöver behörighet till objekt i en annan databas skapar du användarkontot i den andra databasen eller ger användarkontot åtkomst till den andra databasen samt den aktuella databasen.
Försiktighet
En DENY
på tabellnivå har inte företräde framför en GRANT
på kolumnnivå. Den här inkonsekvensen i behörighetshierarkin har bevarats för bakåtkompatibilitetens skull. Den tas bort i en framtida version.
Den sp_helprotect
system lagrade proceduren rapporterar behörigheter på databasnivå.
I Microsoft Fabric kan CREATE USER
inte köras explicit för närvarande. När GRANT
eller DENY
körs skapas användaren automatiskt.
MED ALTERNATIVET BEVILJA
GRANT ... WITH GRANT OPTION
anger att säkerhetsobjektet som tar emot behörigheten ges möjlighet att bevilja den angivna behörigheten till andra säkerhetskonton. När huvudnamnet som tar emot behörigheten är en roll eller en Windows-grupp måste AS
-satsen användas när objektbehörigheten måste beviljas ytterligare för användare som inte är medlemmar i gruppen eller rollen. Eftersom endast en användare, i stället för en grupp eller roll, kan köra en GRANT
-instruktion, måste en specifik medlem i gruppen eller rollen använda AS
-satsen för att uttryckligen anropa rollen eller gruppmedlemskapet när behörigheten beviljas. I följande exempel visas hur WITH GRANT OPTION
används när den beviljas till en roll eller En Windows-grupp.
-- 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;
Diagram över SQL Server-behörigheter
Ett diagram med affischstorlek för alla databasmotorbehörigheter i PDF-format finns i https://aka.ms/sql-permissions-poster.
Behörigheter
Beviljaren (eller det huvudnamn som anges med alternativet AS
) måste ha antingen behörigheten själv med GRANT OPTION
eller en högre behörighet som innebär att behörigheten beviljas. Om du använder alternativet AS
gäller ytterligare krav. Mer information finns i den säkerhetsbara artikeln.
Objektägare kan bevilja behörigheter för de objekt de äger. Huvudnamn med CONTROL
behörighet för en skyddsbar kan bevilja behörighet för den skyddsbara filen.
Beviljare av CONTROL SERVER
behörighet, till exempel medlemmar i sysadmin fast serverroll, kan bevilja alla behörigheter på alla skyddbara på servern. Beviljanden av CONTROL
behörighet för en databas, till exempel medlemmar i db_owner fast databasroll, kan ge alla behörigheter som kan säkras i databasen. Beviljanden av CONTROL
behörighet för ett schema kan ge alla behörigheter för alla objekt i schemat.
Exempel
I följande tabell visas de skyddsbara objekten och artiklarna som beskriver den skyddsbara syntaxen.