关于应用程序

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

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

应用程序的用途

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

典型用户可以完成以下任务:

应用程序管理员可以完成以下任务:

应用程序的结构

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

应用程序的方案对象

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

另请参见:

应用程序的方案

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

假设应用程序没有 app_user 和 app_admin_user,而只有一个方案不拥有任何内容,可以同时执行 employees_pkg 和 admin_pkg。对于典型用户和应用程序管理员,此方案的连接池必须足够大。如果 employees_pkg 中存在 SQL 注入 bug,则利用 bug 可以访问 admin_pkg 的典型用户。

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

例如,假定您有一个审计追踪表 AUDIT_TRAIL。您希望 employees_pkg 的开发者能够向 AUDIT_TRAIL 写入,但不能读取或更改它。您希望 admin_pkg 的开发者能够读取 AUDIT_TRAIL 并对其进行写入,但不能对其进行更改。如果 AUDIT_TRAIL、employees_pkg 和 admin_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:col1col2 是列名 column1column2 的缩写。约束条件名称不能超过 30 个字符。