sp_helpuser返回如下结果集:
UserName GroupName LoginName DefDBName UserID SUserID
------------------ ---------------- ------------------------------ ------------------ ------ -------
dbo db_owner sa master 1 1
(.....其他用户)
要针对某个用户,则 sp_helpuser zhang3
获得了一个用户的name和ID之后用下面语句就可以返回一个用户对所有表的权限:
select a = o.name, b = user_name(o.uid), user_name(p.uid), o.sysstat & 0xf, p.id, action, protecttype from sysprotects p, sysobjects o where o.id = p.id and p.action in (193, 195, 196, 197, 224, 26) and p.uid = 7 order by a, b
其中"p.uid = 7"是指定用户ID号,把7改成你所需用户的ID就可以了.
action就是权限类型,具体含义你慢慢实验吧!
如果对同一个表有多个权限,是以多条记录出现的。
告诉你一个"独门武功"吧:
打开SQL Trace(SQL Profiler),不要执行任何东西,
打开enterprise Mgr.找到你所要实现的功能的界面
(例如列出用户某个权限)的"前一步",
切换到SQL Trace(SQL Profiler),打开跟踪,
enterprise Mgr.中执行你所需要的功能
此时SQL Trace中显示的SQL语句就是读取该功能所需数据的SQL,
上面那条SQL就是这样得来的。