【问题标题】:System and database leveled users in Oracle DatabaseOracle 数据库中的系统和数据库级用户
【发布时间】:2015-03-24 02:16:33
【问题描述】:

我使用的是 Oracle Database EX 11.2.0.2.0,我在那里创建了一个非常简单的数据库。 现在的问题是我想设置多个具有不同权限的用户。我找到了那个话题:How to create a user in Oracle 11g and grant permissions 但我在任何地方都找不到有关用户帐户的基本信息: 创建系统级用户和特定数据库级用户有什么区别? 我已经以 SYSTEM 身份登录 sqlplus 并执行了以下命令:

CREATE USER TEST IDENTIFIED BY password;
GRANT CONNECT TO TEST;

现在的问题是我的数据库实际上被称为 BASE 与一个名为 PAYMENTS 的表,并为我无法执行的新创建的用户提供任何权限:

GRANT SELECT ON PAYMENTS TO TEST;

但我必须输入:

GRANT SELECT ON BASE.PAYMENTS TO TEST;

所以我想我错过了一些东西。是否有任何方式将创建的用户连接到特定数据库?这样新创建的用户将在 Oracle APEX 中作为数据库用户可见?

【问题讨论】:

    标签: sql database oracle


    【解决方案1】:

    在其他架构中引用对象时,您必须提供架构名称。其他用户可能有一个同名的表。当前您使用系统用户登录,这是不可取的。在 BASE 模式(de Oracle DB 中用户的另一个名称)中创建对象时,为什么不给用户一些额外的权限(比如授予权限)? 您的问题的核心是您想授予用户 A 在 B 拥有的对象上的权限,以用户 C 身份登录。在这种情况下,您必须非常具体地向 Oracle 授予哪些权限;)

    【讨论】:

    • 感谢您的回答。所以这意味着我必须作为 BASE 的所有者登录并在那里创建一个新用户?我已经尝试过了,但是如何从控制台登录该用户呢?使用 sqlplus 该用户不可见。
    • 我不确定我是否理解您想要实现的目标。可以创建用户并作为系统执行其他管理任务。设置好之后,最好以该用户身份登录 SQL*Plus。
    • 使用以下命令登录到 sqlplus: sqlplus base@xe 其中 base 是您的用户,xe 是数据库的名称。然后您以用户群身份登录。如果想知道数据库中有哪些用户,只需执行查询
      select username from all_users;
    • 我的问题的核心是我正在使用带有以下“jdbc:oracle:thin:@localhost:1521/XE”的 JDBC 连接到数据库。所以 XE 是 Oracle 中的默认数据库,而我的 BASE 只是模式?我的所有表都在那个“BASE”事物中(无论它是什么),并且想设置一些具有不同权限的用户。当我创建“BASE”用户登录到 Oracle APEX 并尝试使用命令“sqlplus username@base”登录时,它显示“ORA-12154:无法解析指定的连接标识符”。
    • 以及当我使用“jdbc:oracle:thin:@localhost:1521/XE”连接到数据库时,我可以以 SYSTEM 或在“SYSTEM 级别”创建的任何用户身份登录;我想连接到数据库,然后只能以 BASE 用户身份登录到数据库 BASE,而不是像 SYSTEM 这样的全局用户或我创建的任何用户都以 SYSTEM 身份登录。
    【解决方案2】:

    用户和模式在 Oracle 中是同义词——基本上。架构是用户拥有的对象的集合。

    为了得到你想要的,你需要创建没有权限的用户来创建任何东西,并且只能从其他人的对象中进行选择。

    【讨论】:

      猜你喜欢
      • 2019-12-27
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 2018-05-05
      相关资源
      最近更新 更多