即使使用 CREATE 表授予,立即执行也会失败

2023-12-07

我在使用存储过程中的立即执行命令创建表时遇到问题。但是我收到“权限不足”的错误。我检查了其他线程并确保用户具有授予它的“CREATE TABLE”权限。但是我仍然看到同样的错误。

SQL> select * from USER_SYS_PRIVS;

USERNAME                       PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
MYUSER            CREATE VIEW                              NO
MYUSER            UNLIMITED TABLESPACE                     NO

SQL> select * from session_privs;

PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER
CREATE VIEW
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE

11 rows selected.

我创建的虚拟程序是:

create or replace procedure sp_dummy
   as
   begin
      execute immediate 'Create table Dummy99_99 (Dummy_Field number)';
   end sp_dummy;
   /

详细错误:

ERROR at line 1:
ORA-01031: insufficient privileges
ORA-06512: at "MYUSER.SP_DUMMY", line 4
ORA-06512: at line 1

我做错了什么吗?


你只有create view直接授予您的用户。您可以看到的其他系统权限来自角色,并且角色在定义者权限存储过程中被禁用。在看user_role_privs查看您已被授予的角色,并且您可以查看每个角色授予您哪些权限role_sys_privs(角色名称为受让人)。也可能有多层角色。

如果您这样做,您会看到同样的错误set role none在尝试静态创建表之前。具有最少设置的演示:

create role myrole;
grant create session, create table, create procedure to myrole;
create user myuser identified by mypasswd;
grant myrole to myuser;
grant create view, unlimited tablespace to myuser;

然后作为该用户:

SQL> connect myuser/mypasswd
Connected.
SQL> select * from user_sys_privs;

USERNAME                       PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
MYUSER                         UNLIMITED TABLESPACE                     NO
MYUSER                         CREATE VIEW                              NO

2 rows selected.

SQL> select * from session_privs;

PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE VIEW
CREATE PROCEDURE

5 rows selected.

SQL> Create table Dummy99_99 (Dummy_Field number);

Table created.

SQL> drop table Dummy99_99 purge;

Table dropped.

SQL> set role none;

Role set.

SQL> Create table Dummy99_99 (Dummy_Field number);
Create table Dummy99_99 (Dummy_Field number)
*
ERROR at line 1:
ORA-01031: insufficient privileges

并使用您的存储过程版本:

SQL> connect myuser/mypasswd
Connected.
SQL> create or replace procedure sp_dummy
  2  as
  3  begin
  4    execute immediate 'Create table Dummy99_99 (Dummy_Field number)';
  5  end sp_dummy;
  6  /

Procedure created.

SQL> exec sp_dummy;
BEGIN sp_dummy; END;

*
ERROR at line 1:
ORA-01031: insufficient privileges
ORA-06512: at "MYUSER.SP_DUMMY", line 4
ORA-06512: at line 1

为了能够从存储过程动态创建表,您的 DBA 需要授予create table直接发送给您的用户:

grant create table to myuser;

然后再次尝试该过程:

SQL> connect myuser/mypasswd
Connected.
SQL> select * from user_sys_privs;

USERNAME                       PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
MYUSER                         UNLIMITED TABLESPACE                     NO
MYUSER                         CREATE TABLE                             NO
MYUSER                         CREATE VIEW                              NO

SQL> exec sp_dummy;

PL/SQL procedure successfully completed.

SQL> desc Dummy99_99
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 DUMMY_FIELD                                        NUMBER

请注意user_sys_privs现在表明create table已经被直接授予,而之前或在问题中没有。

然而,您不太可能真正想要动态创建对象,因为模式应该定义良好并且稳定 - 这种类型的更改应该受到控制并成为发布过程的一部分。但作为一项练习,您需要直接拨款。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

