Oracle批量赋权的方法可以实现一些特定的功能:两个用户,其中一个用户A 没有数据结构,实现通过用户A访问用户B的所有数据,只有读取数据的权限,看不到B用户数据结构,只能查询。
一、建立只读用户A:
- -- Create the user
- create user A
- identified by ""
- default tablespace LMIS
- temporary tablespace LMIS
- profile DEFAULT;
二、授予A相应的权限(在有DBA权限用户B下执行)
- grant create session to A;
- grant create synonym to A;
三、以拥有者B身份执行下面的语句(commit 窗口)
- set heading OFF;
- set feedback OFF;
- SPOOL c:\temp\A.SQL; --放文件的路径
- SELECT 'create synonym '||tname||' for B.'||tname||';' FROM TAB;
- SPOOL OFF;
四、转变为被赋权用户A的身份,执行
- @c:\temp\A.SQL
五、赋予用户A权限(在B用户COMMIT窗口下执行)
- set heading OFF;
- set feedback OFF;
- SPOOL c:\grantA.SQL;
- SELECT 'grant select,insert,update,delete,REFERENCES,INDEX on ' ||
- TNAME || ' to A;'
- FROM TAB WHERE TABTYPE <>'VIEW'
- UNION ALL
- SELECT 'grant select,insert,update,deleteon ' || OBJECT_NAME ||
- ' to A;'
- FROM USER_OBJECTS
- WHERE OBJECT_TYPE = 'VIEW'
- UNION ALL
- SELECT 'grant EXECUTEon ' || OBJECT_NAME || ' to A;'
- FROM USER_OBJECTS
- WHERE OBJECT_TYPE = 'PROCEDURE'
- UNION ALL
- SELECT 'grant EXECUTEon ' || OBJECT_NAME || ' to A;'
- FROM USER_OBJECTS
- WHERE OBJECT_TYPE = 'FUNCTION'
- UNION ALL
- SELECT 'grant selecton ' || OBJECT_NAME || ' to A;'
- FROM USER_OBJECTS
- WHERE OBJECT_TYPE = 'SEQUENCE';
- SPOOL OFF;
六、执行脚本
- @c:\grantA.SQL;
【编辑推荐】