权限不足

例如以下一个存储过程是dba创建一个表空间、创建一个用户并给这个用户授予权限:

create or replace procedure createTS(tname in varchar2)

is

PRAGMA AUTONOMOUS_TRANSACTION;

v_createsql   varchar2(400);

vtbsname varchar2(40);

begin

vtbsname := tname;

v_createsql:=‘CREATE TABLESPACE ‘|| vtbsname ||‘ DATAFILE ‘‘F:\APP\ADMINISTRATOR\ORADATA\‘|| vtbsname ||‘.dbf‘‘ SIZE 30M AUTOEXTEND ON NEXT 10M‘;

Dbms_Output.Put_Line(v_createsql);

execute immediate v_createsql;

v_createsql:=‘CREATE USER ‘|| vtbsname ||‘  identified by ‘|| vtbsname ||‘ default tablespace  ‘||vtbsname;

Dbms_Output.Put_Line(v_createsql);

execute immediate v_createsql;

--  v_createsql:=‘grant  ALTER SESSION,CREATE CLUSTER,CREATE DATABASE LINK,CREATE SEQUENCE,CREATE SESSION ,CREATE SYNONYM,CREATE VIEW to ‘|| vtbsname;

-- v_createsql:=‘GRANT CREATE SESSION,CREATE CLUSTER,CREATE INDEXTYPE,CREATE OPERATOR,CREATE PROCEDURE,CREATE SEQUENCE,CREATE TABLE,CREATE TRIGGER,CREATE TYPE,INSERT ANY TABLE,UPDATE ANY TABLE,SELECT ANY TABLE,DELETE ANY TABLE to ‘|| vtbsname;

v_createsql:=‘GRANT connect,resource to ‘|| vtbsname;

Dbms_Output.Put_Line(v_createsql);

execute immediate v_createsql;

end createTS;

PROCEDURE CREATETS 已编译

编译通过,例如以下运行

set serveroutput on;

execute createTS(‘nk_develop14061342‘);

在行 28 上開始运行命令时出错:

execute createTS(‘nk_develop14061343‘)

错误报告:

ORA-01031: 权限不足

ORA-06512: 在 "NK_DEVELOP131021.CREATETS", line 22

ORA-06512: 在 line 1

01031. 00000 -  "insufficient privileges"

*Cause:    An attempt was made to change the current username or password

without the appropriate privilege. This error also occurs if

attempting to install a database without the necessary operating

system privileges.

When Trusted Oracle is configure in DBMS MAC, this error may occur

if the user was granted the necessary privilege at a higher label

than the current login.

*Action:   Ask the database administrator to perform the operation or grant

the required privileges.

For Trusted Oracle users getting this error although granted the

the appropriate privilege at a higher label, ask the database

administrator to regrant the privilege at the appropriate label.

CREATE TABLESPACE nk_develop14061343 DATAFILE ‘F:\APP\ADMINISTRATOR\ORADATA\nk_develop14061343.dbf‘ SIZE 30M AUTOEXTEND ON NEXT 10M

CREATE USER nk_develop14061343  identified by nk_develop14061343 default tablespace  nk_develop14061343

GRANT connect,resource to nk_develop14061343

原因是在运行授予权限之时因为权限不足造成的

找到一个帖子例如以下:http://bbs.csdn.net/topics/360053754

最终找到毛病了,原来是没有权限。尽管当前用户运行语句是有权限的,可是放到存储过程中就必需要显式的赋个权限给当前用户。下面是我找到的资料,贴出来给大家也看一下吧。

=====================

【IT168 技术文档】我们知道,用户拥有的role权限在存储过程是不可用的。如:

SQL> select * from dba_role_privs where grantee=‘SUK‘;

GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE

------------ ------------ ------------ ------------

SUK DBA NO YES

SUK CONNECT NO YES

SUK RESOURCE NO YES

--用户SUK拥有DBA这个role

--再创建一个測试存储过程:

create or replace procedure p_create_table

is

begin

Execute Immediate ‘create table create_table(id int)‘;

end p_create_table;

--然后測试

SQL> exec p_create_table;

begin p_create_table; end;

ORA-01031: 权限不足

ORA-06512: 在"SUK.P_CREATE_TABLE", line 3

ORA-06512: 在line 1

--能够看到。即使拥有DBA role。也不能创建表。role在存储过程中不可用。

--遇到这样的情况,我们一般须要显式进行系统权限。如grant create table to suk;

--但这样的方法太麻烦,有时候可能须要进行许多的授权才干运行存储过程

--实际上,oracle给我们提供了在存储过程中使用role权限的方法:

--改动存储过程,增加Authid Current_User时存储过程能够使用role权限。

create or replace procedure p_create_table

Authid Current_User is

begin

Execute Immediate ‘create table create_table(id int)‘;

end p_create_table;

--再尝试运行:

SQL> exec p_create_table;

PL/SQL procedure successfully completed

--已经能够运行了。

原来 是要使用调用者权限

因此在创建存储过程时须要增加Authid Current_User当前用户的权限

create or replace procedure createTS(tname in varchar2)

Authid Current_User

is

要在存储过程里动态创建创建表空间例如以下步骤。

1、须要採用Oracle自治事务

就在存储过程里增加PRAGMA AUTONOMOUS_TRANSACTION;子句

2、须要显示的分配置创建表空间的权限,否则提示权限不足。

grant alter tablespace to TEST;

grant create tablespace to TEST;

