暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle APEX的内部工作原理

askTom 2017-08-17
829

问题描述

嗨,
我做了一个APEX应用程序; 对象在一个单独的架构中。没有向任何用户发放赠款。
尽管如此,APEX (以用户APEX_PUBLIC_USER身份运行) 可以访问对象。
我的问题是: 如何?

我没有看到任何启用此功能的系统权限 (如执行任何过程)。

一些来源 (包括AskTom questionId 1325202421535) 提到dbms_sys_sql被用来作为另一个用户解析语句,但是这个包不授予任何人。


专家解答

APEX_PUBLIC_USER只是您将连接的会话连接到数据库的方法。

但是,它将通过调用APEX拥有模式中的例程来完成几乎所有工作,例如APEX_050100。现在 * 那个 * 用户有一组完全不同的特权 :-)

SQL> select * from dba_sys_privs
  2  where grantee = 'APEX_050100';

GRANTEE     PRIVILEGE                                ADM COM INH
----------- ---------------------------------------- --- --- ---
APEX_050100 INHERIT ANY PRIVILEGES                   NO  NO  NO
APEX_050100 CREATE JOB                               YES NO  NO
APEX_050100 CREATE MATERIALIZED VIEW                 YES NO  NO
APEX_050100 CREATE TABLE                             YES NO  NO
APEX_050100 UNLIMITED TABLESPACE                     NO  NO  NO
APEX_050100 DROP TABLESPACE                          NO  NO  NO
APEX_050100 ALTER SESSION                            NO  NO  NO
APEX_050100 EXEMPT REDACTION POLICY                  NO  NO  NO
APEX_050100 CREATE OPERATOR                          YES NO  NO
APEX_050100 CREATE VIEW                              YES NO  NO
APEX_050100 CREATE TYPE                              YES NO  NO
APEX_050100 CREATE ROLE                              NO  NO  NO
APEX_050100 CREATE SYNONYM                           YES NO  NO
APEX_050100 ALTER USER                               NO  NO  NO
APEX_050100 CREATE CLUSTER                           YES NO  NO
APEX_050100 CREATE DIMENSION                         YES NO  NO
APEX_050100 CREATE TABLESPACE                        NO  NO  NO
APEX_050100 CREATE TRIGGER                           YES NO  NO
APEX_050100 ALTER DATABASE                           NO  NO  NO
APEX_050100 CREATE PUBLIC SYNONYM                    NO  NO  NO
APEX_050100 CREATE USER                              NO  NO  NO
APEX_050100 CREATE SESSION                           YES NO  NO
APEX_050100 CREATE INDEXTYPE                         YES NO  NO
APEX_050100 CREATE PROCEDURE                         YES NO  NO
APEX_050100 CREATE SEQUENCE                          YES NO  NO
APEX_050100 DROP PUBLIC SYNONYM                      NO  NO  NO
APEX_050100 DROP USER                                NO  NO  NO


如果我们在典型的APEX会话上留下痕迹,您会看到效果如何。在我的AskTOM会话中,我看到一些这样的调用:

PARSING IN CURSOR #2365700804328 len=460 dep=1 uid=111 oct=3 lid=111 tim=94078296179 hv=2948261869 ad='7ffd94698958' sqlid='f85v6nurvptzd'
SELECT /*+result_cache*/ NAME, VALUE FROM WWV_FLOW_PLATFORM_PREFS ...


当我查看DBA_USERS时,我会看到用户111 (uid = 111) 是APEX_050100。稍后在跟踪文件中,我会看到如下内容:

PARSING IN CURSOR #2365700447264 len=79 dep=1 uid=131 oct=47 lid=131 tim=94078425268 hv=30811219 ad='7ffd73aec580' sqlid='d8661xh0xc92m'
begin wwv_flow.g_boolean := not page_brch.question_valid(:P11_QUESTION_ID);
 end;


当我查看DBA_USERS时,我会看到用户131是ASKTOM (在此工作区注册的架构)

顺便说一句,这是您 * 自己 * 应用程序的好模型。拥有一个连接到数据库的帐户,但是该帐户只能访问由拥有源代码或拥有表和源代码的更强大的帐户发布的API。这样,没有人 * 永远 * 必须登录数据库作为拥有您的表的架构,从而降低错误和/或数据泄露的风险。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论