关于应用程序
此页上的脚本内容仅用于导航目的,不会以任何方式变更该内容。
应用程序具有以下用途、结构和命名惯例。
应用程序的用途
该应用程序适用于公司中的两种用户。
-
典型用户(员工经理)
-
Application administrators (应用程序管理员)
典型用户可以执行以下任务:
-
获取给定部门中的员工
-
获取给定员工的职务历史记录
-
显示给定雇员的一般信息(姓名、部门、职务、经理、薪金等)
-
更改给定员工的薪金
-
更改给定员工的职务
应用程序管理员可以执行以下任务:
-
更改现有职务的 ID、职称或薪金范围
-
添加新作业
-
更改现有部门的 ID、姓名或经理
-
添加新部门
应用程序的结构
应用程序使用以下方案对象和方案。
应用程序的方案对象
应用程序由以下方案对象组成:
-
四个表,用于存储有关以下内容的数据:
-
作业
-
部门
-
员工
-
员工的职务历史记录
-
-
四个版本视图,其中包含表,使您能够在使用完毕的应用程序时使用基于版本的重新定义 (EBR) 来升级已完成的应用程序
-
两个触发器,用于强制执行业务规则
-
两个序列,用于为新部门和新雇员生成唯一主键
-
两个包。
-
employees_pkg,典型用户的应用程序接口 (application program interface,API)
-
admin_pkg,面向应用程序管理员的 API
典型的用户和应用程序管理员只能通过其 API 访问应用程序。因此,它们只能通过调用程序包子程序来更改数据。
-
另请参见:
-
“关于 Oracle AI Database ”,了解有关方案对象的信息
-
Oracle AI Database Development Guide(了解有关 EBR 的信息)
应用程序的方案
为了安全起见,应用程序使用以下五个方案(或用户),每个方案仅具有所需的权限。
-
app_data方案,它拥有除程序包之外的所有方案对象,并使用hr示例方案中的表中的数据加载其表。创建程序包的开发人员从不在此方案中工作。因此,它们不会意外更改或删除应用程序方案对象。
-
仅拥有程序包
employees_pkg的app_code方案。employees_pkg程序包的开发人员在此方案中工作。 -
仅拥有程序包
admin_pkg的app_admin方案。admin_pkg程序包的开发人员在此方案中工作。 -
app_user用户,即典型的应用程序用户,不拥有任何内容并且只能运行软件包employees_pkg。中间层应用服务器以
app_user用户身份连接到连接池中的数据库。如果此方案被 SQL 注入 bug 入侵,则攻击者只能查看和更改employees_pkg程序包子程序允许其查看和更改的内容。攻击者无法删除表、升级权限、创建或更改方案对象或其他任何内容。 -
app_admin_user用户(应用程序管理员)不拥有任何内容并且只能运行admin_pkg和employees_pkg软件包。此方案的连接池非常小,只有特权用户才能访问它。如果此方案被破坏,则攻击者只能查看和更改
admin_pkg和employees_pkg软件包子程序允许其查看和更改的内容。
假设应用程序只有一种模式不拥有任何内容,并且可以同时运行 employees_pkg 和 admin_pkg 软件包,而不是用户 app_user 和 app_admin_user。对于典型用户和应用程序管理员,此方案的连接池必须足够大。如果 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;
另请参见:
- 关于 Oracle AI Database ,了解有关方案的信息
- 关于示例方案 HR ,了解有关示例方案
HR的信息 - 建议的安全实践
应用程序中的命名惯例
应用程序使用这些命名惯例。
| 项 | 名称 |
|---|---|
| 表 | table # |
| table # 的版本化视图 | 表 |
| 在编辑视图表时触发 | table _{a|b} event [_fer] 其中:
|
| 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 #. column 到 table2 #. column 上的 REF 约束条件 | table1_to_ table2 _fk 1 |
| table1 #. column1 到 table2 #. column2 上的 REF 约束条件 | table1_col1 to table2_col2 _fk 1 2 |
| table # 的序列 | 表序列 |
| 参数名称 | p_ name |
| 本地变量名称 | l_ name |