GRANT (Transact-SQL)GRANT (Transact-SQL)

SE APLICA A: síSQL Server síAzure SQL Database síAzure Synapse Analytics (SQL DW) síAlmacenamiento de datos paralelos APPLIES TO: YesSQL Server YesAzure SQL Database YesAzure Synapse Analytics (SQL DW) YesParallel Data Warehouse

Concede permisos sobre un elemento protegible a una entidad de seguridad.Grants permissions on a securable to a principal. El concepto general es GRANT <un permiso> ON <un objeto> TO <un usuario, inicio de sesión o grupo>.The general concept is to 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).For a general discussion of permissions, see Permissions (Database Engine).

Icono de vínculo de artículo Convenciones de sintaxis de Transact-SQLArticle link icon Transact-SQL Syntax Conventions

SintaxisSyntax

-- 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 SQL Data Warehouse and Parallel Data 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  
}  

ArgumentosArguments

ALLALL
Esta opción ha quedado desusada y solo se mantiene por razones de compatibilidad con versiones anteriores.This option is deprecated and maintained only for backward compatibility. No concede todos los permisos posibles.It does not grant all possible permissions. Conceder ALL es equivalente a conceder los siguientes permisos:Granting ALL is equivalent to granting the following permissions:

  • 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.If the securable is a database, ALL means BACKUP DATABASE, BACKUP LOG, CREATE DATABASE, CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE TABLE, and CREATE VIEW.

  • Si el elemento protegible es una función escalar, ALL significa EXECUTE y REFERENCES.If the securable is a scalar function, ALL means EXECUTE and REFERENCES.

  • Si el elemento protegible es una función con valores de tabla, ALL significa DELETE, INSERT, REFERENCES, SELECT y UPDATE.If the securable is a table-valued function, ALL means DELETE, INSERT, REFERENCES, SELECT, and UPDATE.

  • Si el elemento protegible es un procedimiento almacenado, ALL significa EXECUTE.If the securable is a stored procedure, ALL means EXECUTE.

  • Si el elemento protegible es una tabla, ALL significa DELETE, INSERT, REFERENCES, SELECT y UPDATE.If the securable is a table, ALL means DELETE, INSERT, REFERENCES, SELECT, and UPDATE.

  • Si el elemento protegible es una vista, ALL significa DELETE, INSERT, REFERENCES, SELECT y UPDATE.If the securable is a view, ALL means DELETE, INSERT, REFERENCES, SELECT, and UPDATE.

PRIVILEGESPRIVILEGES
Incluido por compatibilidad con ISO.Included for ISO compliance. No cambia el comportamiento de ALL.Does not change the behavior of ALL.

permissionpermission
Es el nombre de un permiso.Is the name of a permission. Las asignaciones de permisos válidas a elementos protegibles se describen en los subtemas que se muestran a continuación.The valid mappings of permissions to securables are described in the subtopics listed below.

columncolumn
Especifica el nombre de una columna de una tabla en la que se van a conceder los permisos.Specifies the name of a column in a table on which permissions are being granted. Los paréntesis () son obligatorios.The parentheses () are required.

classclass
Especifica la clase del elemento protegible en el que se va a conceder el permiso.Specifies the class of the securable on which the permission is being granted. El calificador de ámbito :: es obligatorio.The scope qualifier :: is required.

securablesecurable
Especifica el elemento protegible para el que se va a conceder el permiso.Specifies the securable on which the permission is being granted.

TO principalTO principal
Es el nombre de una entidad de seguridad.Is the name of a principal. Las entidades de seguridad a las que se pueden conceder permisos para un elemento protegible varían según el elemento protegible.The principals to which permissions on a securable can be granted vary, depending on the securable. Vea los subtemas enumerados a continuación para comprobar las combinaciones válidas.See the subtopics listed below for valid combinations.

GRANT OPTIONGRANT OPTION
Indica que el receptor también podrá conceder el permiso especificado a otras entidades de seguridad.Indicates that the grantee will also be given the ability to grant the specified permission to other principals.

AS principalAS 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.Use the AS principal clause to indicate that the principal recorded as the grantor of the permission should be a principal other than the person executing the statement. Por ejemplo, suponga que la usuaria María tiene el principal_id 12 y el usuario Raúl tiene el principal_id 15.For example, presume that user Mary is principal_id 12 and user Raul is principal 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).Mary executes GRANT SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul; Now the sys.database_permissions table will indicate that the grantor_prinicpal_id was 15 (Raul) even though the statement was actually executed by user 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.Using the AS clause is typically not recommended unless you need to explicitly define the permission chain. Para más información, vea la sección Resumen del algoritmo de comprobación de permiso de Permisos (motor de base de datos).For more information, see the Summary of the Permission Check Algorithm section of Permissions (Database Engine).

