你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Linux开发
oracle 基础(26)
 

鉴于 Oracle 数据库不包含适用于 DDL 的原生锁定机制,您将如何实施该过程?

方法之一是撤消模式拥有者的 create session 系统特权,使其始终无法登录以进行更改。取而代之的是,由有权更改指定模式的对象的应用程序拥有者进行更改。这是一个非常不错的关键数据库对象保护方法,具体体现在它支持为对象更改创建审计跟踪,而其中的跟踪可以追溯到实际用户,而非一般的模式名称。

例如,假设模式为 BANK,表名称为 ACCOUNTS。通过撤消 BANK 的 create session 权限可以禁止其登录数据库。取而代之的是,您允许拥有 create session 权限的 SCOTT 修改 ACCOUNTS。Oracle 用户 SCOTT 实际上由真用户 Scott 拥有,任何其他人都无法访问此用户 ID。SCOTT 对 ACCOUNTS 所做的任何更改都可以直接归因于用户 Scott,从而使职责性成为安全基础架构可行性的主要组成部分。

通常情况下,要使用该方法锁定程序,您应当撤消 SCOTT 的权限。当需要更改程序时,您可以再次赋予该权限(即允许 SCOTT 更改程序),然后再次撤消该授权。

可以肯定的是,这并不是一个处理安全性的巧妙方法。很快您就会遇到问题 - 权限管理并不像“每个对象一个用户”那样简单。在典型的数据库基础架构中,数以百计的用户将获得数以千计的对象的多种类型的权限。撤消权限将消除复杂的依赖关系并带来令人头痛的管理问题。

一个可管理性更高的解决方案是使用 DDL 触发器。使用此方法,您可以根据需要建立授权,但通过 DDL 触发器控制更改。

例如,假设您想要保护模式 ARUP 中一个名为 SECURE_PKG 的程序包。您将创建一个 DDL 模式触发器,如下所示:

1  create or replace trigger no_pkg_alter
2  before ddl
3  on arup.schema
4  begin
5     if (
6          ora_dict_obj_name = 'SECURE_PKG'
7          and
8          ora_sysevent = 'CREATE'
  9     )
10     then
11          raise_application_error (-20001,'Can''t Alter SECURE_PKG');
12     end if;
13  end;
 14  /

在第 6 行和第 8 行中,您检查是否对该程序包进行了更改。注意,对程序包的更改是由 create or replace package 语句做出的;因此,检查的事件是 create。如果您要确保表不受更改,可以在该值中使用 alter。在第 11 行中,当程序包被更改时将产生错误。

设置该触发器后,当拥有权限的用户尝试更改此程序包,甚至当对象的拥有者 (ARUP) 尝试通过运行程序包创建脚本重新创建该程序包时:

create or replace package secure_pkg

他将收到错误:

ERROR at line 1:
ORA-00604:error occurred at recursive SQL level 1
ORA-20001:Can't Alter SECURE_PKG
ORA-06512:at line 8

如果您确实要修改此程序包,可以请求 DBA 通过禁用触发器对它解锁:

alter trigger no_pkg_alter disable
/ 

现在,程序包创建脚本将开始运行。完成运行后,请求 DBA 启用触发器以将其锁定。基础权限保持不变。即便当您允许模式拥有者登录并修改他们所拥有的对象时,该方法也会保护这些对象。此策略支持对更改管理采用一种二人方法。

可能的影响
无,只要每个人都知道当对象准备更改时,DBA 必须解除对象锁定即可。如果您在正式的更改控制过程中加入了此步骤,它将以最主动的方式对可靠性产生影响。

操作计划

  1. 为所有应锁定的对象创建一个列表。注意,并非所有对象都需要进行如此严格的控制,例如,应用程序所有者为保存中间值而创建的临时表就不需要。
  2. 根据列表中的所有这些对象名称创建触发器。使该触发器在初始状态下处于禁用状态。不要将此功能添加到现有触发器中。您应该能够独立控制此触发器。
  3. 标识应解除对象的用户。该用户也许是您。
  4. 记录应何时锁定和解除锁定对象、工作流等。
  5. 启用该触发器。

(编辑:aniston)

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089