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.