es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Oracle SODA: colección creada en un esquema para que sea visible en otro esquema.

Tengo un esquema (dueñoesquema) que puede crear colecciones usando SODA api PL/SQL. Ahora quiero tener otro esquema (usuarioesquema) que pueda acceder a la colección creada por el dueñoesquema y poder insertar/leer/eliminar documentos: El usuarioesquema no debe ser el propietario de las colecciones y no debe tener ningún privilegio de CREAR (CREAR_TABLA, etc.).

El problema es que aunque el usuarioesquema tenga el rol SODAAPP, no puede ver las colecciones creadas por el dueñoesquema.
Ya he intentado otorgar SELECT sobre la tabla subyacente al usuario
esquema, pero no funciona (el usuarioesquema llama a openCollection, así que supongo que el otorgamiento debe ser sobre la colección, no la tabla). Veo que consultando la vista JSON$USERCOLLECTIONMETADATA el dueñoesquema ve las colecciones y el usuarioesquema tiene esta vista vacía. También intenté otorgar permisos sobre la tabla COLLECTIONMETADATA al usuarioesquema, pero sin suerte. Leí sobre colección mapeada, pero supone que el usuarioesquema ejecute el procedimiento createcollection, el cual necesita privilegios de CREAR_TABLA.

¿Es posible que un esquema pueda operar sobre colecciones creadas por otro esquema sin ser propietario y sin tener ningún privilegio como CREAR_TABLA?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible que un esquema opere sobre colecciones creadas por otro esquema sin poseerlo y sin tener privilegios como CREATE_TABLE. Una forma de lograr esto es otorgar el privilegio SELECT en la colección al esquema de usuario. Esto se puede hacer utilizando el siguiente comando:

    GRANT SELECT ON <esquema_propietario.nombre_colección> TO esquema_usuario;
    

    Otra forma es usar la cláusula ACCESSIBLE BY al crear la colección. Esto permite que varios esquemas accedan a la colección sin tener que otorgar privilegios explícitamente. Por ejemplo, el esquema_propietario puede crear la colección de la siguiente manera:

    BEGIN
      DBMS_SODA.create_collection(
        p_collection_name => 'mi_colección',
        p_schema => 'esquema_propietario',
        p_readable => TRUE,
        p_writable => TRUE,
        p_accessible => 'esquema_usuario'
      );
    END;
    /
    

    Esto crea una colección llamada “mi_colección” que puede ser accedida por el esquema_usuario sin necesidad de privilegios adicionales. La cláusula accessible también se puede utilizar para permitir el acceso a varios esquemas.

    En general, el uso de la cláusula ACCESSIBLE BY es una mejor opción, ya que proporciona una forma más segura de otorgar acceso a las colecciones.</esquema_propietario.nombre_colección>

Comments are closed.