Oracle 数据库:查看架构而不访问数据

3 oracle security oracle-10g

在 Oracle 数据库 10g 中,我需要创建一个具有以下权限的用户:

  • 用户可以访问架构以读取表名和列
  • 用户无法从任何表中选择(获取)任何数据

这可能吗?或者有解决方法吗?

Fra*_*itt 5

我将创建一个返回所有表/列的过程并授予对该过程的访问权限:

  create or replace package pkg_ddl_read as

    procedure get_table_cols(v_cur in out sys_refcursor);

  end;


  create or replace package body pkg_ddl_read as

    procedure get_table_cols(v_cur in out sys_refcursor) is
    begin
      open v_cur for
        select owner, table_name, column_name 
        from dba_tab_cols;
    end;

  end;


  grant execute on pkg_ddl to <myuser>;
Run Code Online (Sandbox Code Playgroud)

根据创建用户(不是您想要授予访问权限的用户)拥有的权限以及您是否希望允许读取用户获取数据库中每个表的 DDL 还是仅获取某个子集的 DDL,您可能需要

  • 使用 all_tab_cols / user_tab_cols 而不是 dba_tab_cols
  • 在过程中添加一个 where 子句