GRANT – definir privilegios de acceso

Sinopsis

GRANT ALL[PRIVILEGES] 
    ON  [TABLE] table_name [,...]
    TO role_specification [,...][WITHGRANTOPTION]GRANT  INSERT ( column_name [,...])[,...]
    ON[TABLE] table_name [,...]TO role_specification [,...][WITHGRANTOPTION]GRANT ALL[PRIVILEGES] 
    ON ALL SEQUENCES INSCHEMA schema_name [,...] 
    TO role_specification [,...][WITHGRANTOPTION]GRANT ALL[PRIVILEGES] 
    ONDATABASE database_name [,...]TO role_specification [,...][WITHGRANTOPTION]GRANT  USAGE
    ON DOMAIN domain_name [,...]TO role_specification [,...][WITHGRANTOPTION]GRANT ALL[PRIVILEGES] 
    ONFOREIGNDATA WRAPPER fdw_name [,...]TO role_specification [,...][WITHGRANTOPTION]GRANT ALL[PRIVILEGES] 
    ONFOREIGN SERVER server_name [,...]TO role_specification [,...][WITHGRANTOPTION]GRANT  EXECUTE
    ON   FUNCTION routine_name [([[ argmode ][ arg_name ] arg_type [,...]])][,...]
    TO role_specification [,...][WITHGRANTOPTION]GRANT  USAGE
    ONLANGUAGE lang_name [,...]TO role_specification [,...][WITHGRANTOPTION]GRANT   SELECT [,...]
    ON LARGE OBJECT loid [,...]TO role_specification [,...][WITHGRANTOPTION]GRANT   CREATE [,...]
    ONSCHEMA schema_name [,...]TO role_specification [,...][WITHGRANTOPTION]GRANT ALL[PRIVILEGES] 
    ONTABLESPACE tablespace_name [,...]TO role_specification [,...][WITHGRANTOPTION]GRANT  USAGE
    ONTYPE type_name [,...]TO role_specification [,...][WITHGRANTOPTION]GRANT role_name [,...]TO role_specification [,...][WITH ADMIN OPTION][ GRANTED BY role_specification ]where role_specification can be:

    [GROUP] role_name
  |PUBLIC|CURRENT_USER|SESSION_USER

Descripción

los GRANT El comando tiene dos variantes básicas: una que otorga privilegios sobre un objeto de base de datos (tabla, columna, vista, tabla externa, secuencia, base de datos, contenedor de datos externos, servidor externo, función, procedimiento, lenguaje de procedimiento, esquema o espacio de tabla) y uno que otorga membresía en un rol. Estas variantes son similares en muchos aspectos, pero son lo suficientemente diferentes como para describirse por separado.

GRANT en objetos de base de datos

Esta variante del GRANT El comando otorga privilegios específicos sobre un objeto de base de datos a uno o más roles. Estos privilegios se suman a los ya otorgados, si los hubiera.

La palabra clave PUBLIC indica que los privilegios se otorgarán a todos los roles, incluidos los que podrían crearse posteriormente. PUBLIC se puede considerar como un grupo definido implícitamente que siempre incluye todos los roles. Cualquier rol en particular tendrá la suma de los privilegios otorgados directamente, los privilegios otorgados a cualquier rol del que sea miembro actualmente y los privilegios otorgados a PUBLIC.

Si WITH GRANT OPTION se especifica, el destinatario del privilegio puede a su vez otorgarlo a otros. Sin una opción de subvención, el destinatario no puede hacer eso. No se pueden otorgar opciones de subvención a PUBLIC.

No es necesario otorgar privilegios al propietario de un objeto (generalmente el usuario que lo creó), ya que el propietario tiene todos los privilegios de forma predeterminada. (Sin embargo, el propietario podría optar por revocar algunos de sus propios privilegios por motivos de seguridad).

El derecho a dejar caer un objeto, o alterar su definición de cualquier manera, no se trata como un privilegio otorgable; es inherente al propietario y no puede concederse ni revocarse. (Sin embargo, se puede obtener un efecto similar al otorgar o revocar la membresía en el rol que posee el objeto; ver más abajo). El propietario también tiene implícitamente todas las opciones de concesión para el objeto.

Los posibles privilegios son:

SELECTINSERTUPDATEDELETETRUNCATEREFERENCESTRIGGERCREATECONNECTTEMPORARYEXECUTEUSAGE

