DB2对数据库进行全库搜索

客户要求对整个数据库进行搜索,找出敏感字。在网上搜索很久都没有好的解决办法,只好自己写存储过程来处理了。

边学边写可能还有地方不完善的。

--记录查找结果
delete table CHECK_RESULT;
create table CHECK_RESULT
(
  check_result_id INTEGER,
  system_name     VARCHAR(40),
  table_name      VARCHAR(40),
  pk_name         VARCHAR(40),
  pk_value        VARCHAR(40),
  column_name     VARCHAR(40),
  column_value    VARCHAR(4000),
  keyword         VARCHAR(100)
);

--要查找的关键字
delete table CHECK_WORD
create table CHECK_WORD
(
  word_id    INTEGER,
  word_type  VARCHAR(40),
  word_value VARCHAR(100)
);

DROP PROCEDURE Sensitive_key;
CREATE PROCEDURE Sensitive_key()
LANGUAGE SQL
BEGIN
   DECLARE SQL VARCHAR(5000);

   FOR TN AS C1 CURSOR FOR select table_name from SYSIBM.TABLES WHERE TABLE_SCHEMA='模式名' AND TABLE_TYPE='BASE TABLE'--找出所有表名
   DO
   BEGIN
    FOR COL AS C2 CURSOR FOR SELECT NAME,(SELECT NAME FROM SYSIBM.SYSCOLUMNS where TBNAME=TN.TABLE_NAME AND KEYSEQ=1)ID FROM SYSIBM.SYSCOLUMNS where TBNAME=TN.TABLE_NAME--找出所有列名,以及主键列。由于库里只有主键有序列,所以用这个条件选择主键。
    DO
    BEGIN
      FOR K AS C3 CURSOR FOR SELECT WORD_VALUE FROM CHECK_WORD  --记录了要关键字的表
      DO
      BEGIN
        SET SQL='INSERT INTO CHECK_RESULT(CHECK_RESULT_ID,TABLE_NAME,KEYWORD,column_name,COLUMN_VALUE) SELECT '|| COL.ID ||','''|| TN.TABLE_NAME ||''','''|| K.WORD_VALUE ||''','''|| CHAR(COL.NAME) ||''',CHAR('|| COL.NAME ||') FROM '|| TN.TABLE_NAME || ' WHERE CHAR('|| COL.NAME ||')LIKE ''%'|| K.WORD_VALUE ||'%'''||'';
        IF SQL <> '' THEN 
        PREPARE st FROM SQL;
        EXECUTE st;
        end if;
      END;
      END FOR;
    END;
    END FOR;
   END;
   END FOR;
END;

CALL CMBBCD.Sensitive_key();


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值