ITPub博客

首页 > 数据库 > Oracle > 查询数据库中的敏感数据

查询数据库中的敏感数据

原创 Oracle 作者:oracle11111 时间:2024-11-28 11:13:56 0 删除 编辑



客户有个需求,查询数据库中所有包含内部、内部资料、秘密、机密、保密、密、等等。。

等字段的表和字段。



创建如下存储过程,查询当前用户(查open状态的生产用户即可sys和system之类的系统用户没有必要, 查询语句 select username,account_status  from dba_users where account_status= 'OPEN';) 下有哪些表,遍历这些表的所有字符类型的列,查出每个列的值对比有没有和我们输入的敏感字段相符的,有的话记录表明和列名到 tmptable_zyr。
1 创建结果存储表 create table tmptable_zyr (tab_name varchar2( 300) , col_name varchar2( 300));
2 创建存储过程 CREATE OR REPLACE procedure QUERY_KEY ( keyword in varchar2 ) as  v_SQLStatement varchar2( 4000);   v_startRecord Number; begin  FOR reInfo IN ( select table_name from user_tables) LOOP    FOR colInfo IN (SELECT column_name, DATA_TYPE                      FROM user_tab_cols                     WHERE table_name = reInfo.table_name) LOOP      IF (colInfo.DATA_TYPE like   '%CHAR%'  ) THEN            v_SQLStatement := 'select count(*) from ' || reInfo.table_name ||                           ' where ' || colInfo.column_name || ' like ' '%'||                          keyword|| '%' '';         execute immediate v_SQLStatement          into v_startRecord;               IF (v_startRecord > 0) THEN                  insert into tmptable_zyr values (reInfo.table_name,colInfo.column_name);                  commit;                 END IF;             END IF;     END LOOP;   END LOOP; END QUERY_KEY;
3 执行存储过程 call QUERY_KEY( '保密');
4 查询是否有敏感数据 select * from tmptable_zyr;
col TAB_NAME format a30 col COL_NAME format a30 select * from tmptable_zyr;






**************************以下是本机测试情况**********************************************
测试样例:
创建测试表 create table ttt (name varchar2( 30));
插入数据 insert into ttt values( '保密'); commit;
确认数据 select * from ttt;
进行敏感查询
call QUERY_KEY( '保密'); 查询是否查出敏感数据 select * from tmptable_zyr;
1   TTT  NAME 可以看到查出了TTT表的name 列。







有问题可以用下面的调试 加上了         DBMS_OUTPUT.PUT_LINE(v_SQLStatement);                                                     create table tmptable_zyr (tab_name varchar2( 300) , col_name varchar2( 300));
CREATE OR REPLACE procedure QUERY_KEY ( keyword in varchar2 ) as  v_SQLStatement varchar2( 3000);   v_startRecord Number; begin  FOR reInfo IN ( select table_name from user_tables) LOOP    FOR colInfo IN (SELECT column_name, DATA_TYPE                      FROM user_tab_cols                     WHERE table_name = reInfo.table_name) LOOP      IF (colInfo.DATA_TYPE like   '%CHAR%'  ) THEN            v_SQLStatement := 'select count(*) from ' || reInfo.table_name ||                           ' where ' || colInfo.column_name || ' like ' '%'||                          keyword|| '%' '';        DBMS_OUTPUT.PUT_LINE(v_SQLStatement);                                                             execute immediate v_SQLStatement          into v_startRecord;               IF (v_startRecord > 0) THEN                  insert into tmptable_zyr values (reInfo.table_name,colInfo.column_name);                  commit;                 END IF;             END IF;     END LOOP;   END LOOP; END QUERY_KEY;


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69924215/viewspace-3051452/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-05-19

  • 博文量
    81
  • 访问量
    90380