tabla otorgada para desempeñar otro papel, pero el cuadro no se encuentra al seleccionar

Tengo un problema con la siguiente situación en Oracle DBMS.

Tengo una mesa de estudiantes ESTUDIO dentro MAIN schema, 1 usuario USUARIO y 2 funciones ROLE_RW y ROLE_RW_ANY.

GRANT SELECT, INSERT, UPDATE, DELETE ON MAIN.STUDENT TO ROLE_RW;

GRANT ROLE_RW TO ROLE_RW_ANY;

GRANT ROLE_RW_ANY TO USER_ADMIN;

Pero cuando USER_ADMIN ejecuta esta consulta:

SELECT * FROM MAIN.STUDENT;

Parece que la mesa no es accesible, dice table does not exist.

¿Tiene explicación y solución, por favor?

Muchas gracias.

Pregunta hecha hace 3 años, 4 meses, 29 días - Por codercentaur


2 Respuestas:

  • El error "table does not exist" al intentar acceder a la tabla MAIN.STUDENT puede ocurrir debido a que el usuario USER_ADMIN no tiene el permiso necesario para ver la tabla a través del rol asignado.

    Por lo general, cuando otorgamos permisos a un rol y luego asignamos ese rol a un usuario, es importante tener en cuenta que los permisos del rol no se aplicarán de inmediato a la sesión actual del usuario, especialmente si la sesión ya estaba abierta antes de asignar el rol.

    Para resolver este problema, puedes pedir a USER_ADMIN que cierre su sesión actual y vuelva a iniciar sesión para que los nuevos permisos del rol se apliquen correctamente. También puedes ejecutar el siguiente comando como usuario con privilegios suficientes para actualizar los roles:

    sql
    GRANT ROLE_RW_ANY TO USER_ADMIN;
    

    Además, asegúrate de que USER_ADMIN tiene permisos de conexión al esquema MAIN y que el objeto STUDENT existe en ese esquema.

    Espero que esta información te sea útil para solucionar el problema. ¡Déjame saber si necesitas más ayuda!

    Respondida el Dec 18, 2020 a las 21:06 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Explicación:

    El problema es que el usuario USER_ADMIN no tiene acceso directo a la tabla MAIN.STUDENT. El rol ROLE_RW_ANY solo otorga permisos sobre tablas en el esquema del usuario que otorga el rol, en este caso USUARIO.

    Solución:

    Existen dos soluciones para este problema:

    1. Otorgar acceso explícito a la tabla MAIN.STUDENT al usuario USER_ADMIN:

    sql
    GRANT SELECT, INSERT, UPDATE, DELETE ON MAIN.STUDENT TO USER_ADMIN;
    

    2. Crear un rol que tenga acceso directo a la tabla MAIN.STUDENT y otorgar ese rol al usuario USER_ADMIN:

    sql
    CREATE ROLE STUDENT_ACCESS;
    GRANT SELECT, INSERT, UPDATE, DELETE ON MAIN.STUDENT TO STUDENT_ACCESS;
    GRANT STUDENT_ACCESS TO USER_ADMIN;
    

    Una vez que se haya aplicado una de estas soluciones, el usuario USER_ADMIN podrá acceder a la tabla MAIN.STUDENT.

    Nota adicional:

    Es importante recordar que los permisos otorgados a través de roles son acumulativos. Esto significa que si un usuario tiene varios roles que otorgan permisos sobre el mismo objeto, el usuario tendrá todos los permisos otorgados por todos los roles.

    Respondida el Dec 18, 2020 a las 21:08 - por Gemini

    Votos positivos: 0 | Votos negativos: 0