Tipos específicos de privilegios, como se define en la Sección 5.7.

TEMP

Ortografía alternativa para TEMPORARY.

ALL PRIVILEGES

Otorgue todos los privilegios disponibles para el tipo de objeto. los PRIVILEGES La palabra clave es opcional en PostgreSQL, aunque es requerida por SQL estricto.

los FUNCTION la sintaxis funciona para funciones simples, funciones agregadas y funciones de ventana, pero no para procedimientos; usar PROCEDURE para esos. Alternativamente, use ROUTINE para hacer referencia a una función, función agregada, función de ventana o procedimiento independientemente de su tipo preciso.

También existe una opción para otorgar privilegios sobre todos los objetos del mismo tipo dentro de uno o más esquemas. Actualmente, esta funcionalidad solo se admite para tablas, secuencias, funciones y procedimientos. ALL TABLES también afecta a las vistas y tablas externas, al igual que el objeto específico GRANT mando. ALL FUNCTIONS también afecta a las funciones agregadas y de ventana, pero no a los procedimientos, nuevamente al igual que el objeto específico GRANT mando. Usar ALL ROUTINES para incluir procedimientos.

GRANT en roles

Esta variante del GRANT El comando otorga membresía en un rol a uno o más roles. La pertenencia a un rol es importante porque transmite los privilegios otorgados a un rol a cada uno de sus miembros.

Si WITH ADMIN OPTION se especifica, el miembro puede, a su vez, otorgar membresía en el rol a otros y también revocar la membresía en el rol. Sin la opción de administrador, los usuarios normales no pueden hacer eso. No se considera que un rol cumpla WITH ADMIN OPTION sobre sí mismo, pero puede otorgar o revocar la membresía en sí mismo de una sesión de base de datos donde el usuario de la sesión coincide con el rol. Los superusuarios de bases de datos pueden otorgar o revocar la membresía en cualquier rol a cualquier persona. Roles que tienen CREATEROLE El privilegio puede otorgar o revocar la membresía en cualquier rol que no sea un superusuario.

Si GRANTED BY se especifica, la concesión se registra como realizada por el rol especificado. Solo los superusuarios de la base de datos pueden usar esta opción, excepto cuando nombra el mismo rol que ejecuta el comando.

A diferencia del caso de los privilegios, la membresía en un rol no se puede otorgar a PUBLIC. Tenga en cuenta también que esta forma del comando no permite la palabra irrelevante GROUP en role_specification.

Notas

El comando REVOKE se utiliza para revocar privilegios de acceso.

Desde PostgreSQL 8.1, los conceptos de usuarios y grupos se han unificado en un solo tipo de entidad llamada rol. Por tanto, ya no es necesario utilizar la palabra clave GROUP para identificar si un beneficiario es un usuario o un grupo. GROUP todavía está permitido en el comando, pero es una palabra irrelevante.

Un usuario puede realizar SELECT, INSERT, etc. en una columna si tienen ese privilegio para la columna específica o para toda la tabla. Otorgar el privilegio a nivel de tabla y luego revocarlo para una columna no hará lo que uno podría desear: la concesión a nivel de tabla no se ve afectada por una operación a nivel de columna.

Cuando un no propietario de un objeto intenta GRANT privilegios sobre el objeto, el comando fallará por completo si el usuario no tiene ningún privilegio sobre el objeto. Siempre que haya algún privilegio disponible, el comando continuará, pero otorgará solo aquellos privilegios para los cuales el usuario tiene opciones de otorgamiento. los GRANT ALL PRIVILEGES Los formularios emitirán un mensaje de advertencia si no se mantienen opciones de concesión, mientras que las otras formas emitirán una advertencia si no se mantienen las opciones de concesión para cualquiera de los privilegios específicamente nombrados en el comando. (En principio, estas declaraciones también se aplican al propietario del objeto, pero dado que el propietario siempre se considera que posee todas las opciones de concesión, los casos nunca pueden ocurrir).

Cabe señalar que los superusuarios de la base de datos pueden acceder a todos los objetos independientemente de la configuración de privilegios del objeto. Esto es comparable a los derechos de root en un sistema Unix. Al igual que con root, no es aconsejable operar como superusuario excepto cuando sea absolutamente necesario.

