文章主要描述的是如何得到SQL Server用户的继承列表,我们大家都知道在实际开发中特别是在做权限管理的时候,我们经常要对对某个SQL Server用户的权限进行全面检索,本文给出SQL Server中的一个实例.
用户继承树
CREATE function getUserTree(@UserName sysname, SQL Server用户名
@Seq
在实际开发中,尤其是在做权限管理的时候,常常要对对某个用户的权限进行检索,本文给出SQL Server中的一个实例.
SQL Server用户继承树
CREATE function getUserTree(@UserName sysname, 用户名
@Seq bit 查找方式:0查找子孙 1.查找祖先
)
returns @Result table(UserID sysname,UserName sysname,Level int)
as
begin
declare @UserId sysname
set @userId=user_id(@userName)
if @userid is null
begin
raiserror(''指定的用户名不存在'',16,1)
return
end
DECLARE @level int, @line char(20)
declare @stack table(item sysname, level int)
INSERT INTO @stack VALUES (@UserID, 1)
SELECT @level = 1
WHILE @level > 0
BEGIN
IF EXISTS (SELECT * FROM @stack WHERE level = @level)
BEGIN
SELECT @userId = item
FROM @stack
WHERE level = @level
insert into @Result values(@UserId,User_name(@userID),@level)
DELETE FROM @stack
WHERE level = @level
AND item = @userId
if @Seq=1 查找祖先
INSERT @stack
SELECT groupuid, @level + 1
FROM sysmembers
WHERE memberuid = @userId
else 查找子孙
INSERT @stack
SELECT memberuid, @level + 1
FROM sysmembers
WHERE groupuid = @userId
IF @@ROWCOUNT > 0
SELECT @level = @level + 1
END
ELSE
SELECT @level = @level - 1
END WHILE
return
end
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
实例:
exec sp_addrole ''Users''
exec sp_addrole ''BusinessMan''
exec sp_addrolemember ''Users'',''BusinessMan''
exec sp_addrole ''Saler''
exec sp_addrolemember ''BusinessMan'',''Saler''
exec sp_addlogin ''OrderMan'',''OrderMan'',''lifeng''
exec sp_addrolemember ''Saler'',''OrderMan''
exec sp_grantdbaccess ''OrderMan'',''OrderMan''
select * from getUserTree(''OrderMan'',1)
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
结果显示
UserID USRENAME Level
5 OrderMan 1
16402 Saler 2
16401 BusinessMan 3
16403 Users 4
- 1.
- 2.
- 3.
- 4.
- 5.
这种方法,也在MRP/ERP系统中遍历BOM时使用
上述的相关内容就是对得到SQL Server用户的继承列表 的描述,希望会给你带来一些帮助在此方面。
【编辑推荐】