我必须从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;
答案 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';