【问题标题】:Oracle Application Express 11gOracle Application Express 11g
【发布时间】:2019-03-11 22:19:26
【问题描述】:

我是 Oracle 新手,想练习 SQL。

我下载了适用于 Windows x64 的 Application Express Edition 11g。我按照说明创建了一个工作区和用户。

但是,当我尝试创建表时,出现错误“ORA-20000:用户 xxx 对架构没有权限。检查权限时出错。

但是,当我去查看管理中的用户时,会说我是工作区管理员。我似乎也无法使用安装时创建的密码以 SYSTEM 或 SYS 身份登录。

我很困惑。

【问题讨论】:

  • 简答:错误与架构xxx的数据库权限有关,与您的APEX管理员用户无关。

标签: oracle oracle-apex privileges


【解决方案1】:

您正在处理两个术语:

  • 包含表和数据的数据库 - 表属于 SYS 或 SYSTEM 等用户 - 您根本不应该使用它们,除非解锁现有用户(HR 或 SCOTT;无论是哪个)以便将其用于练习
  • Application Express,它是一种用于访问数据库和创建应用程序的工具,这些应用程序将管理存储在表中的数据。以管理员身份登录后,您可以创建工作区(映射到数据库用户/模式)和开发人员(将创建应用程序)。这个“管理员”用户与数据库所有者(sys/system)非常不同,因此您无法使用 sys 作为用户名及其密码登录 Apex

当您安装 11g XE 数据库(我认为它具有内置 Apex 4.x 版 - 它不是 Apex 11g,它不存在)时,在操作系统命令提示符处运行 SQL*Plus 并连接作为 SYS:

C:\>sqlplus sys@xe as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Sub Lis 6 20:26:19 2018

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL> 

列出数据库中的用户:

SQL> select username, account_status from dba_users order by username;

USERNAME                       ACCOUNT_STATUS
------------------------------ --------------------------------
ANONYMOUS                      OPEN
APEX_PUBLIC_USER               LOCKED
APEX_040000                    LOCKED
APPQOSSYS                      EXPIRED & LOCKED
CTXSYS                         EXPIRED & LOCKED
DBSNMP                         EXPIRED & LOCKED
DIP                            EXPIRED & LOCKED
FLOWS_FILES                    LOCKED
HR                             LOCKED
IMPORTER                       OPEN
MDSYS                          EXPIRED & LOCKED
MIKE                           OPEN
ORACLE_OCM                     EXPIRED & LOCKED
OUTLN                          EXPIRED & LOCKED
SCOTT                          OPEN
SYS                            OPEN
SYSTEM                         OPEN
XDB                            EXPIRED & LOCKED
XS$NULL                        EXPIRED & LOCKED

19 rows selected.

SQL>

看到 HR(人力资源)用户了吗?它被锁定。我们将解锁它并更改其密码(更改为“hr”),以便您可以在 Apex 中使用它,因为它已经包含几个充满数据的表。

SQL> alter user hr account unlock;

User altered.

SQL> alter user hr identified by hr;

User altered.

SQL>

以 HR 身份连接,只是为了查看其中包含的内容:

SQL> connect hr/hr@xe
Connected.
SQL> select * From tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
COUNTRIES                      TABLE
DEPARTMENTS                    TABLE
DEPT                           TABLE
EMPLOYEES                      TABLE
EMP_DETAILS_VIEW               VIEW
INSTRUCTOR                     TABLE
JOBS                           TABLE
JOB_HISTORY                    TABLE
LOCATIONS                      TABLE
PRODUCT                        TABLE
REGIONS                        TABLE
RIGHTS                         TABLE
TEACHES                        TABLE
USERS                          TABLE

14 rows selected.

SQL>

如果您想创建自己的表,请在 HR 模式中进行。正如我所说,不要管 SYS 和 SYSTEM;它们很特别,您不会将它们用于日常目的。如果你做了一些不寻常的,你可能会破坏数据库。

