GRANT (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punto de conexión SQL en Microsoft FabricAlmacenamiento en Microsoft Fabric

Concede permisos sobre un elemento protegible a una entidad de seguridad. El concepto general es GRANT <algún permiso> ON <algún objeto> TO <algún usuario, inicio de sesión o grupo>. Para ver conceptos generales sobre los permisos, vea Permisos (Motor de base de datos).

Convenciones de sintaxis de Transact-SQL

Sintaxis

-- Syntax for SQL Server and Azure 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 for Azure Synapse Analytics and Parallel Data Warehouse and 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  
}  

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

ALL
Esta opción ha quedado desusada y solo se mantiene por razones de compatibilidad con versiones anteriores. No concede todos los permisos posibles. Conceder ALL es equivalente a conceder los siguientes permisos:

  • Si el elemento protegible es una base de datos, ALL significa BACKUP DATABASE, BACKUP LOG, CREATE DATABASE, CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE TABLE y CREATE VIEW.

  • Si el elemento protegible es una función escalar, ALL significa EXECUTE y REFERENCES.

  • Si el elemento protegible es una función con valores de tabla, ALL significa DELETE, INSERT, REFERENCES, SELECT y UPDATE.

  • Si el elemento protegible es un procedimiento almacenado, ALL significa EXECUTE.

  • Si el elemento protegible es una tabla, ALL significa DELETE, INSERT, REFERENCES, SELECT y UPDATE.

  • Si el elemento protegible es una vista, ALL significa DELETE, INSERT, REFERENCES, SELECT y UPDATE.

PRIVILEGES
Incluido por compatibilidad con ISO. No cambia el comportamiento de ALL.

permission
Es el nombre de un permiso. Las asignaciones de permisos válidas a elementos protegibles se describen en los subtemas que se muestran a continuación.

column
Especifica el nombre de una columna de una tabla en la que se van a conceder los permisos. Los paréntesis () son obligatorios.

class
Especifica la clase del elemento protegible en el que se va a conceder el permiso. El calificador de ámbito :: es obligatorio.

securable
Especifica el elemento protegible para el que se va a conceder el permiso.

TO principal
Es el nombre de una entidad de seguridad. Las entidades de seguridad a las que se pueden conceder permisos para un elemento protegible varían según el elemento protegible. Vea los subtemas enumerados a continuación para comprobar las combinaciones válidas.

GRANT OPTION
Indica que el receptor también podrá conceder el permiso especificado a otras entidades de seguridad.

AS principal
Use la cláusula AS de la entidad de seguridad para indicar que la entidad de seguridad registrada como el otorgante del permiso debe ser una entidad de seguridad distinta de la persona que ejecuta la instrucción. Por ejemplo, suponga que la usuaria María tiene el principal_id 12 y el usuario Raúl tiene el principal_id 15. Mary ejecuta GRANT SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul;. Ahora, la tabla sys.database_permissions indicará que el grantor_principal_id era 15 (Raul), aunque la instrucción realmente la ejecutó el usuario 13 (Mary).

Normalmente, el uso de la cláusula AS no se suele recomendar, a menos que necesite definir explícitamente la cadena de permisos. Para más información, vea la sección Resumen del algoritmo de comprobación de permiso de Permisos (motor de base de datos).

El uso de AS en esta instrucción no implica la capacidad de suplantar a otro usuario.

Observaciones

La sintaxis completa de la instrucción GRANT es compleja. El diagrama de sintaxis anterior se ha simplificado para concentrar la atención en su estructura. La sintaxis completa para conceder permisos para elementos protegibles específicos se describe en los artículos enumerados a continuación.

Se puede utilizar la instrucción REVOKE para retirar permisos concedidos y la instrucción DENY para evitar que una entidad de seguridad obtenga un permiso específico mediante una instrucción GRANT.

La concesión de un permiso quita DENY o REVOKE de ese permiso para el elemento protegible especificado. Si se deniega el mismo permiso en un ámbito superior que contiene el elemento protegible, DENY tiene prioridad. No obstante, revocar el permiso concedido en un ámbito superior no tiene prioridad.

Los permisos de nivel de base de datos se conceden en el ámbito de la base de datos especificada. Si un usuario necesita permisos para objetos de otra base de datos, cree la cuenta del usuario en la otra base de datos o conceda a la cuenta del usuario acceso a la otra base de datos y a la base de datos actual.

Precaución

Un permiso DENY de nivel de tabla no tiene prioridad sobre uno GRANT de nivel de columna. Esta incoherencia en la jerarquía de permisos se ha mantenido por motivos de compatibilidad con versiones anteriores. Se eliminará en una próxima versión.

El procedimiento almacenado del sistema sp_helprotect informa de los permisos sobre un elemento protegible en el nivel de base de datos.

En Microsoft Fabric, actualmente no se puede ejecutar explícitamente CREATE USER. Cuando se ejecuta GRANT o DENY, el usuario se creará automáticamente.

