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, 5 meses, 5 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 usuarioUSER_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 esquemaMAIN
y que el objetoSTUDENT
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 tablaMAIN.STUDENT
. El rolROLE_RW_ANY
solo otorga permisos sobre tablas en el esquema del usuario que otorga el rol, en este casoUSUARIO
.Solución:
Existen dos soluciones para este problema:
1. Otorgar acceso explícito a la tabla
MAIN.STUDENT
al usuarioUSER_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 usuarioUSER_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 tablaMAIN.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