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

王朝other·作者佚名  2008-05-19
宽屏版  字体: |||超大  

对数据库正常功能的访问常常取决于赋予指定用户的权利。例如,管理人员可能需要(一定的)权限来运行特定的查询或者存储过程,而向他们进行报告的用户则没有(这一权限)。对于一个很小的机构而言,你可以为具体的用户赋予具体的权利,但是随着用户数量的增长,这种方法会变得越来越难以处理。即使只有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变成一个参数,并传递它而不是定义它,就像我在上面做的一样。利用它,你可以编写出自己的应用程序代码,在任何你需要确定给定用户角色的时候调用这个函数。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有