REVOKE

REVOKE — elimina privilegios de acceso

Synopsis

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN }
    [, ...] | ALL [ PRIVILEGES ] }
    ON { [ TABLE ] table_name [, ...]
         | ALL TABLES IN SCHEMA schema_name [, ...] }
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] )
    [, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) }
    ON [ TABLE ] table_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { USAGE | SELECT | UPDATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON { SEQUENCE sequence_name [, ...]
         | ALL SEQUENCES IN SCHEMA schema_name [, ...] }
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
    ON DATABASE database_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON DOMAIN domain_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON FOREIGN DATA WRAPPER fdw_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON FOREIGN SERVER server_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { EXECUTE | ALL [ PRIVILEGES ] }
    ON { { FUNCTION | PROCEDURE | ROUTINE } function_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...]
         | ALL { FUNCTIONS | PROCEDURES | ROUTINES } IN SCHEMA schema_name [, ...] }
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON LANGUAGE lang_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] }
    ON LARGE OBJECT loid [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { SET | ALTER SYSTEM } [, ...] | ALL [ PRIVILEGES ] }
    ON PARAMETER configuration_parameter [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }
    ON SCHEMA schema_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { CREATE | ALL [ PRIVILEGES ] }
    ON TABLESPACE tablespace_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON TYPE type_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ { ADMIN | INHERIT | SET } OPTION FOR ]
    role_name [, ...] FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

donde role_specification puede ser:

    [ GROUP ] role_name
  | PUBLIC
  | CURRENT_ROLE
  | CURRENT_USER
  | SESSION_USER

Descripción

El comando REVOKE revoca privilegios previamente otorgados a uno o más roles. La palabra clave PUBLIC se refiere al grupo definido implícitamente de todos los roles.

Consulta la descripción del comando GRANT para conocer el significado de los tipos de privilegios.

Ten en cuenta que cualquier rol particular tendrá la suma de los privilegios otorgados directamente a él, los privilegios otorgados a cualquier rol del que sea miembro actualmente y los privilegios otorgados a PUBLIC. Así, por ejemplo, revocar el privilegio SELECT de PUBLIC no significa necesariamente que todos los roles hayan perdido el privilegio SELECT sobre el objeto: aquellos a quienes se les otorgó directamente o a través de otro rol aún lo tendrán. De manera similar, revocar SELECT a un usuario podría no impedir que ese usuario use SELECT si PUBLIC u otro rol de membresía aún tiene derechos de SELECT.

Si se especifica GRANT OPTION FOR, solo se revoca la opción de otorgar (grant option) para el privilegio, no el privilegio en sí. De lo contrario, se revocan tanto el privilegio como la opción de otorgar.

Si un usuario posee un privilegio con la opción de otorgar y lo ha otorgado a otros usuarios, entonces los privilegios que poseen esos otros usuarios se denominan privilegios dependientes. Si se está revocando el privilegio o la opción de otorgar que posee el primer usuario y existen privilegios dependientes, esos privilegios dependientes también se revocan si se especifica CASCADE; si no se especifica, la acción de revocación fallará. Esta revocación recursiva solo afecta a los privilegios que se otorgaron a través de una cadena de usuarios que se pueda rastrear hasta el usuario que es el sujeto de este comando REVOKE. Por lo tanto, los usuarios afectados podrían mantener efectivamente el privilegio si también les fue otorgado a través de otros usuarios.

Al revocar privilegios sobre una tabla, los privilegios de columna correspondientes (si los hay) también se revocan automáticamente en cada columna de la tabla. Por otro lado, si a un rol se le han otorgado privilegios sobre una tabla, revocar los mismos privilegios de columnas individuales no tendrá ningún efecto.

Al revocar la membresía en un rol, GRANT OPTION se llama en su lugar ADMIN OPTION, pero el comportamiento es similar. Ten en cuenta que, en versiones anteriores a PostgreSQL 16, no se realizaba el seguimiento de los privilegios dependientes para los otorgamientos de membresía de rol, por lo que CASCADE no tenía efecto para la membresía de rol. Este ya no es el caso. Ten en cuenta también que esta forma del comando no permite la palabra de adorno GROUP en role_specification.

