注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭研后台技术中心的博客

 
 
 
 
 

日志

 
 

Oracle BIEE 11g中ATR文件权限控制详解  

来自bioinfo   2014-03-24 19:38:18|  分类: 默认分类 |举报 |字号 订阅

  下载LOFTER 我的照片书  |

之所以有这篇博文,是因为在一次内部的功能更新操作中,导致用户账号对于个人自己的目录访问权限丢失,从而无法在我的账户中定制特定的仪表盘或者更新操作。

在 定位问题异常后,就是考虑如何解决了。因为Presentation Services中的管理员无法直接访问用户的私人目录,所以在Web界面上直接修改不可行;而只能使用OBIEE的Catalog Manager来解决。通过目录管理器可以在线上或者本地手动为每个用户目录添加访问权限来,但是将上百个用户的权限这么手动一个个添加也是非常耗时甚至 愚笨的方法。是否存在批量修改的接口呢?答案就是后缀名为.atr的二进制文件中。

OBIEE的目录结构很简单,主要有三级目录 shared、system、users以及三个目录对应的权限控制文件(文件以.atr结尾),即atr文件是用来控制实际的Web Services中这三个目录访问权限的。我们可以说OBIEE的权限控制实际上就是基于目录结构,哪些用户可以访问仪表盘,哪些用户可以创建报表,其相 关的ACL数据都在atr文件中。但是对于不同的文件类型,其二进制的文件的版本号(或者叫协议)不一致。下面是users目录下面一个叫 weblogic的用户的atr文件使用二进制编辑器HexEdit(下载地址:www.hexedit.com)打开的内容:

Oracle BIEE 11g中ATR文件权限控制详解 - bioinfo - chuanjin0719 的博客
 
第一段有4个字节,是文件的版本号?
第二段是文件名的ascii码,前4个字节是文件名的长度,按照小尾序组织,其值对应的是文件名字节码长度。特殊地,对于UTF8文件名,系统会预先转换成Unicode码,然后以对应的字节码存储。
第三段是文件的属主信息,同样前4个字节是属主的字节码长度,一样是小尾序。需要申明一点,这里的属主id是经过加密过的信息,一般的用户名可能可以直接计算其对应的HexID,但对应于组用户或者超级用户就不能直接转换得到。如何获取这些加密的数据将在后面讲到。
第四段开始是文件的ACL信息。前2个字节记录的是ACL的条数,第3个字节02可能是一个分割符号;后面4个字节是第一个ACL中的用户ID长度,读取该用户的ID数据后,后面还有2个字节表示的是ACL的控制信息(控制代码见后面的图示),这里是0F 38.
第四段到第五段中有一段字节码,目前其意义不太明确,但应该也是和超级用户有关,因为出现了两处超级用户的ID码。
第五段是权限控制的一些版本号信息,对应的形式类似Key/Value。上例中就是UserVersion=20001207
第六段是该atr文件的控制字节码,4个字节。

Oracle BIEE 11g中ATR文件权限控制详解 - bioinfo - chuanjin0719 的博客
 

ATR文件属性控制
01 只读
04 隐藏
08 系统

Oracle BIEE 11g中ATR文件权限控制详解 - bioinfo - chuanjin0719 的博客
 

Oracle BIEE 11g中ATR文件权限控制详解 - bioinfo - chuanjin0719 的博客
 
ACL控制字节码
FF FF 完全控制
0D 00 修改    读取、写入、删除
08 00 定制    删除
05 00 定制    读取、写入
04 00 定制    写入
03 00 打开    读取、遍历
02 00 遍历
01 00 定制     读取
00 00 无访问权限
10 00 更改权限
20 00 集所有者
00 08 运行publish报表
00 10 调度publish报表
00 20 查看publish报表

Presentation Services中的组用户都是加密的,如何获取其对应的加密字节?
在 root/system/security目录下有users、groups、approles三个目录,分别存放的是对应的用户、组及应用角色属性文 件。然后各个目录下面也是按照目录组织,每个目录都有对应的atr文件,我们需要读取的是这些目录下的子文件,即以3位数字为目录的子文件,一般有一个以 用户名称命名的文件和其atr文件。这里只需要读用户名的那个二进制文件即可,将该用户名和用户名的加密后的字节码对应起来。如下:
Oracle BIEE 11g中ATR文件权限控制详解 - bioinfo - chuanjin0719 的博客
 
这里可以看到二进制文件的组织形式发生了变化,其前3个字节是控制字符或者版本字节,后面的内容是该用户名weblogic对应的加密后的用户ID,而这个用户ID就是后面ACL中的用户ID。

在了解了atr文件的内部构造后,我们就可以编写程序来批量为特定的目录来添加权限了。

现在对于之前遇到的问题,下面给出一个简单的实现:
1、拿到所有的用户ID映射关系(因为用户ID是已经加密过的)

/**
* 遍历特定目录下,获取用户ID
* @param path
* @return
*/
public Map<String,String> load(String path){
Map<String,String> map = new HashMap<String,String>();
File[] files = new File(path).listFiles(directoryFilter);
for(File file : files){
File[] users = file.listFiles(userFilter);
for(File user: users){
SecurityFile sf = new SecurityFile(user);
// 转义Unicode字节码,如#6211#662f#6d4b#8bd5#6587#4ef6#5939
String name = StringEscapeUtils.unescapeJava(user.getName().replace("#", "\\u"));
map.put(name,sf.getName());
}
}
return map;
}

2、ATR文件的读写操作

public void readFile(File file){
try{
input = new AtrFileInput(file);
version = input.readInt();
fileName = input.readString();
// 01 00
input.readShort();
// 02
input.readByte();
ownerName = input.readString();
//07 00
input.readShort();
readACLs();
int avail = input.available();
last = new byte[avail];
input.read(last);
input.close();
} catch(FileNotFoundException e){
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

/**


public void flush(File file) {
try{
output = new AtrFileOutput(file);
output.writeInt(version);
output.writeString(fileName);
output.writeShort((short)1);
output.writeByte((byte)2);
output.writeString(ownerName);
output.writeShort((short)7);

if(acls == null ){
output.writeShort((short)0);
}else{
output.writeShort((short)acls.size());
for(ACL acl : acls){
output.writeByte((byte)2);
acl.write(output);
}
}

output.writeBytes(last);
output.close();
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}

3、编写一个递归过程用来更新某个用户目录下面的所有子目录的ATR文件即可,要注意权限所用的用户ID(由第1步映射获取)和该目录名是一致的。
4、对users目录下面的所有子文件执行上述递归过程即可,并且整个修改权限过程并不限于修改用户账号目录,其他的如shared下面的共享目录也是可行的。

参考:
http://www.rittmanmead.com/2011/10/oracle-bi-ee-11g-security-auditing-web-catalog-security/
http://obiee101.blogspot.sg/2010/02/obiee-atr-files-reports.html
http://debaatobiee.wordpress.com/2009/10/25/bi-catalog-files-how-it-works-the-security-privileges/
  评论这张
 
阅读(964)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017