权限不足

权限不足

大家好,又见面了,我是全栈君。

例如以下一个存储过程是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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116452.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • linux系统休眠唤醒_centos休眠后怎么唤醒

    linux系统休眠唤醒_centos休眠后怎么唤醒背景介绍:睡眠/唤醒是嵌入式Linux非常重要的组成部分,因为优秀的睡眠唤醒机制可以是嵌入式设备尽可能的进入休眠状态,来延长电池的续航时间(这在移动终端消费类电子设备中是非常重要和有意义的!!)。但标准的Linux睡眠唤醒机制有其自身的一些缺陷(所有模块必须同时睡下或者唤醒),在某些情况下,这会导致能耗的白白浪费。因此Android在标准Linux睡眠唤醒的机制上作了新的改动(wake_lock唤…

  • 影视3D建模和游戏3D建模对比,哪个更有发展前景

    影视3D建模和游戏3D建模对比,哪个更有发展前景影视3D建模和游戏3D建模,两者之间最大和最明显的差异是:游戏开发永远有多边形建模预算。影视建模方面,对于多边形数量都没有限制。对于电影来说,唯一限制是时间,按时,按预算生产合格的模型。游戏建模设计不能随意增加多边形面数,必须依靠纹理细节提升模型的质量。由于多边形数量必须很低,需要其他方法将更多细节放入模型中,目前最好的方法当然是使用纹理。游戏建模设计技术游戏中经常使用的技术是细节层次。意味单个游戏会有几个不同的细节级别。玩家离模型越远,资产的细节就越少。随着玩家越来越近,较低分辨率模型将被.

  • linux防挂马软件,Linux利用Python脚本检测网站挂马程序

    linux防挂马软件,Linux利用Python脚本检测网站挂马程序部署站点后通常首先会生成该站点所有文件的MD5值,如果上线后网站页面内容被篡改(如挂马)等,可以比对之前生成MD5值快速查找去那些文件被更改,为了使系统管理员第一时间发现,可结合crontab或nagios等工具。程序测试如下:#pythoncheck_change.pyUsage:pythoncheck_change.pyupdate/home/wwwrootpythoncheck…

  • 系统运维架构师体系[通俗易懂]

    系统运维架构师体系[通俗易懂]一、系统运维架构师体系1.系统运维架构体系排列:2.Linux运维架构的薪资水平:3.Linux运维的技能进化论4.Linux运维大致的知识框架4-1.Linux系统初级体系4-2.Linux系统中高级体系5.Linux运维的具体规划实践5-1.Linux运维基础5-2.Linux运维进阶6.Linux工作的必备要求7.Linux运维学习建议一、系统运维架构师体系1.系统运维架构体系排列:Linux运维工程师应用运维工程师,大数据运维工程师,运维开发工程师,云计算运维工程.

  • pycharm实现基于mysql关键词检索问题

    pycharm实现基于mysql关键词检索问题       后端是使用pycharm写的       单个关键词的检索实现如下:defadProQuery(): content=request.form.get(‘ad_proSearch’)#需要查询的内容ifcontentisNone:content=””pros=Cy_regist.query.f

  • WriteProcessMemory_linux注入

    WriteProcessMemory_linux注入今天要完成一个项内容,运行另一个应用程序abc.exe,实现它的父进程是explorer.exe。最开始的思路是获得explorer.exe的句柄,用ShellExecute启动abc.exe。但是用explorer.exe的句柄创建的进程的父进程依然是调用和进程,而不是传入句柄的进程。看来直接的不行,只能用间接的了。把运行abc.exe的代码段写到explorer.exe的内存里面去。然

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号