在SQL Server中如何获取某用户对某个表中所有权限

原创 2005年05月25日 13:11:00

在做权限管理的时候,必须检索某个用户对某个表的权限,而用户是属于某个角色的,用SQL Server的sp_helprotect只能得到给某用户显式授予的权限,而检索不出继承的权限,下面给出一个过程,能够检索某用户所有的权限,包括继承来的权限

调用实例:
exec getTablePrivileges @ObjectName='custorder',@User='yahong'

过程主体:
alter procedure getTablePrivileges @ObjectName sysname=null,@User sysname
as
begin
 -- declare @User sysname
--  set @User='saler'
--  set @User='orderman' 

  declare @curUser sysname,@Level int

  create  table #temp
   (
    Owner sysname,
    TableName sysname,
    UserName  sysname,
    Grantor sysname,
    ProtectType varchar(20),
    Privilege varchar(20),
    ColumnName varchar(20)
   
  )

  create table #Privilege
  (
    TableName sysname,
    UserName  sysname,
    ProtectType varchar(20),
    Privilege varchar(20),
    ColumnName sysname,
    Level int
  )

  create table #UserLevel
  (
    UserName  sysname,
    Level     int
  )

  declare cur_usertree cursor for
    select UserName,Level from getUserTree(@User,1)
    order by Level desc

  open cur_usertree
  fetch next from cur_usertree into @curUser,@Level

  while @@fetch_status=0
  begin  
     insert into #temp
     exec sp_helprotect @name=@ObjectName,@UserName=@curUser

     insert into #UserLevel values(@curUser,@Level)
        
     fetch next from cur_usertree into @curUser,@Level
  end

  close cur_usertree
  DEALLOCATE cur_usertree

 
  insert into #Privilege
  select TableName,
         UserName,
         ProtectType,
         Privilege,
         ColumnName,
         (select Level from #UserLevel where UserName=O.UserName) Level
  from #temp O
  where ColumnName<>'(ALL+New)'
    and ColumnName<>'(ALL)'
    and ColumnName<>'(New)'
    and (Privilege='SELECT' or Privilege='UPDATE')
    and ProtectType<>'Deny'
    

  insert into #Privilege
   select a.TableName,a.UserName,a.ProtectType,a.Privilege,b.name,
         (select Level from #UserLevel where UserName=a.UserName) Level         
       from #temp a join syscolumns b
         on object_id(TableName)=b.id
       where (a. ColumnName='(ALL+New)' or ColumnName='(ALL)' )
         and a.ProtectType<>'Deny'

 select * from #Privilege
 drop table #Privilege
 drop table #temp
 drop table #UserLevel

 
end

Sqlserver中 登录用户只能看到自己拥有权限的库

问题背景:公司的一台数据库服务器上放在多个数据库,每个数据库都使用不同的登录名称,但在将项目文件发布到Ftp时,有些Ftp的信息是在客户那边的 一旦客户那边使用配置文件中的数据库信息连接到数据库他就...

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

http://www.cnblogs.com/justwannaloveyou/archive/2010/11/09/1873021.html 获取sql server数据库中所有用户表名及在sql...

SQL Server 2005控制用户权限访问表

导读:本文来自博客园作者总结了SQL Server 2005控制用户权限访问表,希望本文对SQL Server的总结对您有所帮助。 一、需求 在管理数据库过程中,我们经常需要控制某个用户访问数据库...

SQL Server 2005 控制用户权限访问表

一、需求 在管理数据库过程中,我们经常需要控制某个用户访问数据库的权限,比如只需要给这个用户访问某个表的权限,甚至是CRUD的权限,更小粒度的还可以去到某几个字段的访问权限。写这篇文章就是说明下这个...
  • czs8585
  • czs8585
  • 2012年11月14日 17:48
  • 152

SQL Server 2005控制用户权限访问表

导读:本文来自博客园作者总结了SQL Server 2005控制用户权限访问表,希望本文对SQL Server的总结对您有所帮助。 一、需求 在管理数据库过程中,我们经常需要控制某个用户访问数据库...

SQL Server 2005 控制用户权限访问表

一、需求在管理数据库过程中,我们经常需要控制某个用户访问数据库的权限,比如只需要给这个用户访问某个表的权限,甚至是CRUD的权限,更小粒度的还可以去到某几个字段的访问权限。写这篇文章就是说明下这个操作...

SQL Server 2005 控制用户权限访问表

一、需求 在管理数据库过程中,我们经常需要控制某个用户访问数据库的权限,比如只需要给这个用户访问某个表的权限,甚至是CRUD的权限,更小粒度的还可以去到某几个字段的访问权限。写这篇文章就是说明下这个...

SQL Server 2005/2008 控制用户权限访问表

一、需求   在管理数据库过程中,我们经常需要控制某个用户访问数据库的权限,比如只需要给这个用户访问某个表的权限,甚至是CRUD的权限,更小粒度的还可以去到某几个字段的访问权限。写这篇文章就是说明下...

SQL SERVER如何获取指定数据库中所有存储过程的参数

SELECT sp.object_Id as FunctionId, sp.name as FunctionName, isnull(param.name,'')as Para...
  • whaxrl
  • whaxrl
  • 2016年04月14日 14:22
  • 808

vb 列出SQL SERVER数据库中所有表及字段信息

vb 列出SQL SERVER数据库中所有表及字段信息【转】   2010-05-06 09:28:24|  分类: 默认分类 |  标签: |字号大中小 订阅 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在SQL Server中如何获取某用户对某个表中所有权限
举报原因:
原因补充:

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