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