sysibmadm.raise_application_error_2以及程序包和用户权限

时间:2019-02-25 17:32:22

标签: windows db2 db2-luw

我必须从Windows上的DB2 LUW V10.1中删除我的前任的登录名。我能够从所有SYSIBMADM模式的软件包中删除,但它们给出了以下错误。这是错误的陈述:

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

错误[42893] [IBM] [DB2 / NT64] SQL0478N该语句失败,因为目标对象上存在一个或多个依赖项。目标对象类型:“包装”。取决于目标对象的对象的名称:“ SYSIBMADM.RAISE_APPLICATION_ERROR_2”。依赖于目标对象的对象类型:“ PROCEDURE”。

出于审核目的,我必须删除登录名。有没有人有任何想法或向我指出正确的方向?

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 :(得分:0)

该错误通知您,有一个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';