Nov 26

Oracle上建完数据库之后,新建一个普通的用户是无法对数据库进行任何操作的.虽然有可视的见面来给用户赋予权限,不过,用命令来完成会更加方便些的.

权限的增加使用GRANT命令,REVOKE用来去除某些权限.

单个TABLE的权限

以用户scott的emp表对myuser为例来赋予增删改查的权限.

SQL> grant select,insert,update,delete on emp to myuser;
这样userAim就可以对scott.emp表进行增删改查等操作.

所有TABLE的查询权限

如果有很多张表的时间,一个一个的赋予权限会比较郁闷的.可以直接使用下面的语句来处理.

SQL> grant select any table to myuser;
但是这个存在一定的安全问题.所以还是谨慎些使用比较好.

利用Role给用户赋予权限

SQL> create role emp_access;
创建role
SQL> grant select,insert,update,delete on scott.emp to emp_access;
赋予role权限
SQL> grant emp_access to myuser;
给用户以role

函数执行权限

特定函数或存储过程的执行权限,以scott_emp_count()为例:

SQL> grant execute on scott_emp_count to myuser;
给myuser执行scott_emp_count的权限SQL> grant execute any procedure to myuser;给myuser执行所有函数的权限

REVOKE的使用方法和GRANT的一样,也就不再啰嗦了…这个也是自己两天来的一点心得了.没想到Oracle的用户管理这部分还挺麻烦的.不过,也好,又学到了一点点的东西.

written by 刘浏 \\ tags:

Nov 18

最近公司里面有个项目,用到了IBatis.想想一年之前自己当时做的项目用到的也是IBatis.NET.不同的是这次用到的是原始的java版本…

其实使用IBatis的时候,配置根据官方的文档,应该没什么太大的问题.如果是第一次用这个的话,最容易出现的两个问题是SQLMap的名字和类型转换.IBatis需要段SQL的ID都是唯一的.而且在初始化的时间还会去对整个sql-map-config种记录的sqlmap中的SQL进行处理.这个时候如果有sql语句写的有问题,像表名不存在的话,会导致IBatis出现异常的.

另外就是类型转换的事情.这个在官方文档里面有详细的介绍.IBatis并不是完全支持java或者.net的所有数据类型的…这里面就涉及到数据转换的问题了.记得当时的项目就在这上面吃了不少的亏…

written by 刘浏 \\ tags: , ,

Oct 11

在InfoQ上看到了讨论:衡量程序员的工作效率的文章.就按前段时间结束的项目来说,如果也按照 计算代码行数(source lines of code, SLOC)来进行工作效率考核,我肯定是失败了.我一直觉得代码写的越多反而会增加越多的问题.而且维护的时间困难的系数会越大,反正我只要看见几千行的代码,就有点头大.
整个文章里面,有一个Hudson游戏,比较好玩.

游戏规则:

  • -10 points 致使build失败
  • 0 points 致使已经失败的build失败
  • +1 points 可以没有任何错误的通过build (不是稳定版本,无分)
  • -1 points 每次测试点失败
  • +1 points 每次测试点成功

这个用规则还是比较实用的.不过,这样也有一个问题.大家在check in代码的时间会更加的谨慎.而过度的谨慎,会导致check in的减少.减少项目之间的交流.当然还有其他方面的一些问题.可以参看Paying programmers: are bonuses bad and what to do about it?

written by 刘浏 \\ tags:

Aug 28

在Coding Horror 上看到了一篇<Check In Early, Check In Often>其中说代码管理重的黄金法则是:

Check In Early, Check In Often

一个项目如果没有一个代码仓库,简直是不可想象的.代码的安全,进度的确认,团队之间的协作.都是靠这代码管理的.文章里面提到了为什么有些人不喜欢经常的check in.大致也就是不想让人看到自己的代码,或者不想让别人责备自己check in了错误的代码.里面一个很有意思的提法是,如果你一天都没有check in的话,那么你这一天等于什么都没有干.的确是这样的,别人无法知道你这一天到底干了什么.
大家都怕check in 错误的代码,其实check in错误的代码也没什么的,反而能够更快的解决问题.大家都会发现你的问题所在,大家都会给你指出应该如何解决你这个问题.因为大家不想因为这个事情而耽误自己的时间…
关于check in我是这样做的.

  • 每天工作开始的时间,从vss上取下最新的代码.
  • 把自己做的模块代码check out,以防止自己忘记这步…
  • 每完成一个机能,check in.如果很重要的点,写上comment.
  • check in之前必须build一次,以确定代码正确.
  • 下班之前check in全部代码.如果是在有些问题搞不定了.注释掉.

其实,对于代码,我们只要Check In Early, Check In Often就足够了…

written by 刘浏 \\ tags: ,

Aug 19

在.NET平台下,事件的绑定可以说是不得不经常面对的一件事情.当然绝大多数时间,这些操作都是由VS自动完成的.这些操作一般会在初始化的时间完成.之后就不会在执行了..NET的强大之处就是,既可以很自动化,又可以让你完全掌控.事件的处理也是一样,可以自己编写这部分的代码.给所有控件的keydown事件做同样的操作.当然,实现这个也有很多种方法.不过,总有一种最简洁的.

Private Sub TabHandleEnter(ByRef controls As Control.ControlCollection)
    For Each ctl As Control In controls
        If ctl.GetType.Name.Equals("GroupBox") Or ctl.GetType.Name.Equals("Panel") Then
            TabHandleEnter(ctl.Controls)
        Else
            AddHandler ctl.KeyDown,AddressOf EnterKeyDown
        End If
    Next
End Sub

这样就写一个EnterKeyDown,就可以处理所有的控件的keydown事件了.不过,这个函数有一个小问题,就是AddHandler ,C#里面绑定事件的操作符是+=.如果说这个操作符意味了什么的话啊,也就是你不能绑定两次,当然除非你有这方面的特别需求.你每执行一次.你绑定的函数在被激发的时间就会都走一次…所以,一定要确保绑定时间的时间,只被绑定一次.

written by 刘浏 \\ tags: , ,

Aug 19

最近进行的一个项目是VB.Net的,自己也是第一次接触这个东西.来日本之后接触的都是自己以前没有用过的,貌似以前自己只接触过C#,C++和MATLAB了.

前一个Java也就不提了,很恶心.这次还好是.net平台,而且开始之前照例看了段时间的msdn.一个平台下的东西,很多东西实现起来都差不多.只不过VB本来就很神奇,需要一段时间来适应.不过,今天忽然发现,自己虽然已经适应了VB.net,可是自己担当的部分也快差不多了…

本来开始的时间也是慢有激情的,:)可是总是有这样那样的问题困扰着你,资历,语言,环境,领导…慢慢的也就被磨平了…经过几次折腾之后,也就无所谓了.做好自己的就okay了.其他的,能帮就帮吧.:)

VB.net比较神奇,如果是我,选择了.net平台的话,我绝对会去使用C#的,虽然可能没有VB.net快速,不过,踏实得很!

written by 刘浏 \\ tags: , ,