GRANT (Transact-SQL)
Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)Ponto de extremidade de análise de SQL no Microsoft FabricWarehouse no Microsoft FabricBanco de Dados SQL no Microsoft Fabric
Concede permissões em um protegível a uma entidade. O conceito geral é .GRANT <some permission> ON <some object> TO <some user, login, or group>
Para obter uma discussão geral sobre permissões, confira Permissões (Mecanismo de Banco de Dados).
Convenções de sintaxe de Transact-SQL
Sintaxe
Sintaxe para SQL Server, Banco de Dados SQL do Azure e Banco de Dados SQL do Fabric.
-- Simplified syntax for GRANT
GRANT { ALL [ PRIVILEGES ] }
| permission [ ( column [ , ...n ] ) ] [ , ...n ]
[ ON [ class :: ] securable ] TO principal [ , ...n ]
[ WITH GRANT OPTION ] [ AS principal ]
Sintaxe para Azure Synapse Analytics, Parallel Data Warehouse e 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
}
Argumentos
ALL
Esta opção está preterida e é mantida apenas para compatibilidade com versões anteriores. Ele não concede todas as permissões possíveis. Conceder ALL
é equivalente a conceder as seguintes permissões.
Protegível | Permissões |
---|---|
Backup de banco de dados |
BACKUP DATABASE , BACKUP LOG , CREATE DATABASE , CREATE DEFAULT , CREATE FUNCTION , CREATE PROCEDURE , CREATE RULE , , CREATE TABLE , e CREATE VIEW |
Função de valor escalar |
EXECUTE e REFERENCES |
Função com valor de tabela |
DELETE , INSERT , REFERENCES , SELECT e UPDATE |
Procedimento armazenado | EXECUTE |
Tabela |
DELETE , INSERT , REFERENCES , SELECT e UPDATE |
Exibir |
DELETE , INSERT , REFERENCES , SELECT e UPDATE |
PRIVILEGES
Incluído para conformidade com ISO. Não altera o comportamento do ALL
.
permission
O nome de uma permissão. Os mapeamentos válidos de permissões para protegíveis são descritos nas seções a seguir.
column
Especifica o nome de uma coluna em uma tabela na qual estão sendo concedidas permissões. Os parênteses (
e )
são obrigatórios.
class
Especifica a classe do protegível na qual a permissão está sendo concedida. O qualificador ::
de escopo é necessário.
securable
Especifica o protegível no qual a permissão está sendo concedida.
TO principal
O nome de uma entidade de segurança. As entidades para as quais permissões em um protegível podem ser concedidas variam, dependendo do protegível. Consulte as seções a seguir para obter combinações válidas.
GRANT OPTION
Indica que o usuário autorizado também poderá conceder a permissão especificada a outras entidades.
AS principal
Use a AS <principal>
cláusula para indicar que a entidade principal registrada como concedente da permissão deve ser uma entidade diferente da pessoa que executa a instrução. Por exemplo, suponha que o usuário Mary
tenha um principal_id
de 12
, e o usuário Raul
é principal 15
. Mary executa GRANT SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul;
Agora a sys.database_permissions
tabela indica que o grantor_principal_id
was (15
Raul
) mesmo que a instrução tenha sido realmente executada pelo usuário 12
(Mary
).
O uso da cláusula normalmente não é recomendado, AS
a menos que você precise definir explicitamente a cadeia de permissões. Para obter mais informações, consulte Resumo do algoritmo de verificação de permissão.
O uso de AS
nesta declaração não implica a capacidade de se passar por outro usuário.
Comentários
A sintaxe completa da GRANT
instrução é complexa. O diagrama de sintaxe anterior foi simplificado para chamar a atenção para sua estrutura. A sintaxe completa para conceder permissões em protegíveis específicos é descrita nos artigos listados posteriormente neste artigo.
A REVOKE
instrução pode ser usada para remover permissões concedidas e a DENY
instrução pode ser usada para impedir que uma entidade de segurança obtenha uma permissão específica por meio de um GRANT
.
A concessão de uma permissão remove DENY
ou REVOKE
dessa permissão no protegível especificado. Se a mesma permissão for negada em um escopo mais alto que contenha o protegível, o DENY
terá precedência. Mas revogar a permissão concedida em um escopo mais alto não tem precedência.
Permissões em nível de banco de dados são concedidas dentro do escopo do banco de dados especificado. Se um usuário precisar de permissões em objetos em outro banco de dados, crie a conta de usuário no outro banco de dados ou conceda acesso à conta de usuário no outro banco de dados, bem como no banco de dados atual.
Cuidado
Um nível DENY
de tabela não tem precedência sobre um nível GRANT
de coluna . Essa inconsistência na hierarquia de permissões foi preservada para manter a compatibilidade com versões anteriores. Ela será removida em uma versão futura.
O sp_helprotect
procedimento armazenado do sistema relata permissões em um protegível no nível do banco de dados.
No Microsoft Fabric, CREATE USER
não pode ser executado explicitamente no momento. Quando GRANT
ou DENY
for executado, o usuário será criado automaticamente.
WITH GRANT OPTION
O GRANT ... WITH GRANT OPTION
especifica que a entidade de segurança que recebe a permissão recebe a capacidade de conceder a permissão especificada a outras contas de segurança. Quando a entidade de segurança que recebe a permissão é uma função ou um grupo do Windows, a AS
cláusula deve ser usada quando a permissão de objeto precisar ser concedida a usuários que não são membros do grupo ou função. Como apenas um usuário, em vez de um grupo ou função, pode executar uma GRANT
instrução, um membro específico do grupo ou função deve usar a AS
cláusula para invocar explicitamente a função ou associação de grupo ao conceder a permissão. O exemplo a seguir mostra como o WITH GRANT OPTION
é usado quando concedido a uma função ou grupo do 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;
Gráfico de permissões do SQL Server
Para obter um gráfico do tamanho de um pôster de todas as permissões do Mecanismo de Banco de Dados em formato PDF, consulte https://aka.ms/sql-permissions-poster.
Permissões
O concessor (ou a entidade de segurança especificada com a opção AS
) deve ter a própria permissão com GRANT OPTION
ou uma permissão superior que indique a permissão que está sendo concedida. Se estiver usando a AS
opção, requisitos adicionais se aplicam. Consulte o artigo específico do protegível para ver os detalhes.
Os proprietários de objetos podem conceder permissões nos objetos de sua propriedade. As entidades de segurança com CONTROL
permissão em um protegível podem conceder permissão nesse protegível.
Os beneficiários da CONTROL SERVER
permissão, como membros da função de servidor fixa sysadmin , podem conceder qualquer permissão em qualquer protegível no servidor. Os beneficiários de permissão em um banco de CONTROL
dados, como membros da função de banco de dados fixa db_owner , podem conceder qualquer permissão em qualquer protegível no banco de dados. Os beneficiários de CONTROL
permissão em um esquema podem conceder qualquer permissão em qualquer objeto dentro do esquema.
Exemplos
A tabela a seguir lista os protegíveis e os artigos que descrevem a sintaxe específica do protegível.