Por vuestras respuestas deduzco que las autorizaciones sobre QADBXREF son 
correctas. Por lo tanto, deduzco que el autor del procedimiento almacenado lo 
probaría con un usuario que tendría, por lo menos, la autorización especial 
*ALLOBJ.

Echando un vistazo por "ahí" he visto que este archivo forma parte del catálogo 
de la BBDD y es posible que algunas de las vistas que tiene definidas me puedan 
servir. Voy a probar.

Gracias a todos,

Javier

De: [email protected] 
[mailto:[email protected]] En nombre de Javier Mora
Enviado el: viernes, 26 de agosto de 2016 10:59
Para: 'forum.help400'
Asunto: Error de ejecución en procedimiento almacenado GET_VIEW_DEPENDENTS

Hola a tod@s:

a ver si me podéis echar un cable.

He encontrado en IT Jungle un procedimiento almacenado que podría ser útil 
(para todos). Es algo parecido a un DSPDBR pero es capaz de encontrar las 
vistas SQL que están en función de otras vistas y, así, recursivamente hasta el 
final.

Aquí está el código:

CREATE PROCEDURE
  QGPL.GET_VIEW_DEPENDENTS (
    IN DBNAME CHAR(10),
    IN DBLIBRARY CHAR(10)
  )
DYNAMIC RESULT SETS 1
LANGUAGE SQL
SPECIFIC
  GET_VIEW_DEPENDENTS
NOT DETERMINISTIC
READS SQL DATA
CALLED ON NULL INPUT
PROGRAM TYPE SUB
SET OPTION  ALWBLK = *ALLREAD, ALWCPYDTA = *OPTIMIZE,
    COMMIT = *NONE, CLOSQLCSR = *ENDMOD,
    DECRESULT = (31, 31, 00), DFTRDBCOL = *NONE,
    DYNDFTCOL = *NO, DYNUSRPRF = *USER, SRTSEQ = *HEX
BEGIN
  DECLARE C1 CURSOR FOR
  WITH RECURSIVE
    DEPENDENTS ( CALLLEVEL, DBFFIL, DBFLIB, DBFFDP, DBFLDP )
  AS (
    SELECT
      1 AS CALLLEVEL, DBFFIL, DBFLIB, DBFFDP DBFLDP
    FROM
      QADBFDEP
    WHERE
      DBFFIL = DBNAME AND DBFLIB = DBLIBRARY
    UNION ALL
    SELECT
      CALLLEVEL + 1 AS CALLLEVEL,
      PR.DBFFIL , PR.DBFLIB , PR.DBFFDP , PR.DBFLDP
    FROM
      DEPENDENTS PH
    INNER JOIN
      QADBFDEP PR ON ( PH.DBFFDP, PH.DBFLDP ) = ( PR.DBFFIL, PR.DBFLIB )
  )
  SELECT DISTINCT
    DBXLFI, DBXTXT, DBFFDP, DBFLDP
  FROM
    DEPENDENTS
  INNER JOIN
    QADBXREF ON ( DBFFDP, DBFLDP ) = ( DBXFIL, DBXLIB )
  ORDER BY
    DBFFDP, DBFLDP
  FOR READ ONLY;

  OPEN C1;

  SET RESULT SETS CURSOR C1;
END;

La he compilado como QSECOFR, aunque creo que no tiene nada que ver con el 
error que encuentro, en la biblioteca QGPL. Sin errores. Cuando la ejecuto como 
QSECOFR funciona sin problemas, pero cuando lo hago con mi usuario me aparece 
el siguiente error:

> CALL QGPL.GET_VIEW_DEPENDENTS ('ARTICU', 'TESTER')

Estado de SQL: 42501
Código de proveedor: -551
Mensaje: [SQL0551] No tiene autorización para el objeto QADBXREF de QSYS00144 
tipo *FILE. Causa . . . . . :   Se intentó una operación sobre el objeto 
QADBXREF en QSYS00144 de tipo *FILE.  Esta operación no puede realizarse sin la 
autorización necesaria. Recuperación . . . : Obtenga la autorización necesaria 
del responsable de seguridad, del propietario del objeto o de un usuario con 
autorización sobre la función QIBM_DB_SECADM. Si no tiene autorización sobre un 
archivo lógico, obtenga la autorización sobre los archivos de base del archivo 
lógico. Repita la operación.

El proceso ha finalizado porque la sentencia resaltada no se ha completado 
satisfactoriamente

El objeto QADBXREF de QSYS00144 tiene las siguientes autorizaciones:

                        Autoriz   -----------Objeto------------
Usuario     Grupo       objeto    Opr  Ges  Exist  Alterar  Ref
*PUBLIC                 USER DEF
QSYS                    *ALL       X    X     X       X      X

                         Autoriz   ------------Datos-------------
Usuario     Grupo       objeto    Lect  Adic  Actu  Supr  Ejecut
*PUBLIC                 USER DEF   X
 QSYS                    *ALL       X     X     X     X      X

Se aprecia que tengo autorización de lectura pero no la operativa, que permite 
utilizar el objeto. He intentado cambiar la autorización de *PUBLIC pero no me 
ha dejado el sistema porque el "trabajo de sistema" QDBX144XR lo tiene 
bloqueado.

Utilizo la versión 7.2 con el nievl de PTFs a junio de este año y tengo un 
entorno con *SYSBAS y una ASP independiente (la 144).

Me gustaría saber si algún alma caritativa puede comprobar qué autorizaciones 
tiene el objeto QSYS/QADBXREF *FILE tanto en versión 7.2 o en cualquier otra.

Un saludo y gracias,


Javier Mora
____________________________________________________
Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 © Publicaciones Help400, S.L.

Responder a