我在创建视图的过程中有一个动态sql。如果我打印字符串并手动执行,我可以创建视图。但是,在该过程中,由于特权不足而引发异常。我已经授予执行,创建,所有程序给用户,但它仍然不起作用。有什么建议么?Oracle授予执行权限
1
A
回答
5
在包内部,间接(通过角色)授予的特权被删除。您必须直接向帐户授予底层对象必需的权限;例如:
conn sys/[email protected] as sysdba
create user A identified by A;
grant connect, dba to A;
conn A/[email protected]
create table test_tab(pk number);
conn sys/[email protected] as sysdba
create user B identified by B;
grant connect, dba to B;
conn B/[email protected]
select * from A.test_tab; -- this works
create or replace procedure do_it as
l_cnt pls_integer;
begin
select count(*) into l_cnt from A.test_tab; -- error on compile
end;
在这个例子中,你需要一个
grant select on A.test_tab to B;
,使其工作(不要紧您是否使用动态或静态SQL)。
3
我的猜测基于您提供的信息很少,是程序运行时使用了定义者权限(默认值),程序的所有者没有创建视图所需的权限。您的案例中的合适解决方案是否使用调用者权限创建过程或向过程所有者授予其他特权尚不清楚。
发布实际代码总是有帮助的。程序是否具有定义者或调用者权限?应该创建哪个模式视图?你执行的实际授权声明是什么?
相关问题
- 1. 授予Oracle授予权限
- 2. Oracle - 授予用户权限
- 3. Oracle自动授予权限
- 4. Oracle权限授予SQl Plus
- 5. 如何授予在Oracle中授予权限的权限
- 6. 权限需要授予执行
- 7. 执行权限授予不上表
- 8. 授予SQL Azure上的执行权限
- 9. 如何在Oracle中为dbms_lock授予执行权限?
- 10. 选择并更新授予权限oracle
- 11. 授予SQL存储过程权限执行权限
- 12. MySQL - 授予权限
- 13. mysql授予权限
- 14. 授予LIST权限
- 15. 授予dbms_crypto权限
- 16. 如何将权限授予Oracle中的一行?
- 17. 授予权限,如Linux
- 18. 如何授予discoverUserInfoWithUserRecordID权限?
- 19. perl DBI授予权限
- 20. 授予权限的路径
- 21. 授予MSI安装权限
- 22. ANDROID未授予权限
- 23. 授予权限时出错
- 24. PackageManager:未授予权限
- 25. 甲骨文授予权限
- 26. 默认授予权限
- 27. 无法授予FINE_LOCATION权限
- 28. MySql授予用户权限
- 29. 授予只读权限
- 30. 授予ClickOnce System.Web.AspNetHostingPermission权限?