当前位置导航:炫浪网>>网络学院>>编程开发>>Oracle教程

确定用户是否属于某个角色


  对数据库正常功能的访问常常取决于赋予指定用户的权利。例如,管理人员可能需要(一定的)权限来运行特定的查询或者存储过程,而向他们进行报告的用户则没有(这一权限)。对于一个很小的机构而言,你可以为具体的用户赋予具体的权利,但是随着用户数量的增长,这种方法会变得越来越难以处理。即使只有50个用户,维护工作也会成为你的恶梦。
  
  包含我们感兴趣数据的表格是sysusers和sysmembers。前面一个表格包含有关于用户和角色的数据,而这两者由IsSQLRole这个数据列来区分,如果数据行表示的是一个角色而不是一个用户,那么IsSQLRole数据列就包含有1。下面的代码列出了所有的用户和角色:
  
  SELECT Member = Users.name, Role = Roles.Name
  FROM sysusers Users, sysusers Roles, sysmembers Members
  WHERE Roles.uid = Members.groupuid
  AND Roles.issqlrole = 1
  AND Users.uid = Members.memberuid
  ORDER BY 2, 1
  
  要列出属于指定角色的成员的用户,就要把代码更改为下面这样:
  
  DECLARE @role varchar(100)
  SET @role = 'Managers'
  SELECT MemberName = Users.name, RoleName = Roles.Name
  FROM sysusers Users, sysusers Roles, sysmembers Members
  WHERE Roles.name = @role
  AND Roles.uid = Members.groupuid
  AND Roles.issqlrole = 1
  AND Users.uid = Members.memberuid
  ORDER BY 2, 1
  
  你可能更习惯把这段代码转化成用户定义函数(user-defined function,UDF),它会返回一个布尔函数,用来指示当前用户是否是所关心的角色的成员。把变量@role变成一个参数,并传递它而不是定义它,就像我在上面做的一样。利用它,你可以编写出自己的应用程序代码,在任何你需要确定给定用户角色的时候调用这个函数。
相关内容
赞助商链接