存储过程中insert其它用户的表,编译提示无权限的处理
2012-12-10 17:31
162 查看
背景:某个用户下(假定A)的存储过程要调用另外用户(假定B)的表,在SYS下通过显式GRANT权限(具体如下)对A授权。
grant DELETE,INSERT,SELECT,UPDATE on dg_write.DCRASS_DECTEMP1 to oper;
grant DELETE,INSERT,SELECT,UPDATE on dg_write.DCRASS_DECTEMP2 to oper;
grant DELETE,INSERT,SELECT,UPDATE on dg_write.DCRASS_DECTEMP3 to oper;
grant DELETE,INSERT,SELECT,UPDATE on dg_write.DCRASS_DECTEMP4 to oper;
grant DELETE,INSERT,SELECT,UPDATE on dg_write.DCRASS_DECTEMP5 to oper;
grant DELETE,INSERT,SELECT,UPDATE on dg_write.DCRASS_DUDECTEMP1 to oper;
grant DELETE,INSERT,SELECT,UPDATE on dg_write.DCRASS_DUDECTEMP2 to oper;
grant DELETE,INSERT,SELECT,UPDATE on dg_write.DCRASS_DUDECTEMP3 to oper;
故障现象:A中的存储过程编译提示权限错误
Error: PL/SQL: ORA-01031: insufficient privileges
通过模糊授权不管用,最后对B用户授予DBA后用B用户登录对A授权后A中的存储过程即可正常编译。
SQL> grant dba to dg_write;
Grant succeeded
grant DELETE,INSERT,SELECT,UPDATE on DCRASS_DECTEMP1 to oper;
grant DELETE,INSERT,SELECT,UPDATE on DCRASS_DECTEMP2 to oper;
grant DELETE,INSERT,SELECT,UPDATE on DCRASS_DECTEMP3 to oper;
grant DELETE,INSERT,SELECT,UPDATE on DCRASS_DECTEMP4 to oper;
grant DELETE,INSERT,SELECT,UPDATE on DCRASS_DECTEMP5 to oper;
grant DELETE,INSERT,SELECT,UPDATE on DCRASS_DUDECTEMP1 to oper;
grant DELETE,INSERT,SELECT,UPDATE on DCRASS_DUDECTEMP2 to oper;
grant DELETE,INSERT,SELECT,UPDATE on DCRASS_DUDECTEMP3 to oper;
看来SYS也不是万能的,也或许是ORACLE的一个BUG.
最后别忘记REVOKE B的DBA权限:
SQL> revoke dba from dg_write;
Revoke succeeded
grant DELETE,INSERT,SELECT,UPDATE on dg_write.DCRASS_DECTEMP1 to oper;
grant DELETE,INSERT,SELECT,UPDATE on dg_write.DCRASS_DECTEMP2 to oper;
grant DELETE,INSERT,SELECT,UPDATE on dg_write.DCRASS_DECTEMP3 to oper;
grant DELETE,INSERT,SELECT,UPDATE on dg_write.DCRASS_DECTEMP4 to oper;
grant DELETE,INSERT,SELECT,UPDATE on dg_write.DCRASS_DECTEMP5 to oper;
grant DELETE,INSERT,SELECT,UPDATE on dg_write.DCRASS_DUDECTEMP1 to oper;
grant DELETE,INSERT,SELECT,UPDATE on dg_write.DCRASS_DUDECTEMP2 to oper;
grant DELETE,INSERT,SELECT,UPDATE on dg_write.DCRASS_DUDECTEMP3 to oper;
故障现象:A中的存储过程编译提示权限错误
Error: PL/SQL: ORA-01031: insufficient privileges
通过模糊授权不管用,最后对B用户授予DBA后用B用户登录对A授权后A中的存储过程即可正常编译。
SQL> grant dba to dg_write;
Grant succeeded
grant DELETE,INSERT,SELECT,UPDATE on DCRASS_DECTEMP1 to oper;
grant DELETE,INSERT,SELECT,UPDATE on DCRASS_DECTEMP2 to oper;
grant DELETE,INSERT,SELECT,UPDATE on DCRASS_DECTEMP3 to oper;
grant DELETE,INSERT,SELECT,UPDATE on DCRASS_DECTEMP4 to oper;
grant DELETE,INSERT,SELECT,UPDATE on DCRASS_DECTEMP5 to oper;
grant DELETE,INSERT,SELECT,UPDATE on DCRASS_DUDECTEMP1 to oper;
grant DELETE,INSERT,SELECT,UPDATE on DCRASS_DUDECTEMP2 to oper;
grant DELETE,INSERT,SELECT,UPDATE on DCRASS_DUDECTEMP3 to oper;
看来SYS也不是万能的,也或许是ORACLE的一个BUG.
最后别忘记REVOKE B的DBA权限:
SQL> revoke dba from dg_write;
Revoke succeeded
相关文章推荐
- 存储过程中调用自定义函数(不在同一用户下)提示无权限或标识符无效
- SQL SERVER: 给用户增加执行存储过程的权限
- 在存储过程中查询dba_tables表的时候,需要赋权限给该用户
- 存储过程的重编译处理
- MS SQl Server 为用户批量授与存储过程执行权限
- SQL 用户权限(表、函数、存储过程等)
- 如何只授予用户查看存储过程定义的权限
- oracle 存储过程给另一个用户的权限问题
- 修改用户定义数据类型对已经编译的存储过程的影响的示例.sql
- oracle 用户权限之执行存储过程权限不足
- 在存储过程中建立临时表提示权限不足的解决办法
- 如何只授予用户查看存储过程定义的权限
- oracle编译存储过程提示表或视图不存在的问题分析
- Oracle为其他用户存储过程分配查询权限
- 如何实现只授予用户查看存储过程定义的权限
- sql server 2008 为一用户赋予存储过程的执行权限
- all权限用户无法执行存储过程
- Android 6.0运行时权限用户选择“不在提示”的处理
- 使执行存储过程的用户拥有role的权限
- 用于在存储过程中 根据@@error 判断是否要提交事务和提示操作是否成功,便于异常处理