怎么给用户赋予视图查询权限

时间:2022-04-03 08:53:17
如题:
只让数据库用户查询该数据库所有视图的权限。

6 个解决方案

#1


要赋予的数据库的安全中,有个用户,找到要赋予的用户,然后给他要查看的权限就成了

#2


引用 1 楼 ximi82878 的回复:
要赋予的数据库的安全中,有个用户,找到要赋予的用户,然后给他要查看的权限就成了


我要的是通过sql语句给用户比如loginName赋予某个数据库比如db1下所有视图的查询权限。

#3


创建角色,用户,权限

/*--示例说明
        示例在数据库pubs中创建一个拥有表jobs的所有权限、拥有表titles的SELECT权限的角色r_test
    随后创建了一个登录l_test,然后在数据库pubs中为登录l_test创建了用户账户u_test
    同时将用户账户u_test添加到角色r_test中,使其通过权限继承获取了与角色r_test一样的权限
    最后使用DENY语句拒绝了用户账户u_test对表titles的SELECT权限。
    经过这样的处理,使用l_test登录SQL Server实例后,它只具有表jobs的所有权限。
--*/

USE pubs

--创建角色 r_test
EXEC sp_addrole 'r_test'

--授予 r_test 对 jobs 表的所有权限
GRANT ALL ON jobs TO r_test
--授予角色 r_test 对 titles 表的 SELECT 权限
GRANT SELECT ON titles TO r_test

--添加登录 l_test,设置密码为pwd,默认数据库为pubs
EXEC sp_addlogin 'l_test','pwd','pubs'

--为登录 l_test 在数据库 pubs 中添加安全账户 u_test
EXEC sp_grantdbaccess 'l_test','u_test'

--添加 u_test 为角色 r_test 的成员
EXEC sp_addrolemember 'r_test','u_test'

--拒绝安全账户 u_test 对 titles 表的 SELECT 权限
DENY SELECT ON titles TO u_test

/*--完成上述步骤后,用 l_test 登录,可以对jobs表进行所有操作,但无法对titles表查询,虽然角色 r_test 有titles表的select权限,但已经在安全账户中明确拒绝了对titles的select权限,所以l_test无titles表的select权限--*/

--从数据库 pubs 中删除安全账户
EXEC sp_revokedbaccess 'u_test'

--删除登录 l_test
EXEC sp_droplogin 'l_test'

--删除角色 r_test
EXEC sp_droprole 'r_test'

#4


declare   @tb   table(ID   int   identity,name   varchar(20)) 
insert   @tb   (name) 
select   name   from   sysobjects   where   xtype ='V ' 

declare   @i   int 
                ,@sql   varchar(20) 
                ,@account   varchar(100)       --要赋予权限的用户 
set   @i=1 

while   exists(select   1   from   @tb   where   ID=@i) 
begin 
            select   @sql= 'grant   all   on   '+name+ '   to   '+@account   
                          ,@i=@i+1 
            from   @tb   where   ID=@i 
            exec(@sql) 
end

#5


都不是我想要的结果.
我的需求是:
1.已经有用户userName;
2.数据库db1有很多视图,比如v_test1、v_test2.....;
3.给用户userName赋予db1数据库中所有视图的查询权限,要批量处理;

#6


该回复于2011-01-21 10:19:36被版主删除

#1


要赋予的数据库的安全中,有个用户,找到要赋予的用户,然后给他要查看的权限就成了

#2


引用 1 楼 ximi82878 的回复:
要赋予的数据库的安全中,有个用户,找到要赋予的用户,然后给他要查看的权限就成了


我要的是通过sql语句给用户比如loginName赋予某个数据库比如db1下所有视图的查询权限。

#3


创建角色,用户,权限

/*--示例说明
        示例在数据库pubs中创建一个拥有表jobs的所有权限、拥有表titles的SELECT权限的角色r_test
    随后创建了一个登录l_test,然后在数据库pubs中为登录l_test创建了用户账户u_test
    同时将用户账户u_test添加到角色r_test中,使其通过权限继承获取了与角色r_test一样的权限
    最后使用DENY语句拒绝了用户账户u_test对表titles的SELECT权限。
    经过这样的处理,使用l_test登录SQL Server实例后,它只具有表jobs的所有权限。
--*/

USE pubs

--创建角色 r_test
EXEC sp_addrole 'r_test'

--授予 r_test 对 jobs 表的所有权限
GRANT ALL ON jobs TO r_test
--授予角色 r_test 对 titles 表的 SELECT 权限
GRANT SELECT ON titles TO r_test

--添加登录 l_test,设置密码为pwd,默认数据库为pubs
EXEC sp_addlogin 'l_test','pwd','pubs'

--为登录 l_test 在数据库 pubs 中添加安全账户 u_test
EXEC sp_grantdbaccess 'l_test','u_test'

--添加 u_test 为角色 r_test 的成员
EXEC sp_addrolemember 'r_test','u_test'

--拒绝安全账户 u_test 对 titles 表的 SELECT 权限
DENY SELECT ON titles TO u_test

/*--完成上述步骤后,用 l_test 登录,可以对jobs表进行所有操作,但无法对titles表查询,虽然角色 r_test 有titles表的select权限,但已经在安全账户中明确拒绝了对titles的select权限,所以l_test无titles表的select权限--*/

--从数据库 pubs 中删除安全账户
EXEC sp_revokedbaccess 'u_test'

--删除登录 l_test
EXEC sp_droplogin 'l_test'

--删除角色 r_test
EXEC sp_droprole 'r_test'

#4


declare   @tb   table(ID   int   identity,name   varchar(20)) 
insert   @tb   (name) 
select   name   from   sysobjects   where   xtype ='V ' 

declare   @i   int 
                ,@sql   varchar(20) 
                ,@account   varchar(100)       --要赋予权限的用户 
set   @i=1 

while   exists(select   1   from   @tb   where   ID=@i) 
begin 
            select   @sql= 'grant   all   on   '+name+ '   to   '+@account   
                          ,@i=@i+1 
            from   @tb   where   ID=@i 
            exec(@sql) 
end

#5


都不是我想要的结果.
我的需求是:
1.已经有用户userName;
2.数据库db1有很多视图,比如v_test1、v_test2.....;
3.给用户userName赋予db1数据库中所有视图的查询权限,要批量处理;

#6


该回复于2011-01-21 10:19:36被版主删除