即使使用 CREATE 表授予,立即执行也会失败 的相关文章

  • 如何列出表中的所有列?

    对于各种流行的数据库系统 如何列出表中的所有列 对于 MySQL 请使用 DESCRIBE name of table 只要您使用 SQL Plus 或 Oracle 的 SQL Developer 这也适用于 Oracle
  • sqlldr.exe 不适用于 Windows 10

    我最近通过自定义安装安装了 Oracle 数据库客户端 12 1 0 2 0 winx64 并仅选择包括 SQL Loader 等在内的数据库实用程序 但是当我尝试执行 sqlldr exe 时 出现以下错误 在网上搜索后 我从所有站点 即
  • 在sql plus脚本中运行循环

    我正在 sql plus 中运行脚本 我的脚本中有一个 for 循环 BEGIN FOR count IN 1 100 LOOP INSERT INTO CompanyShare VALUES count 1 250 END LOOP EN
  • Hibernate 本机查询 - char(3) 列

    我在 Oracle 中有一个表 其中列 SC CUR CODE 是 CHAR 3 当我做 Query q2 em createNativeQuery select sc cur code sc amount from sector cost
  • 验证 sql/oracle 中的电子邮件/邮政编码字段

    对于以下方面的一些建议将不胜感激 是否可以通过 oracle 中的 sql 中的某种检查约束来验证电子邮件和邮政编码字段 或者我怀疑 pl sql 带有正则表达式的这种事情 Thanks 这是电子邮件地址的正则表达式语法 包括引号 a zA
  • 如何检查oracle数据库中分配给模式、角色的对象的权限(DDL、DML、DCL)?

    大多数时候 我们都在与愚蠢的事情作斗争 以获取架构 角色及其对象的权限详细信息 并尝试找到一些简单的方法来获取有关它的所有详细信息以及伪查询代码 以批量生成授予语句以供进一步使用执行 所以我们在这里得到它 关于数据字典视图前缀的一些简单介绍
  • REGEXP_REPLACE - 仅当包含在 () 中时才从字符串中删除逗号

    我在 oracle 论坛网站找到了一个例子 输入字符串 a b c x y z a xx yy zz x WITH t AS SELECT a b c x y z a xx yy zz x col1 FROM dual SELECT t c
  • 具有连字符的 Oracle 正则表达式在 Windows 上给出的结果与在 Unix 上不同

    我有以下带有正则表达式的查询 select REGEXP REPLACE TEST 3304 V2 lt gt as REG from dual 当通过 SQL Plus 在Windows机器返回以下内容 SQL gt select REG
  • 如何计算选择查询的最佳获取大小

    在 JDBC 中 默认获取大小为 10 但我想当我有一百万行时 这不是最佳获取大小 据我所知 获取大小太低会降低性能 但如果获取大小太高也会降低性能 我怎样才能找到最佳尺寸 这对数据库端有影响吗 它会占用大量内存吗 如果您的行很大 请记住
  • Oracle:动态设置表中所有 NOT NULL 列以允许 NULL

    我有一个包含 75 多个列的表 几乎所有列都有 NOT NULL 约束 如果执行巨大的更改表修改语句 其中的每一列 我会收到一条错误消息 内容大致为 您不能将此字段设置为 NULL 因为它已经是 NULL 我必须对几个表执行此操作 因此更希
  • 将数据从 oracle 移动到 HDFS,处理并从 HDFS 移动到 Teradata

    我的要求是 将数据从 Oracle 移至 HDFS 处理HDFS上的数据 将处理后的数据移至 Teradata 还需要每 15 分钟执行一次整个处理 源数据量可能接近50GB 处理后的数据也可能相同 在网上搜索了很多之后 我发现 PRARO
  • PLSql 返回值

    我再次使用一些 PLSql 我想知道 是否有任何方法可以像选择一样使用以下函数 而不必将其转换为函数或过程 这样我就可以从包含它的脚本中看到代码 代码如下 DECLARE outpt VARCHAR2 1000 flow rI VARCHA
  • 在Oracle中使用IW和MM

    我使用 IW 表示每周结果 使用 MM 表示每月结果 但我总是收到错误 ORA 00979 not a GROUP BY expression 00979 00000 not a GROUP BY expression 我的疑问是这些 We
  • 没有提示指令的直连接中表的顺序是否会影响性能?

    所有基于 SQL 的 RDBMS 10 年前的版本 直接连接查询 没有提示指令 中的表顺序是否会对最佳性能和内存管理产生影响 听说最后一个join应该是最大的表 您的数据库的查询优化器如何处理这种情况 回答你的问题 是的 表的顺序在连接中有
  • spring boot中如何部分回滚数据,错误待解决

    我在事务中使用表数据创建顺序springboot java jpa and hibernate顺序如下所示 使用的数据库是Oracle 下订单 插入订单详细信息表 处理付款 插入到 payment info 表中 错误消息 信息 警告 错误
  • 如何将今天的日期返回到 Oracle 中的变量

    我想做这个 DECLARE today as smalldatetime SELECT today GetDate 但我需要一个oracle翻译 甲骨文使用SYSDATE 还有 ANSI 标准CURRENT TIMESTAMP 除其他外 S
  • 使用 Oracle Sql Developer 生成 DDL 以包含外键

    我尝试了一些使用 SQL Developer 从 Oracle 数据库生成 DDL 的选项 但没有一个符合目的 快速 DDL 选项会产生没有外键约束的 DDL 我很喜欢这种格式 表上的编辑导致 DDL 包括我无法摆脱的存储和日志记录 只是想
  • 如何使用非标准的一周第一天在 Oracle 中计算一年中的第几周?

    我有一个查询需要返回日期字段的 一年中的第几周 但查询的客户使用非标准的一周第一天 所以TO CHAR with IW 没有返回预期的结果 在这种情况下 一周的第一天是周六 周五是一周的第七天 对于 T SQL 我会使用DATEPART a
  • Oracle - 将字符串与 utl_raw.cast_to_varchar2 函数的结果连接起来

    我正在尝试将字符串连接到结果utl raw cast to varchar2函数 也是一个字符串 它应该是透明的 但我无法将任何内容附加到结果中utl raw cast to varchar2 这是一个例子 select utl raw c
  • 根据最大值连接表

    这是我正在谈论的内容的一个简化示例 Table students exam results id name id student id score date 1 Jim 1 1 73 8 1 09 2 Joe 2 1 67 9 2 09 3

