| 客户提了一个要求,具体如下: 创建用户A ,使用toad连接数据库,A可以查看用户B下表信息(表结构),却不能查询其数据; 刚开始执行grant select on B.tab to A,用户验证时说A登录可以查询B表的metadata(Toad), 但同时能查询B表数据(应该禁掉此功能) 用户给出一个样例,该数据库下已有一个用户C,C便满足其要求,C权限如下 select PRIVILEGE from dba_sys_privs where GRANTEE='C' PRIVILEGE ---------------------------------------- CREATE OPERATOR CREATE DATABASE LINK UNLIMITED TABLESPACE CREATE INDEXTYPE CREATE TRIGGER CREATE SESSION CREATE TABLE CREATE TYPE CREATE PROCEDURE CREATE SEQUENCE CREATE VIEW ALTER SESSION CREATE SYNONYM CREATE MATERIALIZED VIEW 14 rows selected. select GRANTED_ROLE from dba_role_privs where grantee='C' GRANTED_ROLE ------------------------------ SELECT_CATALOG_ROLE EXECUTE_CATALOG_ROLE select PRIVILEGE,TABLE_NAME from dba_tab_privs where GRANTEE='C'; PRIVILEGE TABLE_NAME ---------------------------------------- ------------------------------ EXECUTE DBMS_DEBUG EXECUTE FLUSH_BUFFER_CACHE |
| 解决办法: 用户C登录数据库(sqlplus),执行desc B.tab,报ora-00942错误; 用户C登录数据库(Toad),同时10046跟踪,点击查看B.tab,可成功显示tab各种metadata且同时不能查看tab存储的数据(ora-00942); 其跟踪文件sql大致如下 Select a1.constraint_name, c1.column_name, c1.position from sys.DBA_CONS_COL UMNS C1, sys.DBA_CONSTRAINTS A1 where A1.table_name = C1.Table_name And A1.co nstraint_name = C1.Constraint_Name and A1.constraint_type = 'P' and A1.table_n ame =:TabName and C1.owner = A1.Owner and A1.owner =:Owner ORDER BY 3 由此可见,Toad工具依靠查询数据字典完成metadata显示,则只需select_catalog_role即可 grant select_catalog_role to A 使用A登录数据库(Toad),果然查询成功 |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15480802/viewspace-761798/ ,如需转载,请注明出处,否则将追究法律责任。