Al igual que ADMIN OPTION se puede eliminar de una concesión de rol existente, también es posible revocar INHERIT OPTION o SET OPTION. Esto es equivalente a establecer el valor de la opción correspondiente a FALSE.

Notas

Un usuario solo puede revocar los privilegios que fueron otorgados directamente por ese usuario. Si, por ejemplo, el usuario A ha otorgado un privilegio con la opción de otorgar al usuario B, y el usuario B a su vez se lo ha otorgado al usuario C, entonces el usuario A no puede revocar el privilegio directamente a C. En su lugar, el usuario A podría revocar la opción de otorgar al usuario B y usar la opción CASCADE para que el privilegio sea a su vez revocado al usuario C. Para otro ejemplo, si tanto A como B han otorgado el mismo privilegio a C, A puede revocar su propio otorgamiento pero no el de B, por lo que C seguirá teniendo efectivamente el privilegio.

Cuando alguien que no es propietario de un objeto intenta ejecutar REVOKE sobre los privilegios del objeto, el comando fallará por completo si el usuario no tiene ningún privilegio sobre el objeto. Mientras haya algún privilegio disponible, el comando procederá, pero revocará solo aquellos privilegios para los cuales el usuario tiene opciones de otorgar. Las formas de REVOKE ALL PRIVILEGES emitirán un mensaje de advertencia si no se poseen opciones de otorgar, mientras que las otras formas emitirán una advertencia si no se poseen opciones de otorgar para cualquiera de los privilegios nombrados específicamente 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 otorgar, estos casos nunca pueden ocurrir).

Si un superusuario decide emitir un comando GRANT o REVOKE, el comando se realiza como si fuera emitido por el propietario del objeto afectado. (Dado que los roles no tienen propietarios, en el caso de un GRANT de membresía de rol, el comando se realiza como si fuera emitido por el superusuario inicial o bootstrap). Dado que todos los privilegios provienen en última instancia del propietario del objeto (posiblemente de forma indirecta a través de cadenas de opciones de otorgar), es posible que un superusuario revoque todos los privilegios, pero esto podría requerir el uso de CASCADE como se indicó anteriormente.

REVOKE también puede ser realizado por un rol que no sea el propietario del objeto afectado, pero que sea miembro del rol propietario del objeto, o miembro de un rol que posea privilegios WITH GRANT OPTION sobre el objeto. En este caso, el comando se ejecuta como si fuera emitido por el rol contenedor que realmente es dueño del objeto o que posee los privilegios WITH GRANT OPTION. Por ejemplo, si la tabla t1 es propiedad del rol g1, del cual el rol u1 es miembro, entonces u1 puede revocar privilegios sobre t1 que estén registrados como otorgados por g1. Esto incluiría los otorgamientos hechos por u1 así como por otros miembros del rol g1.

Si el rol que ejecuta REVOKE posee privilegios indirectamente a través de más de una ruta de membresía de rol, no se especifica qué rol contenedor se utilizará para ejecutar el comando. En tales casos, la mejor práctica es usar SET ROLE para convertirse en el rol específico con el que deseas hacer el REVOKE. No hacerlo podría llevar a revocar privilegios distintos a los que tenías previsto, o a no revocar nada en absoluto.

Consulta Section 5.8 para obtener más información sobre los tipos de privilegios específicos, así como sobre cómo inspeccionar los privilegios de los objetos.

Ejemplos

Revoca el privilegio de inserción para el público en la tabla films:

REVOKE INSERT ON films FROM PUBLIC;

Revoca todos los privilegios del usuario manuel en la vista kinds:

REVOKE ALL PRIVILEGES ON kinds FROM manuel;

Ten en cuenta que esto realmente significa revocar todos los privilegios que yo otorgué.

Revoca la membresía en el rol admins del usuario joe:

REVOKE admins FROM joe;

Compatibilidad

Las notas de compatibilidad del comando GRANT se aplican de manera análoga a REVOKE. Las palabras clave RESTRICT o CASCADE son requeridas según el estándar, pero PostgreSQL asume RESTRICT por defecto.

Consulte también

GRANT, ALTER DEFAULT PRIVILEGES