【问题标题】:Oracle - insufficient privilegesOracle - 权限不足
【发布时间】:2018-03-12 17:41:57
【问题描述】:

我创建了这个用户“user1”,以便在上面创建我自己的表和触发器,因为我认为将表和触发器创建为 SYS 不是一个好主意(我遇到了一个例外,我无法创建在 SYS 创建的特定表上触发)。

这个“user1”有以下权限:

create user user1 identified by password1;
grant connect to user1 ;
grant create session to user1 ;
grant resource to user1 ;
grant unlimited tablespace to user1 ;
grant all privileges to user1 ;
grant dba to user1 ;

但是,我仍然无法连接到数据库,并且在尝试登录时出现“权限不足”错误。

缺少哪些特权?

这是输出:

它是德语,意思是:

-user1 created
-grant succeeded
-connected
-The established connection got closed with "Connected"-Script command

然后当我尝试登录时,出现以下错误:

【问题讨论】:

  • 你确定你没有发出create user "user1" identified by password1,而不是create user user1 identified by password1
  • 用撇号会是正确的方式吗?因为我在没有他们的情况下发出了命令。
  • 不,您的命令没有问题,一切正常,甚至更多。我只是想知道您是否在任何步骤错误地发出了"user1",而不是user1
  • resourceconnect 是旧的默认角色,已被 Oracle 弃用。最好创建旧角色或脚本以授予适当的权限集。在现实生活中,没有适合grant all privileges 的情况。但是,您的陈述应该有效,所以无论发生什么都不是您认为正在发生的事情。如果您希望我们提供更多帮助,请发布实际输出。

标签: database oracle oracle11g


【解决方案1】:

男孩,你授予了所有可能的(和不可能的)特权:)

信不信由你,那些 - 实际上 - 工作。看看我的 11g XE 发生了什么:

SQL> show user
USER is "SYS"
SQL> create user user1 identified by password1;

User created.

SQL> grant connect to user1 ;

Grant succeeded.

SQL> grant create session to user1 ;

Grant succeeded.

SQL> grant resource to user1 ;

Grant succeeded.

SQL> grant unlimited tablespace to user1 ;

Grant succeeded.

SQL> grant all privileges to user1 ;

Grant succeeded.

SQL> grant dba to user1 ;

Grant succeeded.

SQL> connect user1/password1@xe
Connected.

Session altered.

SQL> create table test (id number);

Table created.

SQL>

看到了吗?一切似乎都很好 - 我以 USER1 身份连接并创建了一个表。您是否介意发布与我相同的输出,但这次在您的数据库上运行,以便我们可以看到您做了什么以及 Oracle 如何响应?

顺便说一句,我建议你不要像以前那样做:创建用户时,只授予他需要的最低权限集。如果事实证明他需要其他东西,您可以轻松地授予它。授予它 DBA 角色是,嗯,有点危险。我通常是这样做的:

SQL> connect sys@xe as sysdba
Enter password:
Connected.

Session altered.

SQL> drop user user1 cascade;

User dropped.

SQL> select tablespace_name from dba_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS

SQL> create user user1 identified by password1
  2  default tablespace users
  3  temporary tablespace temp
  4  profile default
  5  quota unlimited on users;

User created.

SQL> grant create session to user1;

Grant succeeded.

SQL> grant create table to user1;

Grant succeeded.

SQL> connect user1/password1@xe
Connected.

Session altered.

SQL> create table test (id number);

Table created.

SQL>

【讨论】:

  • 我明白了;如果您没有在 SQL Developer 的工作表窗口中连接,但实际上创建了一个全新的连接(您知道,单击绿色的“+”按钮并填写所有必填字段),会发生什么?
  • 当我创建一个新连接(使用“+”按钮)和一些表时,由于出现错误,我仍然无法在使用“user1”创建的表上创建触发器“无法在 SYS 拥有的对象上创建触发器”
  • 是 SQL Developer。尽管它在很多方面都像 SQL Plus 一样“行动”,但它不是 SQL Plus,所以 - CONNECT 不能像您期望的那样工作。在创建触发器时出现错误:您确定您现在已作为 USER1 连接吗?这是什么结果:select owner from all_tables where table_name = 'YOUR_TABLE_NAME_HERE';
  • 哦,它有效 - 对不起。有很多错误,底部显示“触发器 ___ 已编译”,所以我没有看到它:D
猜你喜欢
  • 2015-06-25
  • 2023-03-11
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2010-11-18
相关资源
最近更新 更多