权限不足

权限不足

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

例如以下一个存储过程是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)
上一篇 2022年1月21日 上午8:00
下一篇 2022年1月21日 上午9:00


相关推荐

  • 代价函数 cost function

    代价函数 cost function代价函数在监督学习的回归问题中,代价函数就是用于找到最优解的目的函数,反应了预测函数的准确性。代价函数的值越小,说明在回归问题的中,计算机程序对数据拟合的越好。也就是假设函数越正确。比如,对于这个假设函数(可以看成是求房价的假设函数):代价函数是:也就是预测值与真实值的差的平方和,再除以2m(2倍样本数量)。在假设函数中:θ0和θ1两个参数,不同的参数会有不同的假设函数如下图

    2022年6月6日
    30
  • JPEG文件格式_显示文件格式后缀

    JPEG文件格式_显示文件格式后缀JPEG文件的存储格式有很多种,但最常用的是JFIF格式,即JPEG File Interchange Format。JPEG文件大体可以分为两个部分:(1)标记码;由

    2022年8月1日
    8
  • 使用 multipass 管理 Ubuntu VMs

    使用 multipass 管理 Ubuntu VMsMultipass 是一个轻量级的 ubuntu 虚拟实例管理器 可以很快速的创建一个新的虚拟实例用来做开发测试很方便 Multipass 官网 Github 下载页面下载地址为 github 提供 可能很慢或打不开 可以复制页面上的的下载链接地址后使用下方代理地址尝试通过 Github 代理下载 https ghproxy com https github com CanonicalLtd multipass releases download v1 6 2 multipass 1 6 2 2B

    2026年3月19日
    2
  • AI办公领域的Agent来了!实测天工超级智能体6大实用场景,PPT、表格、文档、网页等一键生成,打工人效率神器!(建议收藏)

    AI办公领域的Agent来了!实测天工超级智能体6大实用场景,PPT、表格、文档、网页等一键生成,打工人效率神器!(建议收藏)

    2026年3月16日
    2
  • @param注解的用法解析_getmapping注解用法

    @param注解的用法解析_getmapping注解用法1、概述首先明确这个注解是为SQL语句中参数赋值而服务的。@Param的作用就是给参数命名,比如在mapper里面某方法A(intid),当添加注解后A(@Param(“userId”)intid),也就是说外部想要取出传入的id值,只需要取它的参数名userId就可以了。将参数值传如SQL语句中,通过#{userId}进行取值给SQL的参数赋值。2、实例:实例一:@Param注解基本类型的参数mapper中的方法:publicUse…

    2025年8月24日
    4
  • idea mac激活码_在线激活

    (idea mac激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月27日
    96

发表回复

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

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