Para revocar privilegios de tipo OBJECT que han sido otorgados con la opción GRANT OPTION en Oracle, puedes utilizar el comando REVOKE. La opción GRANT OPTION permite a un usuario que recibe un privilegio poder, a su vez, otorgar ese privilegio a otros usuarios. Cuando revocas un privilegio que fue otorgado con esta opción, el usuario pierde tanto el privilegio como la capacidad de otorgarlo a otros.

Sintaxis para Revocar Privilegios de Tipo OBJECT

La sintaxis básica para revocar un privilegio de objeto es:

REVOKE privilegio ON objeto FROM usuario;

Ejemplo de como revocar privilegios

Supongamos que tienes un usuario llamado nuevo_usuario al que se le otorgó el privilegio SELECT sobre una tabla llamada tabla_ejemplo, con la opción de GRANT OPTION. Para revocar este privilegio, seguirías estos pasos:

  1. Conectar a la base de datos: Asegúrate de conectarte como un usuario que tenga los permisos necesarios (por ejemplo, SYS o el propietario del objeto).
sqlplus / as sysdba

Revocar el privilegio:

REVOKE SELECT ON tabla_ejemplo FROM nuevo_usuario;

Efecto de la Revocación

  • Eliminación del Privilegio: Después de revocar SELECT de nuevo_usuario, este usuario ya no podrá seleccionar datos de tabla_ejemplo.
  • Eliminación de la Opción de Otorgar: También perderá la capacidad de otorgar el privilegio SELECT a otros usuarios.

Ejemplo

Otorgar el privilegio con GRANT OPTION:

    GRANT SELECT ON tabla_ejemplo TO nuevo_usuario WITH GRANT OPTION;

    Revocar el privilegio:

    REVOKE SELECT ON tabla_ejemplo FROM nuevo_usuario;

    Consideraciones

    • Siempre es buena práctica verificar qué privilegios tiene un usuario antes de revocarlos, para no afectar la funcionalidad necesaria. Puedes hacer esto consultando la vista USER_TAB_PRIVS o ALL_TAB_PRIVS.
    • Al revocar un privilegio, asegúrate de comunicar con otros usuarios que puedan haber estado utilizando ese privilegio a través del usuario al que se le revocó.
    • Cuando revocas privilegios de objetos en Oracle 19c (o en otras versiones de Oracle), es importante entender cómo funciona el efecto en cascada, especialmente si esos privilegios han sido otorgados con la opción GRANT OPTION.

    Aquí te explico cómo se comportan estos revocaciones y qué implicaciones pueden tener.

    Efecto en Cascada al Revocar Privilegios de Objetos

    1. Revocación Directa:
      • Cuando revocas un privilegio directamente de un usuario, dicho usuario pierde ese privilegio sobre el objeto específico.
      • Si el privilegio fue otorgado con GRANT OPTION, el usuario también pierde la capacidad de otorgar ese privilegio a otros usuarios.
    2. Implica Revocación de Privilegios Adicionales:
      • Si el usuario al que se le revoca un privilegio anteriormente otorgó ese privilegio a otros usuarios (debido a la opción GRANT OPTION), la revocación de privilegio no se aplica automáticamente a esos usuarios. Sin embargo, el usuario que recibió el privilegio a su vez seguirá teniendo acceso a ese objeto, pero ya no podrá tener la certeza de que ese privilegio se mantenga (en caso de que haya una cadena de otorgaciones).
      • Por ejemplo, si UsuarioA otorga SELECT en tabla_ejemplo a UsuarioB con GRANT OPTION, y luego UsuarioA pierde el privilegio (es revocado), UsuarioB todavía puede seguir utilizando SELECT en la tabla_ejemplo hasta que alguien le revoque el privilegio a UsuarioB.
    3. Revocaciones de Privilegios en Cascada:
      • No ocurre automáticamente: Si UsuarioA tiene derechos sobre el objeto y se los revoca, no se revocan automáticamente los derechos de cualquier usuario adicional que UsuarioA haya otorgado. Tendrás que revocar manualmente esos derechos adicionales si es necesario.

    Ejemplo

    Supongamos que tienes los siguientes usuarios y privilegios:

    1. UsuarioA otorga SELECT en tabla_ejemplo a UsuarioB con GRANT OPTION.
    2. UsuarioB otorga SELECT en tabla_ejemplo a UsuarioC con GRANT OPTION.

    Si luego decides revocar el privilegio de SELECT de UsuarioA:

    REVOKE SELECT ON tabla_ejemplo FROM UsuarioA;
    • Efectos:
      • UsuarioA no podrá seleccionar datos de tabla_ejemplo.
      • UsuarioB seguirá teniendo el privilegio SELECT sobre tabla_ejemplo.
      • UsuarioC también podrá seguir utilizando SELECT en tabla_ejemplo, porque los privilegios no se revocan automáticamente en cascada.

    Consideraciones

    • Gestión Manual de Privilegios: Como administrador de la base de datos, es crucial que tengas un control y registro de los privilegios que han sido otorgados, ya que revocar derechos de acceso a un usuario no garantiza que los usuarios «hijos» (que han recibido esos privilegios posteriormente) también los perderán.
    • Auditoría y Limpiado de Privilegios: Es aconsejable realizar auditorías periódicas de privilegios y revocar aquellos que ya no son necesarios, para asegurar la seguridad y la integridad de la base de datos.

    Deja un comentario

    Tendencias