ALTER DEFAULT PRIVILEGES

ALTER DEFAULT PRIVILEGES — definir privilegios de acceso predeterminados

Synopsis

ALTER DEFAULT PRIVILEGES
    [ FOR { ROLE | USER } target_role [, ...] ]
    [ IN SCHEMA schema_name [, ...] ]
    abbreviated_grant_or_revoke

donde abbreviated_grant_or_revoke es uno de los siguientes:

GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN }
    [, ...] | ALL [ PRIVILEGES ] }
    ON TABLES
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { { USAGE | SELECT | UPDATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON SEQUENCES
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON { FUNCTIONS | ROUTINES }
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { USAGE | ALL [ PRIVILEGES ] }
    ON TYPES
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { { USAGE | CREATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON SCHEMAS
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { { SELECT | UPDATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON LARGE OBJECTS
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN }
    [, ...] | ALL [ PRIVILEGES ] }
    ON TABLES
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { USAGE | SELECT | UPDATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON SEQUENCES
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { EXECUTE | ALL [ PRIVILEGES ] }
    ON { FUNCTIONS | ROUTINES }
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON TYPES
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { USAGE | CREATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON SCHEMAS
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | UPDATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON LARGE OBJECTS
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

Descripción

ALTER DEFAULT PRIVILEGES te permite definir los privilegios que se aplicarán a los objetos creados en el futuro. (No afecta a los privilegios asignados a los objetos ya existentes). Los privilegios se pueden definir de forma global (es decir, para todos los objetos creados en la base de datos actual), o solo para los objetos creados en esquemas específicos.

Aunque puedes cambiar tus propios privilegios predeterminados y los valores predeterminados de los roles de los que eres miembro, al momento de la creación de un objeto, los nuevos permisos del objeto solo se ven afectados por los privilegios predeterminados del rol actual, y no se heredan de los roles de los cuales el rol actual es miembro.

Como se explica en la Section 5.8, los privilegios predeterminados para cualquier tipo de objeto normalmente otorgan todos los permisos asignables al propietario del objeto, y también pueden otorgar algunos privilegios a PUBLIC. Sin embargo, este comportamiento se puede modificar alterando los privilegios predeterminados globales con ALTER DEFAULT PRIVILEGES.

Actualmente, solo se pueden modificar los privilegios para esquemas, tablas (incluidas vistas y tablas foráneas), secuencias, funciones, tipos (incluidos dominios) y objetos grandes (large objects). Para este comando, las funciones incluyen agregados y procedimientos. Las palabras FUNCTIONS y ROUTINES son equivalentes en este comando. (Se prefiere ROUTINES en el futuro como el término estándar para referirse a funciones y procedimientos conjuntamente. En versiones anteriores de PostgreSQL, solo se permitía la palabra FUNCTIONS. No es posible establecer privilegios predeterminados para funciones y procedimientos por separado).

Los privilegios predeterminados que se especifican por esquema se agregan a los privilegios predeterminados globales para el tipo de objeto en particular. Esto significa que no puedes revocar privilegios por esquema si se otorgan globalmente (ya sea por defecto, o de acuerdo con un comando ALTER DEFAULT PRIVILEGES anterior que no especificó un esquema). Un REVOKE por esquema solo es útil para revertir los efectos de un GRANT previo por esquema.

Parámetros

target_role

Cambia los privilegios predeterminados para los objetos creados por el target_role, o por el rol actual si no se especifica.

schema_name

El nombre de un esquema existente. Si se especifica, se modifican los privilegios predeterminados para los objetos creados posteriormente en ese esquema. Si se omite IN SCHEMA, se modifican los privilegios predeterminados globales. No se permite IN SCHEMA al establecer privilegios para esquemas y objetos grandes, ya que los esquemas no se pueden anidar y los objetos grandes no pertenecen a un esquema.

role_name

El nombre de un rol existente al que se le otorgan o revocan privilegios. Este parámetro, y todos los demás parámetros en abbreviated_grant_or_revoke, actúan como se describe en GRANT o REVOKE, excepto que se están definiendo permisos para una clase completa de objetos en lugar de objetos específicos nombrados.

Notas

Usa el comando \ddp de psql para obtener información sobre las asignaciones existentes de privilegios predeterminados. El significado de la visualización de privilegios es el mismo que se explica para \dp en la Section 5.8.

Si deseas eliminar un rol para el cual se han modificado los privilegios predeterminados, es necesario revertir los cambios en sus privilegios predeterminados o usar DROP OWNED BY para deshacerse de la entrada de privilegios predeterminados del rol.

Ejemplos

Otorgar el privilegio SELECT a todos para todas las tablas (y vistas) que crees posteriormente en el esquema myschema, y permitir que el rol webuser también realice INSERT en ellas:

ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT SELECT ON TABLES TO PUBLIC;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT INSERT ON TABLES TO webuser;

Deshacer lo anterior, de modo que las tablas creadas posteriormente no tengan más permisos de los normales:

ALTER DEFAULT PRIVILEGES IN SCHEMA myschema REVOKE SELECT ON TABLES FROM PUBLIC;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema REVOKE INSERT ON TABLES FROM webuser;

Eliminar el permiso público EXECUTE que normalmente se otorga sobre las funciones, para todas las funciones creadas posteriormente por el rol admin:

ALTER DEFAULT PRIVILEGES FOR ROLE admin REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;

Ten en cuenta, sin embargo, que no puedes lograr ese efecto con un comando limitado a un solo esquema. Este comando no tiene efecto, a menos que esté deshaciendo un GRANT correspondiente:

ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;

Esto se debe a que los privilegios predeterminados por esquema solo pueden agregar privilegios a la configuración global, no eliminar privilegios otorgados por ella.

Compatibilidad

No existe la sentencia ALTER DEFAULT PRIVILEGES en el estándar SQL.

Véase también

GRANT, REVOKE