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时使用

SQL SERVER 查看角色和用户信息写法

1、查看服务器角色相关信息  SP_HELPSRVROLE  SP_HELPSRVROLEMEMBER 服务器角色  SP_HELPSRVROLE 服务器角色  2、查看数据库角色相关信息...
  • YABIGNSHI
  • YABIGNSHI
  • 2014年01月24日 11:17
  • 1815

SQL Server 2008 R2 为用户分配权限

背景   之前我们编写程序的时候都是直接对数据库进行访问,并没有设置什么权限之类的东西,但是在管理数据库的过程中,我们有时候需要控制某个用户访问数据库的权限,比如只能单独的看到属于其管理的某几张表,...
  • u010955843
  • u010955843
  • 2015年05月25日 14:41
  • 4110

获取sql server数据库中所有用户表名

http://www.cnblogs.com/justwannaloveyou/archive/2010/11/09/1873021.html 获取sql server数据库中所有用户表名及在sql...
  • gkq8124372
  • gkq8124372
  • 2012年04月17日 16:02
  • 4471

SQL Server查看有哪些用户连接数据库

1、sp_who 2、Select * From sys.dm_exec_connections
  • xl890727
  • xl890727
  • 2012年06月16日 20:09
  • 6100

SQL Server如何得到用户的继承列表 选择自 liufuyahong 的 Blog

 在实际开发中,尤其是在做权限管理的时候,常常要对对某个用户的权限进行检索,本文给出SQL Server中的一个实例.--用户继承树CREATE function getUserTree(@UserN...
  • redpetallsg
  • redpetallsg
  • 2007年06月11日 10:56
  • 569

[sql server] 如何得到连续序号

--SQL2000select number from master..spt_values where type='p' --0-255--SQL2005生成系列号(行号)两种方式 --1.用CTE...
  • xys_777
  • xys_777
  • 2010年06月20日 09:44
  • 5882

创建(含删除)SQL Server登录(用户)

Use MasterDeclare @username sysname,@userpassword nvarchar(50)Set @username=Naa            --要创建的登录(...
  • apple_8180
  • apple_8180
  • 2008年01月29日 15:53
  • 2452

Sql server 2008 登录名、数据库用户名、数据库角色成员,服务器角色

关键词:登录名、数据库用户名、数据库角色成员,服务器角色   登录名:链接或登录Sql Server服务器时是用的登录名而非用户名登录的,程序里面的链接字符串中的用户名也是指登录名。 使用登录名...
  • liyun211
  • liyun211
  • 2017年07月03日 14:31
  • 437

sql server2008变成单个用户后不能访问,设置成多个用户的办法

今天想在sql server2005下复制一个数据库,结果最后一步出错,复制没成功反而导致数据库打不开了, 名称后出现“单个用户”,估计是进行复制的时候自动将其改为了单用户模式,可通过执行如...
  • longjie_happy
  • longjie_happy
  • 2015年07月13日 17:44
  • 2260

SQL SERVER如何断开所有连接用户

SQL SERVER断开所有用户。 第一种方法:执行SQL语句。 SQL SERVER2000,2008 测试通过) 中断除了自己外的连接: view sourcep...
  • wozengcong
  • wozengcong
  • 2015年04月20日 13:01
  • 5043
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL Server如何得到用户的继承列表
举报原因:
原因补充:

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