El uso de AS en esta instrucción no implica la capacidad de suplantar a otro usuario.The use of AS in this statement does not imply the ability to impersonate another user.

ObservacionesRemarks

La sintaxis completa de la instrucción GRANT es compleja.The full syntax of the GRANT statement is complex. El diagrama de sintaxis anterior se ha simplificado para concentrar la atención en su estructura.The syntax diagram above was simplified to draw attention to its structure. La sintaxis completa para conceder permisos para elementos protegibles específicos se describe en los artículos enumerados a continuación.Complete syntax for granting permissions on specific securables is described in the articles listed below.

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.The REVOKE statement can be used to remove granted permissions, and the DENY statement can be used to prevent a principal from gaining a specific permission through a GRANT.

La concesión de un permiso quita DENY o REVOKE de ese permiso para el elemento protegible especificado.Granting a permission removes DENY or REVOKE of that permission on the specified securable. Si se deniega el mismo permiso en un ámbito superior que contiene el elemento protegible, DENY tiene prioridad.If the same permission is denied at a higher scope that contains the securable, the DENY takes precedence. No obstante, revocar el permiso concedido en un ámbito superior no tiene prioridad.But revoking the granted permission at a higher scope does not take precedence.

Los permisos de nivel de base de datos se conceden en el ámbito de la base de datos especificada.Database-level permissions are granted within the scope of the specified database. 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.If a user needs permissions to objects in another database, create the user account in the other database, or grant the user account access to the other database, as well as the current database.

Precaución

Un permiso DENY de nivel de tabla no tiene prioridad sobre uno GRANT de nivel de columna.A table-level DENY does not take precedence over a column-level GRANT. Esta incoherencia en la jerarquía de permisos se ha mantenido por motivos de compatibilidad con versiones anteriores.This inconsistency in the permissions hierarchy has been preserved for the sake of backward compatibility. Se eliminará en una próxima versión.It will be removed in a future release.

El procedimiento almacenado del sistema sp_helprotect informa de los permisos sobre un elemento protegible en el nivel de base de datos.The sp_helprotect system stored procedure reports permissions on a database-level securable.

WITH GRANT OPTIONWITH 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.The GRANT ... WITH GRANT OPTION specifies that the security principal receiving the permission is given the ability to grant the specified permission to other security accounts. 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.When the principal that receives the permission is a role or a Windows group, the AS clause must be used when the object permission needs to be further granted to users who are not members of the group or role. 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.Because only a user, rather than a group or role, can execute a GRANT statement, a specific member of the group or role must use the AS clause to explicitly invoke the role or group membership when granting the permission. En el siguiente ejemplo se muestra cómo se usa WITH GRANT OPTION cuando se concede permiso a un rol o grupo de Windows.The following example shows how the WITH GRANT OPTION is used when granted to a role or Windows group.

-- 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 ServerChart of SQL Server Permissions

Para ver un gráfico de tamaño cartel de todos los permisos del Motor de base de datosDatabase Engine en formato PDF, vea https://aka.ms/sql-permissions-poster.For a poster sized chart of all Motor de base de datosDatabase Engine permissions in pdf format, see https://aka.ms/sql-permissions-poster.

PermisosPermissions

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.The grantor (or the principal specified with the AS option) must have either the permission itself with GRANT OPTION, or a higher permission that implies the permission being granted. Si se utiliza la opción AS, se aplican requisitos adicionales.If using the AS option, additional requirements apply. Para obtener más detalles, vea el artículo específico de los elementos protegibles.See the securable-specific article for details.

Los propietarios de objetos pueden conceder permisos para los objetos que poseen.Object owners can grant permissions on the objects they own. Las entidades de seguridad con permiso CONTROL sobre un elemento protegible pueden conceder permisos para ese elemento.Principals with CONTROL permission on a securable can grant permission on that securable.

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.Grantees of CONTROL SERVER permission, such as members of the sysadmin fixed server role, can grant any permission on any securable in the server. 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.Grantees of CONTROL permission on a database, such as members of the db_owner fixed database role, can grant any permission on any securable in the database. Los receptores del permiso CONTROL en un esquema pueden conceder los permisos en cualquier objeto del esquema.Grantees of CONTROL permission on a schema can grant any permission on any object within the schema.

EjemplosExamples

En esta tabla se enumeran los elementos protegibles y los artículos en los que se describe la sintaxis específica de estos.The following table lists the securables and the articles that describe the securable-specific syntax.