WITH GRANT OPTION

El GRANT ... WITH GRANT OPTION especifica que la entidad de seguridad que recibe el permiso tiene capacidad de conceder el permiso especificado a otras cuentas de seguridad. Cuando la entidad de seguridad que recibe el permiso es un rol o un grupo de Windows, la cláusula AS se debe usar cuando el permiso del objeto deba concederse a usuarios que no sean miembros del grupo o rol. Como solo un usuario, y no un grupo o rol, puede ejecutar la instrucción GRANT, un miembro específico del grupo o rol debe usar la cláusula AS para invocar explícitamente el rol o miembro del grupo al conceder el permiso. En el siguiente ejemplo se muestra cómo se usa WITH GRANT OPTION cuando se concede permiso a un rol o grupo de 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 TestMe TO User2;  
-- The following succeeds because User1 invokes the TesterRole membership  
GRANT EXECUTE ON TestMe TO User2 AS TesterRole;  

Gráfico de los permisos de SQL Server

Para ver un gráfico de tamaño cartel de todos los permisos del Motor de base de datos en formato PDF, vea https://aka.ms/sql-permissions-poster.

Permisos

El otorgante del permiso (o la entidad de seguridad especificada con la opción AS) debe tener el permiso con GRANT OPTION, o un permiso superior que implique el permiso que se va a conceder. Si se utiliza la opción AS, se aplican requisitos adicionales. Para obtener más detalles, vea el artículo específico de los elementos protegibles.

Los propietarios de objetos pueden conceder permisos para los objetos que poseen. Las entidades de seguridad con permiso CONTROL sobre un elemento protegible pueden conceder permisos para ese elemento.

Los receptores del permiso CONTROL SERVER como los miembros del rol fijo de servidor sysadmin pueden conceder los permisos sobre cualquier elemento protegible en el servidor. Los receptores del permiso CONTROL para una base de datos, como los miembros del rol fijo de base de datos db_owner, pueden conceder los permisos para cualquier elemento protegible en la base de datos. Los receptores del permiso CONTROL en un esquema pueden conceder los permisos en cualquier objeto del esquema.

Ejemplos

En esta tabla se enumeran los elementos protegibles y los artículos en los que se describe la sintaxis específica de estos.

Elemento protegible Sintaxis GRANT
Rol de aplicación GRANT (permisos de entidad de seguridad de base de datos de Transact-SQL)
Ensamblado GRANT (permisos de ensamblado Transact-SQL)
Clave asimétrica GRANT (permisos de clave asimétrica de Transact-SQL)
Grupo de disponibilidad Disponibilidad de los permisos de grupo GRANT (Transact-SQL)
Certificado GRANT (permisos de certificado de Transact-SQL)
Contrato GRANT (permisos de Service Broker de Transact-SQL)
Base de datos GRANT (permisos de base de datos de Transact-SQL)
Credencial de ámbito de base de datos GRANT (credencial de ámbito de base de datos de Transact-SQL)
Punto de conexión GRANT (permisos de extremo de Transact-SQL)
Catálogo de texto completo GRANT (permisos de texto completo de Transact-SQL)
Lista de palabras irrelevantes de texto completo GRANT (permisos de texto completo de Transact-SQL)
Función GRANT (permisos de objeto de Transact-SQL)
Inicio de sesión GRANT (permisos de entidad de seguridad de servidor de Transact-SQL)
Tipo de mensaje GRANT (permisos de Service Broker de Transact-SQL)
Object GRANT (permisos de objeto de Transact-SQL)
Cola GRANT (permisos de objeto de Transact-SQL)
Enlace de servicio remoto GRANT (permisos de Service Broker de Transact-SQL)
Role GRANT (permisos de entidad de seguridad de base de datos de Transact-SQL)
Enrutar GRANT (permisos de Service Broker de Transact-SQL)
Schema GRANT (permisos de esquema de Transact-SQL)
Lista de propiedades de búsqueda Conceder permisos de lista de propiedades de búsqueda (Transact-SQL)
Server GRANT (permisos de servidor de Transact-SQL)
Servicio GRANT (permisos de Service Broker de Transact-SQL)
Procedimiento almacenado GRANT (permisos de objeto de Transact-SQL)
Clave simétrica GRANT (permisos de clave simétrica de Transact-SQL)
Synonym (Sinónimo) GRANT (permisos de objeto de Transact-SQL)
Objetos de sistema GRANT (permisos de objeto de sistema de Transact-SQL)
Tabla GRANT (permisos de objeto de Transact-SQL)
Tipo GRANT (permisos de tipo de Transact-SQL)
Usuario GRANT (permisos de entidad de seguridad de base de datos de Transact-SQL)
Ver GRANT (permisos de objeto de Transact-SQL)
Colección de esquemas XML GRANT (permisos de colección de esquemas XML de Transact-SQL)

Consulte también