Archive for December, 2006

Dec 26 2006

年终盘点-2006年度使用频率最高的5个软件

Published by kamus under Apps

在2005年写过一篇2005年度使用频率最高的5个软件,时间刷刷地就又过了一年。

那么今年排名前5的软件有什么变化吗?

1,2没有变化,仍然是Total CommanderFirefox,其中TC已经推出7.0beta版了,做了不少有意思的改动,等到正式版以后应该会换上用用,而FF则在年末的时候推出了2.0正式版,虽然没有太多的惊喜,但是升级却是势在必行的。

原来排名第3,第4的金山词霸2003(现在已经升级到2007)和Password Agent都已经不再使用了,替代品分别是网络版的金山爱词霸以及开源的KeePass

金山爱词霸做的很不错,在这个网络无处不在的时代,一个网络版的词典足以应付日常使用了。
KeePass在功能上一点儿也不弱于Password Agent,而且又是开源Free的,没有任何理由不选用。

2005年的第5名是WordPress,这个在2006年仍然是我这个blog站点的平台,但是我却不想让它入选了,因为WP仅仅是一个平台,不应该归入应用软件类。

那么2006年排名前五的软件究竟是什么?

1。Total Commander
2。FireFox
3。SecureCRT:这个因为工作性质的变化,所以在工作时间大多数是要用这个软件登录服务器主机的。
4。KeePass
5。我放弃了,在这个大多数应用都可以在FireFox中实现的年代,越来越少的桌面软件将被使用。

4 responses so far

Dec 24 2006

利用VPD细粒度访问策略实现行级安全性 Step By Step

Published by kamus under Oracle RDBMS

Oracle8i以后的版本都提供了VPD(virtual private database 虚拟专用数据库)这样一个强大的功能来实现呼声日益增高的系统安全性要求。

通过设置基于VPD的细粒度访问策略,我们可以只通过DBA的工作(不需要修改应用,也就是应用透明化)就可以实现用户只能访问自己有权限访问的数据,当然如果需要更加复杂的权限控制开发人员的参与还是必不可少的。

下面用一个简单的例子来实现这样的功能,在EMP表中的用户登录数据库以后只能查询和更新自己所属部门的其它员工资料,不是本部门的不会显示也不允许更新。

1. 我们需要用到3个用户,一个是拥有EMP表的SCOTT用户,一个是用于设置VPD策略的KAMUS用户,另外一个是在EMP表中有记录的SMITH用户。
SCOTT用户可以利用$ORACLE_HOME/rdbms/admin/scott.sql创建。
@?/rdbms/admin/scott.sql
KAMUS用户需要能够执行DBMS_RLS包的权限。
grant execute on dbms_rls to kamus;
SMITH用户需要能够读取并更新EMP表的权限。
grant select on scott.emp to smith;

2. 首先用KAMUS用户创建策略权限表。为方便起见我们直接通过EMP表创建,本策略表中包含了员工姓名和所属部门编号。为了更加完善策略函数,我们创建完策略表后在表中新增一条记录,让SMITH用户同时属于20和10这两个部门。

  1. SQL> create table access_policy as select ename,deptno from scott.emp;
  2.  
  3. Table created
  4.  
  5. SQL> select * from access_policy;
  6.  
  7. ENAME      DEPTNO
  8. ---------- ------
  9. SMITH          20
  10. ALLEN          30
  11. WARD           30
  12. JONES          20
  13. MARTIN         30
  14. BLAKE          30
  15. CLARK          10
  16. KING           10
  17. TURNER         30
  18. JAMES          30
  19. FORD           20
  20. MILLER         10
  21.  
  22. 12 rows selected
  23.  
  24. SQL> insert into access_policy values('SMITH',10);
  25.  
  26. 1 row inserted
  27.  
  28. SQL> commit;
  29.  
  30. Commit complete

3. KAMUS用户创建VPD策略需要的函数。

  1. create or replace function get_user_dept_id
  2. (
  3.    p_schema in varchar2,
  4.    p_table in varchar2
  5. )
  6.    return varchar2
  7. as
  8.    l_retstr varchar2(2000);
  9. begin
  10.    if (p_schema = user) then
  11.       l_retstr := null;
  12.    else
  13.       for user_rec in
  14.       (
  15.          select deptno
  16.          from access_policy
  17.          where ename = USER
  18.       ) loop
  19.          l_retstr := l_retstr||','||user_rec.deptno;
  20.       end loop;
  21.       l_retstr := ltrim(l_retstr,',');     
  22.       if (l_retstr is null) then
  23.          l_retstr := '1=2';
  24.       else
  25.           l_retstr := 'DEPTNO IN ('||l_retstr||')';
  26.       end if;
  27.    end if;
  28.    return l_retstr;
  29. end;

该函数实现以下功能:
如果使用SCOTT用户登录,因为表是属于该用户的,所以不加任何限制。
如果使用其它用户登录(SYS用户不受此限制),那么根据EMP表中该用户的所属部门决定哪些记录允许该用户操作,本例中10和20这两个部门的员工SMITH用户将都能看见。
如果登录的用户不在EMP表中,那么该用户查看不到任何数据,比如KAMUS用户。

注意:
VPD策略函数必须包含两个参数,本例中是p_schema和p_table,即使这两个参数在函数中没有用到,也必须包含。否则在后面检索EMP表数据的时候将会报:
PLS-00306: 调用 ‘GET_USER_DEPT_ID’ 时参数个数或类型错误。