Rol de aplicaciónApplication Role GRANT (permisos de entidad de seguridad de base de datos de Transact-SQL)GRANT Database Principal Permissions (Transact-SQL)
AssemblyAssembly GRANT (permisos de ensamblado de Transact-SQL)GRANT Assembly Permissions (Transact-SQL)
Clave asimétricaAsymmetric Key GRANT (permisos de clave asimétrica de Transact-SQL)GRANT Asymmetric Key Permissions (Transact-SQL)
Grupo de disponibilidadAvailability Group GRANT (permisos de grupos de disponibilidad de Transact-SQL)GRANT Availability Group Permissions (Transact-SQL)
CertificadoCertificate GRANT (permisos de certificado de Transact-SQL)GRANT Certificate Permissions (Transact-SQL)
ContratoContract GRANT (permisos de Service Broker de Transact-SQL)GRANT Service Broker Permissions (Transact-SQL)
Base de datosDatabase GRANT (permisos de base de datos de Transact-SQL)GRANT Database Permissions (Transact-SQL)
Credencial de ámbito de base de datosDatabase Scoped Credential GRANT (credencial de ámbito de base de datos de Transact-SQL)GRANT Database Scoped Credential (Transact-SQL)
Punto de conexiónEndpoint GRANT (permisos de punto de conexión de Transact-SQL)GRANT Endpoint Permissions (Transact-SQL)
Catálogo de texto completoFull-Text Catalog GRANT (permisos de texto completo de Transact-SQL)GRANT Full-Text Permissions (Transact-SQL)
Lista de palabras irrelevantes de texto completoFull-Text Stoplist GRANT (permisos de texto completo de Transact-SQL)GRANT Full-Text Permissions (Transact-SQL)
FunciónFunction Permisos de objeto GRANT (Transact-SQL)GRANT Object Permissions (Transact-SQL)
Inicio de sesiónLogin GRANT (permisos de entidad de seguridad de servidor de Transact-SQL)GRANT Server Principal Permissions (Transact-SQL)
Tipo de mensajeMessage Type GRANT (permisos de Service Broker de Transact-SQL)GRANT Service Broker Permissions (Transact-SQL)
ObjectObject Permisos de objeto GRANT (Transact-SQL)GRANT Object Permissions (Transact-SQL)
ColaQueue Permisos de objeto GRANT (Transact-SQL)GRANT Object Permissions (Transact-SQL)
Enlace de servicio remotoRemote Service Binding GRANT (permisos de Service Broker de Transact-SQL)GRANT Service Broker Permissions (Transact-SQL)
RoleRole GRANT (permisos de entidad de seguridad de base de datos de Transact-SQL)GRANT Database Principal Permissions (Transact-SQL)
EnrutarRoute GRANT (permisos de Service Broker de Transact-SQL)GRANT Service Broker Permissions (Transact-SQL)
SchemaSchema GRANT (permisos de esquema de Transact-SQL)GRANT Schema Permissions (Transact-SQL)
Lista de propiedades de búsquedaSearch Property List GRANT (permisos de lista de propiedades de búsqueda de Transact-SQL)GRANT Search Property List Permissions (Transact-SQL)
ServerServer GRANT (permisos de servidor de Transact-SQL)GRANT Server Permissions (Transact-SQL)
ServicioService GRANT (permisos de Service Broker de Transact-SQL)GRANT Service Broker Permissions (Transact-SQL)
Procedimiento almacenadoStored Procedure Permisos de objeto GRANT (Transact-SQL)GRANT Object Permissions (Transact-SQL)
Clave simétricaSymmetric Key GRANT (permisos de clave simétrica de Transact-SQL)GRANT Symmetric Key Permissions (Transact-SQL)
Synonym (Sinónimo)Synonym Permisos de objeto GRANT (Transact-SQL)GRANT Object Permissions (Transact-SQL)
Objetos de sistemaSystem Objects Permisos de objeto de sistema GRANT (Transact-SQL)GRANT System Object Permissions (Transact-SQL)
TablaTable Permisos de objeto GRANT (Transact-SQL)GRANT Object Permissions (Transact-SQL)
TipoType GRANT (permisos de tipo de Transact-SQL)GRANT Type Permissions (Transact-SQL)
UsuarioUser GRANT (permisos de entidad de seguridad de base de datos de Transact-SQL)GRANT Database Principal Permissions (Transact-SQL)
VerView Permisos de objeto GRANT (Transact-SQL)GRANT Object Permissions (Transact-SQL)
Colección de esquemas XMLXML Schema Collection GRANT (permisos de colección de esquemas XML de Transact-SQL)GRANT XML Schema Collection Permissions (Transact-SQL)

Consulte tambiénSee Also

DENY (Transact-SQL) DENY (Transact-SQL)
REVOKE (Transact-SQL) REVOKE (Transact-SQL)
sp_addlogin (Transact-SQL) sp_addlogin (Transact-SQL)
sp_adduser (Transact-SQL) sp_adduser (Transact-SQL)
sp_changedbowner (Transact-SQL) sp_changedbowner (Transact-SQL)
sp_dropuser (Transact-SQL) sp_dropuser (Transact-SQL)
sp_helprotect (Transact-SQL) sp_helprotect (Transact-SQL)
sp_helpuser (Transact-SQL)sp_helpuser (Transact-SQL)