SQL Server如何得到用户的继承列表

原创 2005年05月25日 12:55:00

在实际开发中,尤其是在做权限管理的时候,常常要对对某个用户的权限进行检索,本文给出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

实例:
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)

结果显示
UserID   USRENAME     Level
5              OrderMan          1
16402     Saler                  2
16401     BusinessMan  3
16403     Users                4

这种方法,也在MRP/ERP系统中遍历BOM时使用

Python简单抓取CSDN博文列表并写入SQL Server数据库

#/usr/bin/env python # -*- coding:utf-8 -*- import re #导入正则模块 import requests #导入http客户端库 import lxm...

SQL Server 学习博客分享列表(应用式学习 + 深入理解)

SQL Server 学习博客分享列表 1 - 4 篇文章来自51CTO-杜飞的博客; Wait… 1. SQL Server 数据库文件管理部分:介绍了SQL Server数据库空间管理相关理论知识...

Sql Server 不常见应用之一:获取表的基本信息、字段列表、存储过程参数列表

【推荐】Sql Server 不常见应用之一获取表的基本信息、字段列表、存储过程参数列表 ——通过知识共享树立个人品牌。    一、获取表的基本信息SELECT [TableName] = [Tabl...

Sql Server添加用户和设置权限

Sql Server添加用户和设置权限 一、添加用户 1、数据库级别的【安全性】-【登录名】-【新建登录名】 2、在【常规】选项卡中,输入登陆名、密码,并设置默认的数据库 3、 在【用户映射】...

sql server 用户密码破解

  • 2016年03月30日 21:37
  • 794KB
  • 下载

sql server 安全管理之用户、角色、架构 与 权限

--打开数据库 Use databaseName --创建角色 create role ProgramerRole --用于创建表 存储过程 视图 grantcreatetable,createpro...
  • ahywg
  • ahywg
  • 2011年05月05日 09:05
  • 3915
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL Server如何得到用户的继承列表
举报原因:
原因补充:

(最多只允许输入30个字)