Permissões de objetos GRANT (Transact-SQL)
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics PDW (Analytics Platform System) Ponto de extremidade de análise do SQL Warehouse no Microsoft Fabric
Concede permissões em uma tabela, exibição, função com valor de tabela, procedimento armazenado, procedimento armazenado estendido, função escalar, função de agregação, fila de serviço ou sinônimo.
Convenções de sintaxe de Transact-SQL
Sintaxe
GRANT <permission> [ ,...n ] ON
[ OBJECT :: ][ schema_name ]. object_name [ ( column_name [ ,...n ] ) ]
TO <database_principal> [ ,...n ]
[ WITH GRANT OPTION ]
[ AS <database_principal> ]
<permission> ::=
ALL [ PRIVILEGES ] | permission [ ( column_name [ ,...n ] ) ]
<database_principal> ::=
Database_user
| Database_role
| Application_role
| Database_user_mapped_to_Windows_User
| Database_user_mapped_to_Windows_Group
| Database_user_mapped_to_certificate
| Database_user_mapped_to_asymmetric_key
| Database_user_with_no_login
Argumentos
permission
Especifica uma permissão que pode ser concedida em um objeto contido em esquema. Para obter uma lista das permissões, consulte Comentários.
ALL
Conceder ALL não concede todas as permissões possíveis. Conceder ALL é equivalente a conceder todas as 92 permissões ANSI aplicáveis ao objeto especificado. O significado ALL varia desta forma:
- Permissões de função escalar: EXECUTE, REFERENCES.
- Permissões de função com valor de tabela: DELETE, INSERT, REFERENCES, SELECT, UPDATE.
- Permissões de procedimento armazenado: EXECUTE.
- Permissões de tabela: DELETE, INSERT, REFERENCES, SELECT, UPDATE.
- Permissões de exibição: DELETE, INSERT, REFERENCES, SELECT, UPDATE.
Cuidado
A permissão ALL não está mais em uso e só é mantida para fins de compatibilidade.
PRIVILEGES
Incluído para conformidade com 92 ANSI. Não altera o comportamento de ALL.
column_name
Especifica o nome de uma coluna em uma tabela, exibição ou função com valor de tabela na qual a permissão está sendo concedida. Os parênteses ( ) são necessários. Apenas permissões SELECT, REFERENCES, UPDATE e UNMASK podem ser concedidas em uma coluna. column_name pode ser especificada na cláusula de permissões ou depois do nome protegível.
Cuidado
Um DENY em nível de tabela não tem precedência sobre um GRANT em nível de coluna. Essa inconsistência na hierarquia de permissões foi preservada para compatibilidade com versões anteriores.
ON [ OBJECT :: ] [ schema_name ] . object_name
Especifica o objeto no qual a permissão está sendo concedida. A frase OBJECT será opcional se schema_name for especificado. Se a frase OBJECT for usada, o qualificador de escopo (::) será necessário. Se schema_name não for especificado, o esquema padrão será usado. Se schema_name for especificado, o qualificador de escopo de esquema (.) será obrigatório.
TO <database_principal>
Especifica a entidade de segurança para o qual a permissão está sendo concedida.
WITH GRANT OPTION
Indica que o principal também terá a capacidade de conceder a permissão especificada a outros principais.
AS <database_principal>
Especifica uma entidade de segurança da qual a entidade de segurança que executa esta consulta deriva seu direito de conceder a permissão.
Database_user
Especifica um usuário do banco de dados.
Database_role
Especifica uma função de banco de dados.
Application_role
Especifica uma função de aplicativo.
Database_user_mapped_to_Windows_User
Especifica um usuário do banco de dados mapeado para um usuário do Windows.
Database_user_mapped_to_Windows_Group
Especifica um usuário do banco de dados mapeado para um grupo do Windows.
Database_user_mapped_to_certificate
Especifica um usuário do banco de dados mapeado para um certificado.
Database_user_mapped_to_asymmetric_key
Especifica um usuário do banco de dados mapeado para uma chave assimétrica.
Database_user_with_no_login
Especifica um usuário do banco de dados sem nenhuma entidade de segurança correspondente no nível de servidor.
Comentários
Importante
Uma combinação das permissões ALTER
e REFERENCE
em alguns casos pode permitir ao usuário autorizado exibir dados ou executar funções não autorizadas. Por exemplo: um usuário com a permissão ALTER
em uma tabela e a permissão REFERENCE
em uma função pode criar uma coluna computada em uma função e fazer com que ela seja executada. Nesse caso, o usuário também precisará da permissão SELECT
na coluna computada.
As informações sobre objetos são visível em várias exibições do catálogo. Para obter mais informações, confira Exibições do catálogo de objeto (Transact-SQL).
Um objeto é um protegível em nível de esquema contido pelo esquema que é seu pai na hierarquia de permissões. As permissões mais específicas e limitadas que podem ser concedidas em um objeto são listadas na tabela a seguir, junto com as permissões mais gerais que as contêm implicitamente.
Permissão de objeto | Implícito na permissão de objeto | Implícito na permissão de esquema |
---|---|---|
ALTER |
CONTROL |
ALTER |
CONTROL |
CONTROL |
CONTROL |
DELETE |
CONTROL |
DELETE |
EXECUTE |
CONTROL |
EXECUTE |
INSERT |
CONTROL |
INSERT |
RECEIVE |
CONTROL |
CONTROL |
REFERENCES |
CONTROL |
REFERENCES |
SELECT |
RECEIVE |
SELECT |
TAKE OWNERSHIP |
CONTROL |
CONTROL |
UPDATE |
CONTROL |
UPDATE |
VIEW CHANGE TRACKING |
CONTROL |
VIEW CHANGE TRACKING |
VIEW DEFINITION |
CONTROL |
VIEW DEFINITION |
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 tenha a permissão que está sendo concedida implícita.
Se você estiver usando a opção AS, os requisitos adicionais a seguir serão aplicáveis.
AS | Permissão adicional necessária |
---|---|
Usuário de banco de dados | A permissão IMPERSONATE no usuário, associação na função de banco de dados fixa db_securityadmin , associação na função de banco de dados fixa db_owner ou associação na função de servidor fixa sysadmin . |
Usuário de banco de dados mapeado para um logon do Windows | A permissão IMPERSONATE no usuário, associação na função de banco de dados fixa db_securityadmin , associação na função de banco de dados fixa db_owner ou associação na função de servidor fixa sysadmin . |
Usuário de banco de dados mapeado para um grupo do Windows | Associação no grupo do Windows, associação na função de banco de dados fixa db_securityadmin , associação na função de banco de dados fixa db_owner ou associação na função de servidor fixa sysadmin . |
Usuário de banco de dados mapeado para um certificado | Associação na função de banco de dados fixa db_securityadmin , associação na função de banco de dados fixa db_owner ou associação na função de servidor fixa sysadmin . |
Usuário de banco de dados mapeado para uma chave assimétrica | Associação na função de banco de dados fixa db_securityadmin , associação na função de banco de dados fixa db_owner ou associação na função de servidor fixa sysadmin . |
Usuário de banco de dados não mapeado para nenhuma entidade de segurança de servidor | A permissão IMPERSONATE no usuário, associação na função de banco de dados fixa db_securityadmin , associação na função de banco de dados fixa db_owner ou associação na função de servidor fixa sysadmin . |
Função de banco de dados | Permissão ALTER na função, associação na função de banco de dados fixa db_securityadmin , associação na função de banco de dados fixa db_owner ou associação na função de servidor fixa sysadmin . |
Função de aplicativo | Permissão ALTER na função, associação na função de banco de dados fixa db_securityadmin , associação na função de banco de dados fixa db_owner ou associação na função de servidor fixa sysadmin . |
Exemplos
R. Conceder a permissão SELECT em uma tabela
O exemplo a seguir concede a permissão SELECT
ao usuário RosaQdM
na tabela Person.Address
do banco de dados AdventureWorks2022
.
Este exemplo como escrito não funciona no Microsoft Fabric porque usa um usuário para um logon autenticado SQL, mas este mesmo exemplo funcionaria para um usuário do Microsoft Entra ID Fabric, por exemplo, RosaQdM@contoso.com
.
GRANT SELECT ON OBJECT::Person.Address TO RosaQdM;
GO
B. Conceder a permissão EXECUTE em um procedimento armazenado
O exemplo a seguir concede a permissão EXECUTE
no procedimento armazenado HumanResources.uspUpdateEmployeeHireInfo
para uma função de aplicativo chamada Recruiting11
.
USE AdventureWorks2022;
GRANT EXECUTE ON OBJECT::HumanResources.uspUpdateEmployeeHireInfo
TO Recruiting11;
GO
C. Conceder a permissão REFERENCES em uma exibição com GRANT OPTION
O exemplo a seguir concede a permissão REFERENCES
na coluna BusinessEntityID
na exibição HumanResources.vEmployee
para o usuário Wanida
com GRANT OPTION
.
Este exemplo como escrito não funciona no Microsoft Fabric porque usa um usuário para um logon autenticado SQL, mas este mesmo exemplo funcionaria para um usuário do Microsoft Entra ID Fabric, por exemplo, Wanida@contoso.com
.
GRANT REFERENCES (BusinessEntityID) ON OBJECT::HumanResources.vEmployee
TO Wanida WITH GRANT OPTION;
GO
D. Conceder a permissão SELECT em uma tabela sem usar a frase OBJECT
O exemplo a seguir concede a permissão SELECT
ao usuário RosaQdM
na tabela Person.Address
do banco de dados AdventureWorks2022
.
Este exemplo como escrito não funciona no Microsoft Fabric porque usa um usuário para um logon autenticado SQL, mas este mesmo exemplo funcionaria para um usuário do Microsoft Entra ID Fabric, por exemplo, RosaQdM@contoso.com
.
GRANT SELECT ON Person.Address TO RosaQdM;
GO
E. Conceder a permissão SELECT em uma tabela a uma conta de domínio
O exemplo a seguir concede a permissão SELECT
ao usuário AdventureWorks2022\RosaQdM
na tabela Person.Address
do banco de dados AdventureWorks2022
.
Este exemplo como escrito não funciona no Microsoft Fabric porque usa uma conta de domínio, mas este mesmo exemplo funcionaria para um usuário do Microsoft Entra ID Fabric, por exemplo, RosaQdM@contoso.com
.
GRANT SELECT ON Person.Address TO [AdventureWorks2022\RosaQdM];
GO
F. Conceder a permissão EXECUTE em um procedimento a uma função
O seguinte exemplo cria uma função e concede a permissão EXECUTE
à função no procedimento uspGetBillOfMaterials
do banco de dados AdventureWorks2022
.
CREATE ROLE newrole ;
GRANT EXECUTE ON dbo.uspGetBillOfMaterials TO newrole ;
GO
G. Conceder a permissão UNMASK em uma coluna
O exemplo a seguir concede a permissão UNMASK
, parte do Máscara Dinâmica de Dados, para a coluna email
na tabela Data.Membership
ao usuário OutreachCoordinator
.
Atualmente, não há suporte para Máscara Dinâmica de Dados no Microsoft Fabric.
GRANT UNMASK ON OBJECT::Data.Membership (email) to OutreachCoordinator;
GO
Conteúdo relacionado
- Permissões de objeto DENY (Transact-SQL)
- permissões de objeto REVOKE (Transact-SQL)
- Exibições do catálogo de objeto (Transact-SQL)
- Permissões (Mecanismo de Banco de Dados)
- Entidades (Mecanismo de Banco de Dados)
- Protegíveis
- sys.fn_builtin_permissions (Transact-SQL)
- HAS_PERMS_BY_NAME (Transact-SQL)
- sys.fn_my_permissions (Transact-SQL)
- Mascaramento de dados dinâmicos
- Segurança em nível de linha