权限不足解决办法

胖虎gogogo 2011-02-25 09:08:33
环境:ORACLE10G ,XP
报错:过程里执行EXECUTE IMMEDIATE V_SQL;提示权限不足
尝试操作:1登陆dba用户,对用户进行授权:conn /as sysdba-->grant sysdba to user1
2然后重启数据库,CMD中 oradim -shutdown sid 库sid-->oradim -startup sid 库sid
3重新登陆user1用户,执行刚才的过程,还是报错:ORA-01031: 权限不足
ORA-06512: 在 "ULTRANMS.P_TEST", line 18
ORA-06512: 在 line 2
4查看DBA权限表:select * from v$pwfile_users-->user1 SYSDBA:TRUE SYSOPER:FALSE
备:V_SQL是建立视图的语句。

请问兄弟们哪里出问题了。指点下





...全文
543 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
vancube 2011-02-28
  • 打赏
  • 举报
回复
对头,role在过程中不可见。过程中对用户对象的操作必须显示授权。我曾经也遇到这样的问题。
心中的彩虹 2011-02-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 rabbitlt 的回复:]
环境:ORACLE10G ,XP
报错:过程里执行EXECUTE IMMEDIATE V_SQL;提示权限不足
尝试操作:1登陆dba用户,对用户进行授权:conn /as sysdba-->grant sysdba to user1
2然后重启数据库,CMD中 oradim -shutdown sid 库sid-->oradim -startup sid 库sid
3重新登陆us……
[/Quote]

对于过程里面含有动态建表 在调用的时候 权限失效

在建立的时候
create or replace procedure P_TEST
authit current_useras
....


胖虎gogogo 2011-02-26
  • 打赏
  • 举报
回复
抱着试试看的想法
grant create any view to user1。
然后再执行过程,竟然成功了。

凌乱了。。。
胖虎gogogo 2011-02-26
  • 打赏
  • 举报
回复
登陆的是sys,
grant dba to user1也尝试了。同样的报错权限不足。
金色闪光 2011-02-26
  • 打赏
  • 举报
回复
是不是execute immediate V_SQL里面V_SQL的问题呀?

记得我也是DBA,在执行execute immediate V_SQL的时候也提示过权限不足,然后看我的V_SQL,里面的内容是'create table1 as select * from table2',后来老员工说我没有权限做这个事,不能建表,后来他帮我grant了一下权限,再执行就通过了
胖虎gogogo 2011-02-26
  • 打赏
  • 举报
回复
本该结贴了,其实还是有疑问的:我定义和调用都是统一用户。
为什么需要手动授权,或者声明过程为Authid Current_User调用者权限。
难道问题的核心不是定义者和调用者权限问题。而是ORACLE的Role权为限就是会在过程里失效?
但是失效的原因是什么,定义者权限和调用者权限?而我的定义者和调用者是同一个用户,又绕回来了。
又凌乱了,牛牛们能不能再指点下。
胖虎gogogo 2011-02-26
  • 打赏
  • 举报
回复
总结:查了点资料发现,ORACLE中的role权限(比如dba),在存储过程中并不能生效。
解决这种问题一般需要根据报错,显示的授权(如grant create any view to user1)但这种方法挺费劲,有时候得授权好多次曾能执行存储过程。ORACLE给出了一种解决办法,使能在存储过程中使用role权限,那就是定义过程的时候添加 Authid Current_User(如create or replace procedure P_TEST
authid current_user as...)
这里边引申出来对象两种执行权限:定义者权限和调用者权限。默认都是定义者权限,声明Authid Current_User后就是调用者权限,拿调用者权限来执行对象。

胖虎gogogo 2011-02-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wkc168 的回复:]
引用楼主 rabbitlt 的回复:
环境:ORACLE10G ,XP
报错:过程里执行EXECUTE IMMEDIATE V_SQL;提示权限不足
尝试操作:1登陆dba用户,对用户进行授权:conn /as sysdba-->grant sysdba to user1
2然后重启数据库,CMD中 oradim -shutdown sid 库sid-->oradim -startup s……
[/Quote]

还有这样的问题呢 ,学习了。
zty598416146 2011-02-25
  • 打赏
  • 举报
回复
我记得是dba权限 楼主再试试
xman_78tom 2011-02-25
  • 打赏
  • 举报
回复
是否是以 conn user1 as sysdba 形式登陆的?
登陆后使用 show user 命令检查一下当前的用户是否为 sys。
  • 打赏
  • 举报
回复
grant dba to user1

不要sysdba
QKForex 2011-02-25
  • 打赏
  • 举报
回复
按理说sysdba权限已经有了啊,是不是其他地方报的的错啊

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