我们用SMITH用户登录数据库来测试一下这个函数的返回值。

  1. SQL> select kamus.get_user_dept_id('SCOTT','EMP') from dual;
  2.  
  3. KAMUS.GET_USER_DEPT_ID('SCOTT'
  4. --------------------------------------------------------------------------------
  5. DEPTNO IN (20,10)

也就是说基于VPD的细粒度访问策略实际上就是在用户提交一个SQL以后会将策略函数返回值添加到where语句后面,通过这种方式来限制用户对于表中数据的访问。

4. 用KAMUS用户创建VPD策略。

  1. begin
  2. dbms_rls.add_policy (
  3.     object_schema    => 'SCOTT',
  4.     object_name      => 'EMP',
  5.     policy_name      => 'EMP_SEL_POLICY',
  6.     function_schema  => 'KAMUS',
  7.     policy_function  => 'GET_USER_DEPT_ID',
  8.     statement_types  => 'SELECT'
  9.  );
  10. end;
  11. /

这是用于select的策略。

  1. begin
  2. dbms_rls.add_policy (
  3.     object_schema    => 'SCOTT',
  4.     object_name      => 'EMP',
  5.     policy_name      => 'EMP_IUD_POLICY',
  6.     function_schema  => 'KAMUS',
  7.     policy_function  => 'GET_USER_DEPT_ID',
  8.     statement_types  => 'INSERT, UPDATE, DELETE',
  9.     update_check     => TRUE
  10.  );
  11. end;
  12. /

这是用于DML的策略。

5. 至此为止我们的VPD方案就已经设置完毕了。下面我们测试一下。

  1. SQL> conn scott/tiger
  2. 已连接。
  3. --SCOTT用户可以选择出全部的12条记录
  4. SQL> select count(*) from emp
  5.  
  6.   COUNT(*)
  7. ----------
  8.         12
  9.  
  10. SQL> conn smith/smith
  11. 已连接。
  12. --SMITH用户只能选择出属于1020部门的6条记录
  13. SQL> select count(*) from scott.emp
  14.  
  15.   COUNT(*)
  16. ----------
  17.          6
  18.     --更新也只能更新6行记录
  19. SQL> update scott.emp set sal=sal+100;
  20.  
  21. 已更新6行。
  22. --如果尝试插入一个其它部门的员工将会报错
  23. SQL> insert into scott.emp(empno,ename,deptno) values(9999,'VPD',30);
  24. insert into scott.emp(empno,ename,deptno) values(9999,'VPD',30)
  25.                   *
  26. 1 行出现错误:
  27. ORA-28115: 策略违反检验选项
  28. --即使指定了要更新30部门的数据也是一条都无法更新
  29. SQL> update scott.emp set sal=sal+100 where deptno=30;
  30.  
  31. 已更新0行。
  32. --同样删除也只能删除6行数据
  33. SQL> delete scott.emp;
  34.  
  35. 已删除6行。

结论:
通过基于VPD的细粒度访问策略可以很简单地在数据库这个层面上完成对于应用数据的安全性保护,而如果通过SYS_CONTEXT以及数据库登录触发器来编写更加复杂的VPD策略函数的话,就能实现非常强大的数据安全性功能。

后续:
Oracle数据库安全领域有很多我还没有接触到的东西需要学习,下面一篇文章我将会介绍同样是基于VPD的更深一步的安全策略解决方案 - Label Security,敬请期待

4 responses so far

Dec 22 2006

Oracle10gR2 RAC on IBM AIX 5L

Published by kamus under Oracle RDBMS

昨天和今天在IBM AIX5L上安装Oracle10gR2的RAC环境,这个环境并没有使用10g的全部新技术,而是一个混合体。数据文件仍然是裸设备,只有Flashback Area使用的是ASM,所以HACMP和CRS共存。碰到的问题总结一下:

1。在CRS安装的时候,Installer总是无法正确获得Public名称,虽然hostname和/etc/hosts都已经反复校验过了。
最后发现,Installer在启动了HACMP的环境中将自动获取HA的Cluster Node Name而不是hostname,将Cluster node name修改为跟hostname相同以后,问题解决。这个问题烦恼了我昨天一个下午和一个晚上。

2。在CRS安装最后,报告OCR盘update失败。
Metalink上有寥寥可数的几个例子都没有借鉴意义,最后发现居然是最低级的问题,IBM在做两个节点的裸设备时,没有完成同步,导致第二个节点的OCR裸设备没有写入的权限。重新在第二个节点上import裸设备,问题解决。

3。CRS安装最后报en0不是public节点,无法正常配置VIP。
手动运行vipca,手动配置VIP。

RAC这块儿很不熟悉,还有很多文档要看。

One response so far

Dec 18 2006

Cyril Magic!!

Published by kamus under Misc

五爷的blog上提到了Cyril,这个活跃在日本的街头魔术师确实是神一般的人。

就地取材,在众目睽睽之下让你目瞪口呆,然后Cyril扬长而去。

China Town的那一场,Cyril变没了一只鹦鹉,然后从旁边的杂货店里取了一个鸡蛋和一个柠檬,将鸡蛋变没了,然后取了一个桔子,把手边的柠檬变没了,至此为止也许还无惊人之处,大多数街头魔术师或许都可以轻而易举地实现这些。但是,接下来,Cyril取出一把刀,切开了桔子,取出了刚才那个柠檬!再切开柠檬,取出了刚才那个鸡蛋,最后捏碎鸡蛋,变回了最初的那只鹦鹉。

除了五爷blog里面给出的4段惊天地泣鬼神的video,这里还有更多。

虽然我无法相信这只是魔术,但是我仍然只能相信这是魔术。

BTW:五爷为什么会让人觉得狂,因为五爷哪怕只是在传播知识的时候,也要嘲笑打击他人。如果我们做到笑骂由人的话,五爷还是可爱的。:)

再BTW:to 五爷,我给的链接里面Boat trick是你那个第三段video的增强版,因为更加不可能实现,场所是在水底!而且最后隔窗取物!

No Tags

9 responses so far

Page 1 of 3123»