关于应用程序

此页上的脚本内容仅用于导航目的,不会以任何方式变更该内容。

应用程序具有以下用途、结构和命名惯例。

应用程序的用途

该应用程序适用于公司中的两种用户。

典型用户可以执行以下任务:

应用程序管理员可以执行以下任务:

应用程序的结构

应用程序使用以下方案对象和方案。

应用程序的方案对象

应用程序由以下方案对象组成:

另请参见:

应用程序的方案

为了安全起见,应用程序使用以下五个方案(或用户),每个方案具有所需的权限。

假设应用程序只有一种模式不拥有任何内容,并且可以同时运行 employees_pkgadmin_pkg 软件包,而不是用户 app_userapp_admin_user。对于典型用户和应用程序管理员,此方案的连接池必须足够大。如果 employees_pkg 软件包中存在 SQL 注入 bug,则利用 bug 可以访问 admin_pkg 软件包的典型用户。

假设应用程序只有一个拥有所有方案对象(包括程序包)的方案,而不是 app_dataapp_codeapp_admin 方案。然后,程序包对表具有所有权限,这既不必要又不符合要求。

例如,假定您有一个审计线索表 AUDIT_TRAIL。您希望 employees_pkg 软件包的开发人员能够写入 AUDIT_TRAIL 表,但不能读取或更改该表。您希望 admin_pkg 软件包的开发者能够读取 AUDIT_TRAIL 表并写入该表,但不能对其进行更改。如果 AUDIT_TRAIL 表、employees_pkgadmin_pkg 软件包属于同一方案,则两个软件包的开发人员对 AUDIT_TRAIL 表具有所有权限。但是,如果 AUDIT_TRAIL 表属于 app_data 方案,则 employees_pkg 软件包属于 app_code 方案,而 admin_pkg 软件包属于 app_admin 方案,则可以作为 app_data 方案连接到数据库并运行以下命令:

GRANT INSERT ON AUDIT_TRAIL TO app_code;
GRANT INSERT, SELECT ON AUDIT_TRAIL TO app_admin;

另请参见:

应用程序中的命名惯例

应用程序使用这些命名惯例。

名称
table #
table # 的版本化视图
在编辑视图时触发

table _{a|b} event [_fer] 其中:

  • a 标识 AFTER 触发器。

  • b 标识触发器。

  • fer 标识 FOR EACH ROW 触发器。

  • event 标识触发触发触发器的事件。例如:i 表示 INSERT,iu 表示 INSERT 或 UPDATE,d 表示 DELETE。

table # 中的 PRIMARY KEY 约束条件 table _pk
table #. column 上的 NOT NULL 约束条件 table_column _not_null 1
table #. column 上的 UNIQUE 约束条件 table_column _unique 1
table #. column 执行 CHECK 约束条件 table_column _check 1
table1 #. columntable2 #. column 上的 REF 约束条件 table1_to_ table2 _fk 1
table1 #. column1table2 #. column2 上的 REF 约束条件 table1_col1 to table2_col2 _fk 1 2
table # 的序列 表序列
参数名称 p_ name
本地变量名称 l_ name
  1. tabletable1table2 缩写为 emp(表示员工)、dept(表示部门)和 job_history(表示职务历史记录)。 2 3 4 5

  2. col1col2 是列名 column1column2 的缩写。约束条件名称不能超过 30 个字符。