sysibmadm.raise_application_error_2 и пакеты и разрешения пользователя - PullRequest
0 голосов
/ 25 февраля 2019

Мне нужно удалить имя входа моего предшественника из DB2 LUW V10.1 в Windows.Я был в состоянии удалить из всех, за исключением некоторых пакетов схемы SYSIBMADM, для которых он дает приведенную ниже ошибку.Это оператор с ошибкой:

REVOKE BIND, EXECUTE, CONTROL ON PACKAGE SYSIBMADM.P9054818 FROM USER JJOHN

ОШИБКА [42893] [IBM] [DB2 / NT64] SQL0478N Оператор не выполнен, поскольку существует одна или несколько зависимостей от целевого объекта.Тип целевого объекта: «ПАКЕТ».Имя объекта, который зависит от целевого объекта: "SYSIBMADM.RAISE_APPLICATION_ERROR_2".Тип объекта, который зависит от целевого объекта: «ПРОЦЕДУРА».

Я должен удалить имя входа для целей аудита.У кого-нибудь есть идеи или указываете мне правильное направление?

SET CURRENT SCHEMA = SYSIBM;

SET CURRENT PATH = SYSIBM,SYSFUN,SYSPROC,SYSIBMADM;

CREATE OR REPLACE PROCEDURE SYSIBMADM.RAISE_APPLICATION_ERROR (
    IN NUM  INTEGER,
    IN MSG  VARCHAR(2000),
    IN KEEPERRORSTACK   BOOLEAN )
  SPECIFIC RAISE_APPLICATION_ERROR_2
  LANGUAGE SQL
  NOT DETERMINISTIC
  EXTERNAL ACTION
  MODIFIES SQL DATA
  CALLED ON NULL INPUT
  INHERIT SPECIAL REGISTERS
  OLD SAVEPOINT LEVEL
BEGIN
     IF keeperrorstack IS NULL OR keeperrorstack = true THEN            
        CALL SYSIBMINTERNAL.SQLEML_RAISE_ERROR( -171, '3', 'RAISE_APPLICATION_ERROR', 'KEEPERRORSTACK' );
     END IF;
     CALL SYSIBMADM.RAISE_APPLICATION_ERROR( num, msg );
END;

GRANT EXECUTE ON SPECIFIC PROCEDURE SYSIBMADM.RAISE_APPLICATION_ERROR_2 TO PUBLIC WITH GRANT OPTION;

SET CURRENT SCHEMA = RGN;

1 Ответ

0 голосов
/ 26 февраля 2019

Ошибка информирует вас о том, что PROCEDURE SYSIBMADM.RAISE_APPLICATION_ERROR_2 зависит от этого пакета, и вы должны отозвать соответствующие привилегии именно из этой процедуры, а не из пакета.Таким образом, в вашем случае вы должны отозвать привилегию execute у этого пользователя в процедуре, возвращаемой следующим запросом (должен возвращать «SYSIBMADM». «RAISE_APPLICATION_ERROR_2»):

select '"'||routineschema||'"."'||specificname||'"'  
from syscat.routinedep 
where 
--routineschema='SYSIBMADM' and specificname='RAISE_APPLICATION_ERROR_2'
bschema='SYSIBMADM' and bname='P9054818'
and btype='K';
...