请教存储过程中建表的问题,给高分哦。

baoyongwei 2010-04-27 11:44:19
问题描述:运行存储过程A,该存储过程中调用创建表的存储过程B和创建视图的存储过程,运行出错,报没有足够权限
问题解决:grant create table,create view to user;

为什么会这样?同一个用户下的过程和表,建表权限已经有了啊。
...全文
175 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangren 2010-04-27
  • 打赏
  • 举报
回复
创建对象的系统权限都是要赋的,但一般通过给用户
授予resource角色就行了,它包含创建各种基本对象的权限
sql>grant connect,resource,unlimited tablespace to myuser;
mantisXF 2010-04-27
  • 打赏
  • 举报
回复
现在你所登录的用户应该当初是隐式地赋了权限(由其他相同权限的用户来创建这个用户),存储过程里动态SQL建表需要有create table权限,这就需要显示地赋权,像:grant create table,create view to user;
ypfe23 2010-04-27
  • 打赏
  • 举报
回复
据估计原因:
要确定“建表的存储过程B和创建视图的存储过程”中所有引用的表要显式的授于查询权限
即:grant select on usera.table to userb
zhangwonderful 2010-04-27
  • 打赏
  • 举报
回复
还要增加以下权限
grant create any table,create any view to user;
  • 打赏
  • 举报
回复
使用动态sql来实现
baoyongwei 2010-04-27
  • 打赏
  • 举报
回复
SQL> select * from sys.role_sys_privs;

ROLE PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
RESOURCE CREATE TRIGGER NO
RESOURCE CREATE SEQUENCE NO
RESOURCE CREATE TYPE NO
RESOURCE CREATE PROCEDURE NO
RESOURCE CREATE CLUSTER NO
CONNECT CREATE SESSION NO
RESOURCE CREATE OPERATOR NO
RESOURCE CREATE INDEXTYPE NO
RESOURCE CREATE TABLE NO

已选择9行。
权限有了。
baoyongwei 2010-04-27
  • 打赏
  • 举报
回复
上面的答复没有解释为什么已经有建表权限了,还要再执行grant create table to user?
原来的建表权限是DBA用户执行grant connect,resource to user;
请高手解释一下。给分哦。

3,494

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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