权限不足

权限不足

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

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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Fiddler 实现手机抓包详解

    Fiddler 实现手机抓包详解1、Fiddler简介Fiddler是一款强大的抓包工具,原理是以web代理服务器的形式进行工作的:2、Fiddler配置2.1允许监听httpsFiddler如果抓取https协议会话需要进一步配置,在Tools->Options菜单下,选择HTTPS标签并配置如下:2.2允许远程连接手机抓取需要配置远程连接,在Tools->Options菜单下,选择Connections标签并配置如下:监听端口8888并允许远程连接防火墙需要开放

    2022年6月29日
    35
  • upx脱壳(手动)

    upx脱壳(手动)1.upx脱壳几乎可以算是最简单的了,第一步还是查壳2.第二步当然是od打开,提示解析代码,是和否都可以,然后f8,打硬件断点。3.此时再f9执行到硬件断点,可以看到popad,壳代码到这基本上结束了,后面就是oep。在下面的一个大跳jmp处断点,然后取消硬件断点,f9到断点。4.然后f8过去,可以看到如下画面。此处作为oep,可以开始进行脱壳5.右键——使用od调试进程6.复…

    2022年7月19日
    19
  • 2021年 全网最细大数据学习笔记(一):初识 Hadoop

    2021年 全网最细大数据学习笔记(一):初识 Hadoop文章目录一、大数据1、大数据的定义2、大数据的特点3、大数据行业应用4、Hadoop与大数据5、其他大数据处理平台6、大数据人才三、一、大数据随着近来计算机技术和互联网的发展,大数据这个名词越来越多地进入到我们的视野中,大数据的快速发展也无时刻影响着我们的生活。1、大数据的定义大数据从字面来理解就是大量的数据。日常生活离不开数据,可以说每时每刻都在产生着数据。例如,一分钟可以做些什么事呢?在日常生活中,一分钟可能连一页书都看不完。但是一分钟内产生的数据却是庞大的。据统计,在一分钟内,YouTu

    2022年6月4日
    30
  • 前端vue定时器_vue切换页面清除所有定时器

    前端vue定时器_vue切换页面清除所有定时器vue页面定时器的两种方式

    2025年7月29日
    2
  • Jmeter 安装篇

    Jmeter 安装篇Jmeter安装篇Jmeter的安装其实很简单,网上的资料也很多。这里不多说了,直接上步骤。Step1:安装JDK最好安装1.6版本以上的,如果本地安装了JDK那就查看一下是否配置了环境变量。(Jmeter是用java开发的,它的运行依赖于java环境)有关环境变量的配置,请自行百度。网上图文教程还是非常丰富的。Step2:下载Jmeterhttp://jme

    2022年5月8日
    41
  • 时滞模型的matlab编程_如何用matlab仿真

    时滞模型的matlab编程_如何用matlab仿真Matlab仿真含时滞多智体一致性分析,附代码Matlab仿真含时滞多智体一致性分析,附代码Matlab仿真含时滞多智体一致性分析,附代码系统结构如下图所示:clear;clc;%2014_多智能体网络的一致性问题研究_纪良浩%此为Paper中的示例代码%例2.1:A=[0,0,0.1,0,0;0.1,0,0,0,0;0,0.15,0,0…

    2022年10月1日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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