好的;现在运行 Apex,以管理员身份连接,导航到“管理工作区”,然后:

  • 创建工作区 - 按照向导操作。当被问及“重用现有架构”时,回答“是”并从值列表中选择 HR
  • 管理开发者和用户 - 创建用户。按照向导。作为工作空间,选择之前创建的工作空间,设置密码

完成后,注销管理员并以新创建的用户身份登录 - 提供工作区名称、用户名和密码 - 这应该可以让您进入。一旦您进入 Apex - 作为开发人员 - 您可以创建您的第一个页面(交互式报告可能是一个不错的选择)。

祝你好运!

[编辑:11gXE 上的内置 Apex]

  • 点击开始-所有程序-Oracle数据库11g快捷版-开始
  • 打开一个页面,提供几个红色按钮;最后一个是“Application Express”;点击它
  • 登录要求具有 DBA 权限的数据库用户;输入用户名 = SYS(或 SYSTEM)及其密码
  • 您现在被重定向到“创建 Apex 工作区”页面。项目标签带有下划线;这意味着它们包含帮助(请随意点击)。第一项是“数据库用户”单选按钮,它提供“新建”和“使用现有” - 您可以选择“使用现有”
  • 对于“数据库用户名”,从选择列表中选择“HR”。 HR现在解锁了,对吧?如果它已过期,请务必更改它以设置密码 (alter user hr identified by hr)
  • Application Express 用户名(和密码)代表与 Apex 相关的用户名(即不是数据库用户) - 您将使用它来登录 Apex

如果您想查看哪些工作区已经存在,请以 SYS 身份连接到数据库(在操作系统命令提示符下使用 SQLPlus):

C:\>sqlplus sys@xe as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Ned Lis 7 12:40:34 2018

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL> select * from all_users where username like 'APEX%';

USERNAME                          USER_ID CREATED
------------------------------ ---------- --------
APEX_040000                            47 29.05.14
APEX_PUBLIC_USER                       45 29.05.14

SQL> -- describe table that contains info about workspaces
SQL> desc apex_040000.apex_workspaces
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 WORKSPACE                                 NOT NULL VARCHAR2(255)
 SOURCE_IDENTIFIER                                  VARCHAR2(8)
 SCHEMAS                                            NUMBER
 LAST_PURGED_SESSION                                DATE
 ALLOW_APP_BUILDING_YN                              VARCHAR2(1)
 ALLOW_SQL_WORKSHOP_YN                              VARCHAR2(1)
 ALLOW_WEBSHEET_DEV_YN                              VARCHAR2(1)
 ALLOW_TEAM_DEVELOPMENT_YN                          VARCHAR2(1)
 ALLOW_TO_BE_PURGED_YN                              VARCHAR2(1)
 SESSIONS                                           NUMBER
 APPLICATIONS                                       NUMBER
 APPLICATION_PAGES                                  NUMBER
 APEX_USERS                                         NUMBER
 APEX_DEVELOPERS                                    NUMBER
 APEX_WORKSPACE_ADMINISTRATORS                      NUMBER
 FILES                                              NUMBER
 SQL_SCRIPTS                                        NUMBER
 TRANSLATION_MESSAGES                               NUMBER
 FILE_STORAGE                                       NUMBER
 LAST_LOGGED_PAGE_VIEW                              DATE
 PAGE_VIEWS                                         NUMBER
 WORKSPACE_ID                              NOT NULL NUMBER

SQL> col workspace format a10
SQL> select workspace, source_identifier, apex_developers
  2  from apex_040000.apex_workspaces;

WORKSPACE  SOURCE_I APEX_DEVELOPERS
---------- -------- ---------------
HR         HR                     1
INTERNAL                          0

SQL>

如果 HR 工作区已经包含,则表示您已经创建了它。

