本帖最后由 double_life 于 2012-12-29 17:09 编辑
IBM Java Toolboxfor i实现IBM i的登录安全性
作为IBM i提供的三个安全保护级别之一,登录安全性的主体是用户。在IBM i中,描述用户的对象是用户概要(以下称User Profile)。因此,这里我们围绕用户概要,讨论IBM Java Toolbox for i关于IBM i登录安全性的相关支持。
作为IBM i系统中的一种特殊对象,User Profile是IBM i系统安全性的起点,对应的对象类型为*USRPRF。User Profile中定义了许多与安全性相关的属性,列举如下:
- 用户拥有哪些对象。
- 针对拥有部分所有权的对象,该用户拥有哪些权限。
- 用户拥有哪些Special Authority。
- 用户是否属于某组用户(以下称Group Profile)及一系列子组用户(Supplemental Group Profile)
使用CL命令Work User Profile (WRKUSRPRF)可以查看User Profile对应的所有属性。其中,当使用CL命令Delete User Profile(DLTUSRPRF)删除某一用户时,针对用户拥有的对象与拥有部分所有权的对象,两者关于用户的权限引用也一并删除。与此同时,对于用户曾经拥有的对象而言,要么易主,更换所有者,要么选择一并删除。对于拥有部分所有权的对象,其用户权限也会随用户一起被删除。
从面向对象程序设计的角度,我们可以使用IBM Java Toolbox for i提供的CommandCall对象封装并远程执行CL命令的方式,完成删除用户的操作,如清单1所示:
清单 1. IBM Java Toolboxfor i删除用户User3//构造AS400对象,建立Java应用程序与IBM i服务器的连接。 AS400sys = new AS400(system, usr, pwd); //构造CommandCall,准备远程调用CL命令删除用户。 CommandCall cc = new CommandCall(sys); //删除用户。 if(cc.run("DLTUSRPRF User3")){ //删除用户的操作成功。 System.out.println("User3 was deleted successfully"); } else { // 如果调用失败,则将错误消息封装成相关Java类AS400Message。 AS400Message[] messageList =pgm.getMessageList(); // ... 处理消息列表 } … //作为好的编程习惯,释放连接 sys.disconnectService(AS400.COMMAND);
刚才,我们介绍了User Profile关于对象与权限相关的两个属性。从中可以看出,用户,对象,权限三者的关联程度。 接下来介绍的是User Profile的另一重要属性——Special Authority。简单地说,用户的Special Authority的目标是控制用户访问某一对象或完成某一任务的特殊能力。通过CL命令DisplayUser Profile (DSPUSRPRF)可查看用户相关的Special Authority,如图1所示:
图 1. 管理员Admin对应的Special Authority
图1列出管理员Admin拥有的众多SpecialAuthority列表。其中,最值得一提的是*ALLOBJ与*SAVSYS这两种。*ALLOBJ权限最大,相当于IBMi的管理员,其操作不受任何限制。而*SAVSYS则允许用户将任意IBM i对象保存为Save File,即使用户对该对象没有权限。
从面向对象的角度,我们可以使用IBM Java Toolbox for i提供的User对象获取UserProfile的相关属性,包括Special Authority,如清单2所示:
清单 2. IBM JavaToolbox for i获取用户Admin的特殊权限//构造AS400对象,建立Java应用程序与IBM i服务器的连接。 AS400sys = new AS400(system, usr, pwd); //构造User对象,指定目标用户。 User user = new User(sys, "ADMIN"); //获取用户特殊权限列表并打印。 String[] returnValue = user.getSpecialAuthority(); System.out.println("ADMIN Special Authority List:"); for (int i = 0; i < returnValue.length; ++i){ System.out.println(returnValue); } … //作为好的编程习惯,释放连接 sys.disconnectAllServices();
在介绍User Profile的前三个重要属性之后,我们看一下最后一个属性——Group Profile与Supplemental Group Profile。
我们知道,与Unix,Windows等操作系统一样,IBMi平台也支持用户与组的概念。所不同的是,Unix与Windows将用户与组视为两个不同的概念。而在IBM i中,组与用户是同一个概念,对象类型均为*USRPRF。从这个角度而言,Group Profile本身也是一个User Profile,所不同的是,当一个用户的GID(Group ID)属性被赋值或者说另一个*USRPRF对象被加入时,该User Profile就变成了一个GroupProfile。而被加入的User Profile则成为成员用户(Member)。
在IBM i中,支持一个UserProfile可以同时属于最多16个组,并且只有1个组能成为Group Profile,余下的则为SupplementalGroup Profile。 与Unix,Windows等操作系统一样,GroupProfile能起到简化管理用户的功效。需要指出的是,IBM i并不支持组与组之间的递归嵌套关系。换句话说,Group Profile并不允许成为其它UserProfile的成员用户。
从面向对象的角度,要知道一个Group Profile究竟包含多少个普通的User Profile,我们可以使用IBM Java Toolbox for i提供的UserList对象列出某用户组对应的成员,如清单3所示:
清单 3. IBM JavaToolbox for i获取组用户User2的成员//构造AS400对象,建立Java应用程序与IBM i服务器的连接。 AS400sys = new AS400(system, usr, pwd); //构造UserList对象,返回指定组的成员用户列表。 UserList userList = new UserList(sys); userList.setUserInfo(UserList.MEMBER); userList.setGroupInfo("User2"); //打印成员用户列表。 System.out.println("The Member List of group User2:"); Enumeration enum = userList.getUsers(); while (en.hasMoreElements()) { User u = (User) en.nextElement(); System.out.println ("User name: " + u.getName()); System.out.println ("Description: " + u.getDescription ()); } … //作为好的编程习惯,释放连接 sys.disconnectAllServices();
至此,我们围绕用户权限,讨论了IBM Java Toolbox for i针对IBM i登录安全性的相关支持。接下来,我们继续讨论IBM Java Toolbox for i针对IBM i资源安全性的相关支持。 |