使用技术手段限制DBA的危险操作(3)

实例3:使用Dual Key安全功能

现实场景中,我们希望DBA遵守制度,比如在修改表结构之前,通知OGG相关人。或者为了增加安全性,要求DBA做的重大操作,必须得到老板的批准。DV可以利用Dual Key功能满足这种需求。

简单说,我们可以写一个存储过程,判断流程中需要通知的人是否在线,如果在线,才允许执行相应的操作。而那个需要被通知的人,只要拥有connect数据库的权限就行,他(她)的登录动作就变成了一种授权或被通知后的确认。

具体步骤:

首先给DV的管理员授权,让用户可以访问字典视图和编写存储过程:

SQL> GRANT CREATE PROCEDURE TO dv_manager;

Grant succeeded.

SQL> GRANT SELECT ON V_$SESSION TO dv_manager;

Grant succeeded.

我们假设授权的用户是“BOSS“,而执行操作的用户是”TEST“,相应的判断BOSS是否在线的存储过程如下:

CREATE OR REPLACE FUNCTION check_boss_logged_in

return varchar2

authid definer as

v_session_number number := 0;

v_allow varchar2(10) := 'TRUE';

v_deny varchar2(10) := 'FALSE';

BEGIN

SELECT COUNT(*) INTO v_session_number

FROM SYS.V_$SESSION

WHERE USERNAME = 'BOSS';

IF v_session_number > 0

THEN RETURN v_allow;

ELSE

RETURN v_deny;

END IF;

END check_boss_logged_in;

/

使用DV管理员创建这个Function,然后授权给DVSYS:

SQL>GRANT EXECUTE ON check_boss_logged_in to DVSYS;

创建Rule Set:

Name:Dual Key

Evaluation Options:Any True

规则如下:

创建Command Rule:

clip_image032

这个Command Rule达到的效果是,如果test用户想alter owner为test的table,必须boss用户同时在线,否则报错,无权限。如果是其他人修改test用户下的表,不受这个限制。

最后的效果:

BOSS用户没有在线,那么TEST用户alter table报错

clip_image034

只有在test用户通知了boss用户,或者按照流程,得到了boss用户的批准,boss用户用登录数据库这个动作来代表确认,test用户才可以修改表结构:

clip_image036

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/defb0250fc0a3a6a7482f453b6d9cec8.html