在网络浏览器中,以管理员身份连接(使用地址http://127.0.0.1:8080/apex/apex_admin)。 (工作区名称是“内部”;您不必输入它)。用户名 = 管理员,密码 = ...嗯,不确定。试试 SYS 密码。如果无法连接,您可以更改该密码。在磁盘上找到名为 APXCHPWD.SQL(“Apex 更改密码”)的文件;例如,它将位于 C:\oraclexe\app\oracle\product\11.2.0\server\apex\apxchpwd.sql 目录中。在 SQLPlus 中,以 SYS 身份连接,执行该文件:

SQL> show user
USER is "SYS"
SQL> @C:\oraclexe\app\oracle\product\11.2.0\server\apex\apxchpwd.sql
Enter a value below for the password for the Application Express ADMIN user.


Enter a password for the ADMIN user              []

Session altered.

...changing password for ADMIN

PL/SQL procedure successfully completed.


Commit complete.

SQL>

管理员现在将拥有您刚刚输入的密码,所以 - 返回 Apex 管理员,连接;您必须更改该密码 - 这样做,然后重新连接。

您现在将看到“管理工作区”按钮。在那里,有许多链接可以做stuff。如果需要,您可以删除 HR 工作区(按照“删除工作区”链接)并重新创建它。

下一步是创建开发者 - 使用“管理开发者和用户”链接。完成此操作后,您应该能够以开发人员身份登录 Apex,使用“HR”作为工作区名称、开发人员用户名和密码作为凭据。

为了能够同时以 admin 身份调整 Apex 并以开发人员身份连接,请使用 不同的浏览器 打开一个新连接(例如,Chrome 用于一件事, Internet Explorer for another) - 如果您使用相同的浏览器(但不同的选项卡,甚至完全是新的浏览器会话),它将无法工作 - 新连接将终止之前的连接。

我希望以上内容可以帮助您入门。

显然,内置的 Apex 版本是 4.0.2(相当旧的,至少 5-6 年),但一开始会做。升级到更新版本并不困难 - 下载并运行 SQL 文件,它会为您完成所有工作。只需按照安装指南操作即可。

我还建议您阅读并遵循 4.0 Apex 用户指南,这样我就不必在 Stack Overflow 上创建教程了 :)

【讨论】:

  • 我按照这些说明进行操作,似乎一切正常,但是当我尝试使用 Workspace HR 在新用户名下创建表时,我仍然遇到相同的错误。我能看到的唯一区别是,当我解锁 HR 帐户时,它也显示为过期。最后的说明似乎不适合我看到的界面。没有“管理工作区”我似乎没有在任何地方使用现有架构的选项....
  • 我似乎没有在任何地方使用现有架构的选项。我进入“创建 Application Express 工作区”屏幕。我之前创建了一个名为 HR 的工作区。我有一个数据库用户(我假设它是模式),当我选择使用现有选项并输入 HR 因为数据库用户名说“工作区名称已经存在”时,当我输入其他名称时它说“数据库用户不存在”。因此,据我所知,我不能使用现有的数据库用户/模式,我总是必须创建一个新的工作区,该工作区似乎也创建了同名的模式......
  • 我通过添加更多信息来编辑我的答案。请看一下。
  • 感谢您的帮助,但仍然获得相同的错误检查权限。你写的所有东西我都做了,所有的工作。我在以管理员身份登录时更改了浏览器,这确实有效,因此我能够管理工作区。我添加了一个开发人员,然后在另一个浏览器中使用开发人员用户名登录。同样的错误。我要重新开始了。卸载并重新安装软件。我也会看看用户指南!对不起
  • 好的,我什么都试过了。我重新安装并遵循了您的教程(我还阅读了用户指南 - 几乎像泥巴一样清晰!)仍然没有高兴,在尝试以我的开发人员角色创建表时获得“错误检查权限”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-22
  • 1970-01-01
  • 2011-12-15
相关资源
最近更新 更多