感谢网址楼主

http://www.dbfaq.net/FAQ/FixupQL.aspx?QuestionID=112

http://bbs.csdn.net/topics/360053754

时间: 2024-12-20 17:27:56

权限不足的相关文章

shiro实现APP、web统一登录认证和权限管理

先说下背景,项目包含一个管理系统(web)和门户网站(web),还有一个手机APP(包括Android和IOS),三个系统共用一个后端,在后端使用shiro进行登录认证和权限控制.好的,那么问题来了web和APP都可以用shiro认证吗?两者有什么区别?如果可以,解决方案是什么?看着大家焦急的小眼神,接下来挨个解决上面的问题. web和APP可以用shiro统一登录认证吗? 可以.假如web和APP都使用密码登录的话,那没的说肯定是可以的,因为对于shiro(在此不会介绍shiro详细知识,只介

beego应用做纯API后端如何使用jwt实现无状态权限验证

jwt是什么,可以百度下其它文章,我原来看到一个讲的详细的,现在找不到了.先简单介绍下我个人的理解,就是一个token,只不过通过加密解密的手段,能让这一串字符带有一些简单的信息.这样解密jwt后不用查数据库,最常用的例子,保存用户权限,再多层的权限,其实只用一个数字,转换成二进制,每一位代表一种权限.类似这样的使用,还有保存session的key,通过该值查session就能获取更丰富的资料,用来保存用户状态也是可以的. 下面介绍下我的一个golang项目中使用beego框架做纯API接口使用

C#的默认访问权限(转)

1.在namespace中的类.接口默认是internal类型的,也可以显示的定义为public类型,不允许是其他访问类型.2.在一个类里面,属性和方法默认是private的,可以显示的定义为public.private.protected.internal或protected internal等访问类型.3.接口中不能定义成员变量,接口中的方法默认为public的访问权限,但是不能显示的定义任何访问类型.4.抽象类中必须有一个以上的抽象方法,抽象方法可以是public.internal.pro

让win7变成无线路由(需要用管理员权限打开)最后完善.rar

让win7变成无线路由(需要用管理员权限打开)最后完善.bat @ECHO OFF CLS color 0a netsh wlan show drivers ECHO.★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ECHO.★以上是你的无线网卡信息,查看你的网卡是否支持承载网络★ ECHO.★ ★ ECHO.★ 持请更新一个通过微软认证的驱动! ★ ECHO.★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ECHO. ECHO. GOTO MENU :MENU ECHO.

数据库权限分配操作

1.远程登录mysqlmysql -h ip -u root -p 密码2.创建用户格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码";例1:增加一个test1用户,密码为123456,可以在任何主机上登录,并对所有数据库有查询,增加,修改和删除的功能.需要在mysql的root用户下进行mysql>grant select,insert,update,delete on *.* to [email protected]&quo

iOS10权限声明国际化

1.xCode8权限 xCode8.0开始苹果对隐私权限的控制更加严格,并且在隐私权限对应的描述不能为空,否则提交时在活动里面并看不到你提交的二进制文件,并给开发者邮箱发送以下邮件 2.权限描述国际化 解决办法是在Info.plist中添加Privacy - Camera Usage Description和Privacy - Photo Library Usage Description. 如果直接写在Info.plist中,则不能多语言显示提示,想要多语言提示,可以选中Info.plist文

微信支付开发(APP)的各种坑,.net和iOS的各种陷阱,解决.net调用下单接口提示无权限,解决iOS跳转到微信支付页面中间只有一个确定按钮

直入主题之前,请容我吐槽一下微*的官方东西:ASDFQ%#$%$#$%^[email protected]#$%DSFQ#$%.......:吐槽玩了!大家心照就好. 要完成手机APP跳转到微信的APP进行微信支付,需要进行如下操作: 1.先去微信的开放平台(http://open.weixin.qq.com)进行开发者账号的注册. 2.新建一个APP应用,然后填写必填信息提交审核. 3.进入APP应用,在接口信息中,进行申请“获得微信支付能力”的功能,期间会提交相关的公司营业信息证明等. 通过

rbac 权限控制

RBAC 的控制,大致是通过将角色的权限控制,来控制用户的权限. 需要构建的表为 用户表(user) ,角色表(role),节点表(node),三张主表 , 节点表内记录的是所有的权限和方法. 2张关联表,是为了关联3张数据表的,分别未 角色用户表(user_role),角色权限表(role_node),也可将两张表写成字段分别加入到用户表和权限表内; 废话不多说看下,键表语句如下 用户表: CREATE TABLE `wj_admin` ( `id` int(11) NOT NULL AUTO

七:HDFS Permissions Guide 权限

1.权限模式     简单:启动HDFS的操作系统用户即为超级用户,可以通过HADOOP_USER_NAME指定 kerberos: 2.group mapping 组列表由group mapping service完成,该服务由hadoop.security.group.mapping参数决定,默认值是org.apache.hadoop.security.JniBasedUnixGroupsMappingWithFallback,即由JNI. 如果没有JNI, 使用org.apache.had

linux下添加用户并赋予root权限

1.添加用户,首先用adduser命令添加一个普通/系统用户,命令如下:# adduser [-r] –d /tommy tommy//添加一个名为tommy的用户 # passwd tommy   //修改密码Changing password for user tommy.New UNIX password:     //在这里输入新密码Retype new UNIX password:  //再次输入新密码passwd: all authentication tokens updated