GRANT (Transact-SQL)

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

Concede permisos sobre un elemento protegible a una entidad de seguridad. El concepto general es para GRANT <some permission> ON <some object> TO <some user, login, or group>. Para ver conceptos generales sobre los permisos, vea Permisos (Motor de base de datos).

Convenciones de sintaxis de Transact-SQL

Sintaxis

Sintaxis para SQL Server y 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 ]

Sintaxis para Azure Synapse Analytics y Almacenamiento de datos paralelos y 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 (12.x) 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 permisos siguientes.

Elemento protegible Permisos
Base de datos BACKUP DATABASE, BACKUP LOG, CREATE DATABASE, CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE TABLEy CREATE VIEW
Función escalar EXECUTE y REFERENCES
Función con valores de tabla DELETE, INSERT, REFERENCES, SELECT y UPDATE
Procedimiento almacenado EXECUTE
Tabla DELETE, INSERT, REFERENCES, SELECT y UPDATE
Ver DELETE, INSERT, REFERENCES, SELECT y UPDATE

PRIVILEGES

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

permission

Nombre de un permiso. Las asignaciones válidas de permisos a elementos protegibles se describen en las secciones siguientes.

column

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

class

Especifica la clase del elemento protegible en el que se va a conceder el permiso. Se requiere el calificador :: de ámbito.

securable

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

TO principal

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. Consulte las secciones siguientes para ver 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 AS <principal> cláusula para indicar que la entidad de seguridad registrada como receptor del permiso debe ser una entidad de seguridad distinta de la persona que ejecuta la instrucción. Por ejemplo, supongamos que el usuario Mary tiene un principal_id de 12y el usuario Raul es la entidad de seguridad 15. Mary ejecuta GRANT SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul; Ahora la sys.database_permissions tabla indica que grantor_prinicpal_id era 15 (Raul) aunque el usuario 12 ejecutó realmente la instrucción (Mary).

El uso de la AS cláusula normalmente no se recomienda a menos que necesite definir explícitamente la cadena de permisos. Para obtener más información, vea Resumen del algoritmo de comprobación de permisos.

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

Comentarios

La sintaxis completa de la GRANT instrucción es compleja. El diagrama de sintaxis anterior se ha simplificado para llamar la atención sobre su estructura. La sintaxis completa para conceder permisos en elementos protegibles específicos se describe en los artículos enumerados más adelante en este artículo.

La REVOKE instrucción se puede usar para quitar permisos concedidos y la DENY instrucción se puede usar para evitar que una entidad de seguridad obtenga un permiso específico a través de .GRANT

Conceder un permiso quita DENY o REVOKE de ese permiso en el elemento protegible especificado. Si se deniega el mismo permiso en un ámbito superior que contiene el elemento protegible, DENY tiene prioridad. Pero 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 nivel DENY de tabla no tiene prioridad sobre un nivel GRANTde 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 sp_helprotect procedimiento almacenado del sistema notifica permisos en un nivel de base de datos protegible.

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

WITH GRANT OPTION

GRANT ... WITH GRANT OPTION especifica que la entidad de seguridad que recibe el permiso tiene la 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 AS cláusula debe usarse cuando el permiso de objeto tenga que concederse más a los usuarios que no son miembros del grupo o rol. Dado que solo un usuario, en lugar de un grupo o rol, puede ejecutar una GRANT instrucción , un miembro específico del grupo o rol debe usar la AS cláusula para invocar explícitamente el rol o la pertenencia a grupos al conceder el permiso. En el WITH GRANT OPTION ejemplo siguiente se muestra cómo se usa cuando se concede 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 TestProc TO User2;

-- The following succeeds because User1 invokes the TesterRole membership
GRANT EXECUTE ON TestProc TO User2 AS TesterRole;

Gráfico de los permisos de SQL Server

Para obtener un gráfico de tamaño de póster de todos los permisos de Motor de base de datos en formato PDF, consulte https://aka.ms/sql-permissions-poster.

Permisos

El receptor (o la entidad de seguridad especificada con la AS opción) debe tener el propio permiso con GRANT OPTIONo un permiso superior que implique la concesión del permiso. Si usa la AS opción , 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 CONTROL permiso en un elemento protegible pueden conceder permiso para ese elemento protegible.

Los receptores de CONTROL SERVER permisos, como los miembros del rol fijo de servidor sysadmin , pueden conceder cualquier permiso en cualquier elemento protegible en el servidor. Los receptores de permiso en una base de CONTROL datos, como los miembros del rol fijo de base de datos db_owner , pueden conceder cualquier permiso en cualquier elemento protegible de la base de datos. Los receptores de permiso en CONTROL un esquema pueden conceder cualquier permiso 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 de 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)