权限不足
2014-06-16 11:05
155 查看
如下一个存储过程是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
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
相关文章推荐
- 关于JQuery加载本地JSON文件无法读取(权限不足的)解决
- ORACLE 创建视图时,提示用户权限不足
- 因为用户权限不足引起的进程(QMNC)挂死
- eclipse连接远程hadoop集群开发时权限不足问题解决方案
- ORACLE 创建视图时,出现权限不足 ORA-01031:权限不足
- 教你一招,让你摆脱ftp工具上因为权限不足而删不了想删除文件夹的苦恼
- 虚拟主机上asp.net运行权限不足问题及解决
- IIS服务器设置造成引用第三方权限不足问题
- 【原创】属性 IsLocked 不可用于 登录“[sa]”。该对象可能没有此属性,也可能是访问权限不足而无法检索。
- oracle存储过程中使用execute immediate执行sql报ora-01031权限不足的问题
- Win7 IIS7 配置错误由于权限不足而无法读取配置文件 解决办法
- transfer error / Failed to push selection: Permission denied 安卓设备文件读写权限不足
- 创建视图时出现权限不足
- git bin目录权限不足报错
- 关于ASP.NET中Membership进行权限管理不足的解决办法
- asp.net-由于权限不足而无法读取配置文件,无法访问请求的页面
- Oracle创建视图时提示权限不足的解决办法
- Win 10 删除文件“文件访问被拒,权限不足”提示的解决办法
- 远程登陆显示权限不足问题
- 创建视图时出现权限不足