Si un superusuario elige emitir un GRANT o REVOKE comando, el comando se ejecuta como si hubiera sido emitido por el propietario del objeto afectado. En particular, los privilegios otorgados a través de dicho comando parecerán haber sido otorgados por el propietario del objeto. (En el caso de la pertenencia a una función, la pertenencia parece haber sido otorgada por la propia función contenedora).

GRANT y REVOKE también puede ser realizado por un rol que no es el propietario del objeto afectado, pero es un miembro del rol que posee el objeto, o es miembro de un rol que tiene privilegios WITH GRANT OPTION en el objeto. En este caso, los privilegios se registrarán como otorgados por el rol que realmente posee el objeto o tiene los privilegios. WITH GRANT OPTION. Por ejemplo, si la tabla t1 es propiedad del rol g1, de cual rol u1 es un miembro, entonces u1 puede otorgar privilegios en t1 para u2, pero esos privilegios parecerán haber sido otorgados directamente por g1. Cualquier otro miembro del rol g1 podría revocarlos más tarde.

Si el rol que se ejecuta GRANT tiene los privilegios requeridos indirectamente a través de más de una ruta de pertenencia a un rol, no se especifica qué rol contenedor se registrará como quien realizó la concesión. En tales casos, es una buena práctica utilizar SET ROLE para convertirse en el rol específico que desea realizar GRANT como.

Otorgar permiso en una mesa no amplía automáticamente los permisos a ninguna secuencia utilizada por la tabla, incluidas las secuencias vinculadas a SERIAL columnas. Los permisos de las secuencias deben establecerse por separado.

Consulte la Sección 5.7 para obtener más información sobre tipos de privilegios específicos, así como sobre cómo inspeccionar los privilegios de los objetos.

Ejemplos de

Otorgar privilegios de inserción a todos los usuarios en la mesa films:

GRANTINSERTON films TOPUBLIC;

Otorgue todos los privilegios disponibles al usuario manuel a la vista kinds:

GRANTALLPRIVILEGESON kinds TO manuel;

Tenga en cuenta que si bien lo anterior otorgará todos los privilegios si lo ejecuta un superusuario o el propietario de kinds, cuando lo ejecuta otra persona, solo concederá los permisos para los que la otra persona tiene opciones de concesión.

Otorgar membresía en el rol admins al usuario joe:

GRANT admins TO joe;

Compatibilidad

Según el estándar SQL, el PRIVILEGES palabra clave en ALL PRIVILEGES es requerido. El estándar SQL no admite la configuración de privilegios en más de un objeto por comando.

PostgreSQL permite al propietario de un objeto revocar sus propios privilegios ordinarios: por ejemplo, el propietario de una tabla puede hacer que la tabla sea de solo lectura para ellos mismos revocando los suyos propios. INSERT, UPDATE, DELETE, y TRUNCATE privilegios. Esto no es posible según el estándar SQL. La razón es que PostgreSQL trata los privilegios del propietario como si los hubiera otorgado el propietario; por lo tanto, también pueden revocarlos. En el estándar SQL, los privilegios del propietario son otorgados por una entidad asumida _SISTEMA. No ser _SISTEMA, el propietario no puede revocar estos derechos.

De acuerdo con el estándar SQL, se pueden otorgar opciones de concesión a PUBLIC; PostgreSQL solo admite otorgar opciones de concesión a roles.

El estándar SQL permite GRANTED BY opción para ser utilizado en todas las formas de GRANT. PostgreSQL solo lo admite al otorgar membresía de roles, e incluso entonces solo los superusuarios pueden usarlo de maneras no triviales.

El estándar SQL proporciona una USAGE privilegio sobre otros tipos de objetos: juegos de caracteres, colaciones, traducciones.

En el estándar SQL, las secuencias solo tienen un USAGE privilegio, que controla el uso del NEXT VALUE FOR expresión, que es equivalente a la función nextval en PostgreSQL. Los privilegios de la secuencia SELECT y UPDATE son extensiones de PostgreSQL. La aplicación de la secuencia USAGE privilegio para el currval La función también es una extensión de PostgreSQL (al igual que la función en sí).

Los privilegios en bases de datos, espacios de tabla, esquemas e idiomas son extensiones de PostgreSQL.

Ver también

REVOCAR, ALTERAR PRIVILEGIOS POR DEFECTO

Anterior Hasta próximo
IR A BUSCAR Hogar ESQUEMA EXTRANJERO DE IMPORTACIÓN