Oracle的安全标记算不算bug
创始人
2024-07-28 00:01:02
0

ORACLE提供了安全标记的功能,即OLS,也就是常说的强制访问控制。其模型是建立在BLP安全模型之上,并进行了扩展。

BLP模型的元素是安全级别和范围,即可以对主客体进行安全级别和范围的设定,从而达到控制数据流动的目的,即向下读、向上写的规则。即用户可以读低于用户安全级别的数据,写高于用户安全级别的数据(当然还有范围的约定,这里不介绍了)。

ORACLE扩展了BLP模型,用户可以设置多个安全级别,通过如下接口:

 

  1. SA_USER_ADMIN.SET_LEVELS          
  2. Syntax:      
  3. PROCEDURE SET_LEVELS (policy_name IN VARCHAR2,         
  4. user_name          
  5. IN VARCHAR2,         
  6. max_level          
  7. IN VARCHAR2,         
  8. min_level          
  9. IN VARCHAR2 DEFAULT NULL,         
  10. def_level          
  11. IN VARCHAR2 DEFAULT NULL,         
  12. row_level          
  13. IN VARCHAR2 DEFAULT NULL);          
  14. Parameter                                     Meaning      
  15. policy_name                                 Specifies the policy          
  16. user_name                                 Specifies the user name           
  17. max_level                                 The highest level for read and write access      
  18. min_level                                 The lowest level for write access                         def_level                                 Specifies the default level (equal to or   
  19.                                           greater than the minimum level, and equal                                                                                  to or less than the maximum level)          
  20. row_level                                 Specifies the row level (equal to or greater                                                                                than the minimum level, and equal to or     

 

可以看出,用户标记可以指定最大、最小、默认和行级四种安全级别。这些安全级别之间是有约束关系的

  1. min_level<=max_levelmin_level<=def_level<=max_levelmin_level<=row_level<=def_level  

如果违法这种规则的话,执行此函数就会失败。了解了这么多之后,我们进行实践,以LBACSYS进行登录,执行如下语句

  1. --创建策略P1,并为策略添加安全级别,数值越大代表安全级别越高。  
  2. --L1
  3. EXEC sa_sysdba.create_policy('P1','LABEL_COL');  
  4. EXEC sa_components.create_level('P1', 10, 'L1', 'L1');  
  5. EXEC sa_components.create_level('P1', 20, 'L2', 'L2');  
  6. EXEC sa_components.create_level('P1', 30, 'L3', 'L3');  
  7. EXEC sa_components.create_level('P1', 40, 'L4', 'L4');  
  8. --给用户SYSMAN设置用户标记  
  9. EXEC sa_user_admin.set_levels('P1','SYSMAN','L2', 'L1', 'L2', 'L2');  

根据上面的介绍,这里设置的四种安全级别符合要求。我们通过DBA_SA_USER_LABELS视图可以查看用户的标记。

  1. SQL> SELECT USER_NAME, LABELS FROM DBA_SA_USER_LABELS;  
  2. USER_NAME      
  3. --------------------------------------------------------------------------------      
  4. LABELS      
  5. --------------------------------------------------------------------------------      
  6. SYSMAN      
  7. MAX READ LABEL='L2',MAX WRITE LABEL='L2',MIN WRITE LABEL='L1',DEFAULT READ LABEL      
  8. ='L2',DEFAULT WRITE LABEL='L2',DEFAULT ROW LABEL='L2' 

可以看到MIN WRITE LABEL = L1

同时ORACLE提供了一个系统函数,用于改变标记的值:

  1. Syntax:      
  2. PROCEDURE ALTER_LABEL (         
  3.    policy_name       IN VARCHAR2,         
  4.    label_tag         IN INTEGER,         
  5.    new_label_value   IN VARCHAR2 DEFAULT NULL,         
  6.    new_data_label    IN BOOLEAN  DEFAULT NULL);      
  7. PROCEDURE ALTER_LABEL (  
  8.    policy_name       IN VARCHAR2,         
  9.    label_value       IN VARCHAR2,         
  10.    new_label_value   IN VARCHAR2 DEFAULT NULL,         
  11.    new_data_label    IN BOOLEAN  DEFAULT NULL);      
  12. Table 6–18 Parameters for SA_LABEL_ADMIN.ALTER_LABEL      
  13.    Parameter Name                         Parameter Description   
  14.    policy_name                       Specifies the name of an existing policy       
  15.    label_tag                          Identifies the integer tag assigned to the label                                                                           to be altered       
  16.    label_value                         Identifies the existing character string                                                                                   representation of the label to be altered       
  17.    new_label_value                   Specifies the new character string                                                                                   representation of the label value. If NULL, the                                                                             existing value is not changed.  

此时我们对L1的标记进行改写

  1. EXEC sa_label_admin.alter_label('P1', 'L1', 'L4', TRUE); 

执行成功,我们查看用户标记表,发现如下所示:

  1. SQL> SELECT USER_NAME, LABELS FROM DBA_SA_USER_LABELS;  
  2. USER_NAME  
  3. --------------------------------------------------------------------------------  
  4. LABELS  
  5. --------------------------------------------------------------------------------  
  6. SYSMAN  
  7. MAX READ LABEL='L2',MAX WRITE LABEL='L2',MIN WRITE LABEL='L4',DEFAULT READ LABEL  
  8. ='L2',DEFAULT WRITE LABEL='L2',DEFAULT ROW LABEL='L2' 

可以看出MIN WRITE LABEL变成了L4,其他的LABEL还是L2,这时的用户标记已经是不合法的了,在这种情况下,在执行相应操作时,很多操作会被禁止,比如对打了标记的表进行更新操作,因为此时的用户标记在进行访问判断时永远是恒假值(不过此时系统不会崩溃,有点失望..),以上实验的版本为11.1.0.6.0

原文链接:http://www.cnblogs.com/nocode/archive/2011/05/04/2036873.html

【编辑推荐】

  1. 浅述当前模式读与一致性读续
  2. 浅述当前模式读与一致性读的区别
  3. 告诉你,如何成就DBA职业生涯
  4. 阿里巴巴运维部DBA张瑞:Oracle与MySQL搭档满足业务需求
  5. Oracle业务就绪存储系统助力企业实现存储升级

 

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...