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

ZDNet软件频道 时间:2004-02-03 作者:ZDNet China |  我要评论()
本文关键词:sqltips
对数据库正常功能的访问常常取决于赋予指定用户的权利,而向他们进行报告的用户则没有(这一权限)。随着用户数量的增长,这种方法会变得越来越难以处理。
本文译自Builder.com,未经许可请勿转载


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


本文作者 :Arthur Fuller开发数据库应用程序已经有20年了。他的专业经验包括Access ADPs、微软SQL 2000、MySQL和.NET。


责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134