随机推荐

  • 固定div的CSS水平居中?

    menu position fixed width 800px background rgb 255 255 255 The Fallback background rgba 255 255 255 0 8 margin top 30px
  • 安卓中的动画?

    我是 android 新手 我需要了解 Android 中视图和视图组的基本动画 任何人都可以提供一些指导线来学习它 提前致谢 您可以先阅读官方指南到动画
  • JAIN API 和 JAIN SLEE API 之间的区别

    我正在阅读有关 SIP 的内容 发现有一个 java API JAIN SIP 可以开发基于 SIP 的应用程序 然后我还发现有JAIN SLEE和SIP servlet 我相信 JSLEE 和 SIP Servlet 是分别部署基于 JA
  • SQL Server 一轮又一轮的划分

    在存储过程中我有一个像这样的表达式 select some val in percents total val 100 some val 如果我使用Round像这样的函数 select some val in percents Round
  • 新手:在函数调用上挂起浏览器

    我刚刚开始学习 JavaScript 想知道为什么当我单击 调用函数 按钮时这个简单的代码片段会挂起 我缺少什么
  • 从 MATLAB 运行多进程应用程序

    我用 VC 编写了一个多进程应用程序 并尝试使用命令行参数执行它system来自 MATLAB 的命令 它可以运行 但只能在一个核心上运行 有什么建议吗 Update 事实上 它甚至没有看到第二个核心 我使用了 OpenMP 并使用了omp
  • 在windows和pycharm中设置SPARK-HOME路径变量

    我是 SPARK 的新手 并尝试在 Windows 中使用它 我能够使用 hadoop 的预构建版本成功下载并安装 Spark 1 4 1 在以下目录中 my spark directory bin 我可以运行 Spark shell 和
  • Google Android应用内购买“内容交付” 如何正确交付内容?

    我目前正在尝试对应用内购买进行编码 我一直在寻找有关 Google 无法处理的一些内容的最佳实践的文档 信息和教程 到目前为止我所做的 我正在运行一个计费服务来处理与 Google Play 的对话 该服务可以完成 示例 交易 并且我的应用
  • Python Kafka 消费者缺少轮询一些消息

    我的 Kafka 消费者的代码如下所示 def read messages from kafka topic my topic consumer KafkaConsumer bootstrap servers my host1 my hos
  • 使用序列化在实体框架中的两个 ObjectContext 之间复制实体

    Preface 我知道这可能已经被视为疯狂的问题 但我正在寻找最有教养的建议和PROVEN关于如何进行复印的建议ALL来自某个实体的数据 即所有实体和关系 ObjectContext到一个新创建的ObjectContext在另一家商店支持
  • 如何将 json 字符串发送回 jquery

    我需要将一些数据发送到外部 php 页面 并且该页面必须将所需的数据发送回 jQuery 我的问题是如何将数据从外部页面发送回发送它的页面上的 jQuery 这是将数据发送到外部页面的 jQuery 代码 function LoadImag
  • GWT 向导未显示在 Eclipse 向导菜单中

    谷歌文档http code google com webtoolkit tools gwtdesigner wizards gwt uibinder dialogbox html在 Eclipse 中显示 GWT 向导 但是 在我的系统上
  • Murmur3 散列 Python 和 Java 实现之间的不同结果

    我有两个不同的程序 希望分别在 Python 和 Java 中使用 Murmur3 哈希相同的字符串 Python 版本 2 7 9 mmh3 hash128 abc 给出 792679617637421130190083470206475
  • 每个类在jar文件中都有两个类文件

    我有一个 jar 文件 每个 java 文件有两个类文件 Java Foo java Bar java 类文件 Foo class Foo class Bar class Bar class 我已经验证每个类只有一个 java 文件 jav
  • 将 powershell 变量值返回给 c# 应用程序

    我正在从 C 运行 powershell 脚本 string scriptPath script myscript ps1 Runspace runspace RunspaceFactory CreateRunspace runspace
  • g++ 的 json-spirit 链接器标志是什么?

    我在任何地方都找不到这个 我已经在我的 ubuntu 服务器上安装了 json spiritapt get install json spirit dev 必须与什么链接器标志一起使用g 使用 json spirit 唯一的图书馆列在该包中
  • WebLogic 的 JavaEE API

    有不同的服务器特定 JavaEE API 实现 例如 glassfish javaee 或 jboss javaee 它们作为单独的 jar 文件分发 并且可以使用 Maven 依赖项附加到某些项目 有没有专门为WebLogic AS设计的
  • UDP 数据包未被 Wireshark 捕获,但被 UDP 应用程序捕获

    我有一个设计并运行的应用程序 它在端口上接收 UDP 广播 该应用程序一直工作得很好 但我想将应用程序收到的数据包与 Wireshark 捕获进行比较 我试图确保以最小的数据丢失捕获尽可能多的数据包 我最初认为我应该运行 Wireshark
  • 使用 GraphicsServices.h/GSEvent 以及使用 Xcode 编译 CLI iPhone 工具

    我将其发送给 KennyTM 在 GitHub 上有所有私有框架标头 但我想我也会在这里问 以防万一有人有一些好的想法或任何方法来帮助我 我正在尝试编写一个命令行实用程序 它发送 GSEvents 来操作键盘 触摸 拖动屏幕上的元素以及操作
  • 即使使用 CREATE 表授予,立即执行也会失败

    我在使用存储过程中的立即执行命令创建表时遇到问题 但是我收到 权限不足 的错误 我检查了其他线程并确保用户具有授予它的 CREATE TABLE 权限 但是我仍然看到同样的错误 SQL gt select from USER SYS PRI