ITPUB??ì3
新一届的微软MVP评选已经开始,欢迎各位推荐!
ITPUB论坛 » MS SQL Server » 用SQL语句如何同时给多表授权

标题: 用SQL语句如何同时给多表授权
离线 Arrayliuwei_sh
一般会员



精华贴数 0
个人空间 0
技术积分 283 (6925)
社区积分 0 (730376)
注册日期 2006-1-4
论坛徽章:1
ITPUB新首页上线纪念徽章     
      

发表于 2007-5-25 09:25 
用SQL语句如何同时给多表授权

用SQL语句如何同时给多表授权?

要将数据库里表名是rsgl 开头的所有表,授权 select、,insert ,update ,delete 权限给一个同事,我写的语句:grant select ,insert ,update ,delete  on (select  name  from  sysobjects  where name like 'rsgl%'  and xtype  =  'u' )    to  xxb_thb

出错信息:
服务器: 消息 170,级别 15,状态 1,行 1
Line 1: Incorrect syntax near '('.
服务器: 消息 156,级别 15,状态 1,行 1
Incorrect syntax near the keyword 'to'.


请问下错在什么地方? 还是grant 语句不能同时多表授权?


只看该作者    顶部
离线 hegx2001
一般会员



精华贴数 0
个人空间 0
技术积分 122 (14268)
社区积分 0 (1371058)
注册日期 2007-4-28
论坛徽章:0
      
      

发表于 2007-5-25 11:17 
你可以看看F1里面的有关帮助.


只看该作者    顶部
在线/呼叫 hxd001_810
卡卡西


精华贴数 0
个人空间 0
技术积分 4327 (321)
社区积分 0 (1296010)
注册日期 2007-3-10
论坛徽章:6
现任管理团队成员会员2007贡献徽章授权会员生肖徽章2007版:蛇生肖徽章2007版:鼠 
      

发表于 2007-5-25 13:15 
试一下用动态SQL实现:
declare @roworder int
declare @name varchar(50)
declare @str varchar(500)
declare @cnt int
select identity(int,1,1) roworder ,name into #tmp from sysobjects where name like 'rsgl%' and xtype = 'u'  
select @cnt = count(*) from #tmp
set @roworder = 1
while @roworder < = @cnt
begin
        select @name = name from #tmp where roworder = @roworder
        set @str = 'grant select ,insert ,update ,delete on '+@name+ 'to xxb_thb'
        exec(@str)
        set @roworder = @roworder + 1
end
drop table #tmp
go


__________________
世界运行在数据上!
只看该作者    顶部
离线 mydear
高级会员


来自 SH
精华贴数 2
个人空间 16256
技术积分 13880 (83)
社区积分 88888 (2)
注册日期 2003-6-2
论坛徽章:361
Heart of PUBHeart of PUBBLOG年度发帖之星年度论坛发贴之星奥运纪念徽章NBA季后赛大富翁
NBA季后赛大富翁NBA季后赛大富翁NBA2008季后赛纪念徽章NBA季后赛之星NBA季后赛之星NBA季后赛之星

发表于 2007-5-25 13:35 
这个怎么也写了存储过程实现吧


__________________
只看该作者    顶部
在线/呼叫 hxd001_810
卡卡西


精华贴数 0
个人空间 0
技术积分 4327 (321)
社区积分 0 (1296010)
注册日期 2007-3-10
论坛徽章:6
现任管理团队成员会员2007贡献徽章授权会员生肖徽章2007版:蛇生肖徽章2007版:鼠 
      

发表于 2007-5-25 13:44 
这个怎么也写了存储过程实现吧
--------------------------------------------------------------------------
我想这个不是大问题(或者说是关键问题),就只写个一般动态语句就可以,当然,写个存储过程也可以。
这就要看楼主的具体需求了。


__________________
世界运行在数据上!
只看该作者    顶部
离线 liuwei_sh
一般会员



精华贴数 0
个人空间 0
技术积分 283 (6925)
社区积分 0 (730376)
注册日期 2006-1-4
论坛徽章:1
ITPUB新首页上线纪念徽章     
      

发表于 2007-5-25 20:41 
就是说单靠写SQL语句是不能做到的咯?

写存储过程我觉得有个问题,怎么判断出要给什么条件的表批量授权呢,比如说,我要给表名 是以MRP开头的,或表名是以 web 开头的


只看该作者    顶部
在线/呼叫 hxd001_810
卡卡西


精华贴数 0
个人空间 0
技术积分 4327 (321)
社区积分 0 (1296010)
注册日期 2007-3-10
论坛徽章:6
现任管理团队成员会员2007贡献徽章授权会员生肖徽章2007版:蛇生肖徽章2007版:鼠 
      

发表于 2007-5-25 20:45 
我上面不是已经把如何同时给多表授权的代码给你了嘛


__________________
世界运行在数据上!
只看该作者    顶部
离线 kissmoon
努力飞



精华贴数 0
个人空间 0
技术积分 5907 (224)
社区积分 30 (6261)
注册日期 2005-4-13
论坛徽章:3
会员2007贡献徽章ITPUB新首页上线纪念徽章数据库板块每日发贴之星   
      

发表于 2007-5-25 21:45 
grant 要的是一个对象名称,
而select出来的结果,已是一个字符串了


__________________
个性签名:浪费网络流量、占用页面篇幅!让平淡在记忆中成为感动!!
只看该作者    顶部
离线 jinguanding
Eugene


来自 上海
精华贴数 1
个人空间 70
技术积分 2401 (654)
社区积分 79 (3901)
注册日期 2007-3-29
论坛徽章:5
现任管理团队成员2008北京奥运纪念徽章:乒乓球2008北京奥运纪念徽章:柔道生肖徽章2007版:鼠ITPUB新首页上线纪念徽章 
      

发表于 2007-5-25 23:47 
Create procedure Pro_Grant
@TableName nvarchar(20)
as
BEGIN
             declare @roworder int
             declare @name varchar(50)
        declare @str varchar(500)
        declare @cnt int
        select identity(int,1,1) roworder ,name into #tmp from sysobjects where name like @TableName+'%' and xtype = 'u'
        select @cnt = count(*) from #tmp
        set @roworder = 1
        while @roworder < = @cnt
        begin
                select @name = name from #tmp where roworder = @roworder
                set @str = 'grant select ,insert ,update ,delete on '+@name+ 'to xxb_thb'
                exec(@str)
                set @roworder = @roworder + 1
        end
        drop table #tmp
END


再执行下就是了: EXEC  Pro_Grant 'xx'


__________________
.....做人做事尽心尽力,做学问谦虚求根问底.......
......***寻MySQL方面的兼职***......
.....专业的综合布线、安防公司........................
......www.showgold.cn..............................
......上海亮金信息技术有限公司.......................
只看该作者    顶部
离线 liuwei_sh
一般会员



精华贴数 0
个人空间 0
技术积分 283 (6925)
社区积分 0 (730376)
注册日期 2006-1-4
论坛徽章:1
ITPUB新首页上线纪念徽章     
      

发表于 2007-5-26 11:19 


QUOTE:
最初由 hxd001_810 发布
我上面不是已经把如何同时给多表授权的代码给你了嘛

不好意思,我那样问的意思是 是不是每次都要先写个存储过程,比如我下次要给表名 web  或则是mrp 开头的表名多表批量授权,都要先 按照这样写个存储过程来实现?


只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问