ITPUB论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
更多
查看: 7251|回复: 14

用SQL语句如何同时给多表授权 [复制链接]

注册会员

一般会员

精华贴数
0
技术积分
467
社区积分
15
注册时间
2006-1-4
论坛徽章:
2
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442009新春纪念徽章
日期:2009-01-04 14:52:28
发表于 2007-5-25 09:25:50 |显示全部楼层
用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 语句不能同时多表授权?

注册会员

一般会员

精华贴数
0
技术积分
122
社区积分
0
注册时间
2007-4-28
论坛徽章:
0
发表于 2007-5-25 11:17:33 |显示全部楼层
你可以看看F1里面的有关帮助.

使用道具 举报

版主

卡卡西

精华贴数
0
技术积分
4377
社区积分
0
注册时间
2007-3-10
论坛徽章:
12
会员2007贡献徽章
日期:2007-09-26 18:42:102011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:01生肖徽章2007版:鸡
日期:2009-11-07 14:03:15生肖徽章2007版:蛇
日期:2008-03-26 08:30:39生肖徽章2007版:鼠
日期:2008-01-02 17:35:53授权会员
日期:2007-12-26 16:34:03管理团队成员
日期:2011-05-07 01:45:08
发表于 2007-5-25 13:15:04 |显示全部楼层
试一下用动态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

使用道具 举报

版主

高级会员

精华贴数
4
技术积分
33733
社区积分
95141
注册时间
2003-6-2
论坛徽章:
59
现任管理团队成员
日期:2011-05-07 01:45:08ITPUB年度最佳版主
日期:2011-12-28 15:24:18CBA常规赛纪念章
日期:2011-12-27 13:44:23生肖徽章:鼠
日期:2007-09-26 17:01:11生肖徽章:鼠
日期:2007-09-26 17:00:51生肖徽章:鼠
日期:2007-07-25 10:27:19NBA常规赛纪念章
日期:2010-04-15 14:01:10NBA常规赛纪念章
日期:2009-04-16 14:22:43NBA常规赛纪念章
日期:2011-04-15 13:34:11NBA季后赛纪念徽章
日期:2008-06-20 11:45:19NBA季后赛纪念徽章
日期:2009-06-16 11:28:17NBA季后赛纪念徽章
日期:2011-06-13 11:34:51
发表于 2007-5-25 13:35:11 |显示全部楼层
这个怎么也写了存储过程实现吧

使用道具 举报

版主

卡卡西

精华贴数
0
技术积分
4377
社区积分
0
注册时间
2007-3-10
论坛徽章:
12
会员2007贡献徽章
日期:2007-09-26 18:42:102011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:01生肖徽章2007版:鸡
日期:2009-11-07 14:03:15生肖徽章2007版:蛇
日期:2008-03-26 08:30:39生肖徽章2007版:鼠
日期:2008-01-02 17:35:53授权会员
日期:2007-12-26 16:34:03管理团队成员
日期:2011-05-07 01:45:08
发表于 2007-5-25 13:44:47 |显示全部楼层
这个怎么也写了存储过程实现吧
--------------------------------------------------------------------------
我想这个不是大问题(或者说是关键问题),就只写个一般动态语句就可以,当然,写个存储过程也可以。
这就要看楼主的具体需求了。

使用道具 举报

注册会员

一般会员

精华贴数
0
技术积分
467
社区积分
15
注册时间
2006-1-4
论坛徽章:
2
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442009新春纪念徽章
日期:2009-01-04 14:52:28
发表于 2007-5-25 20:41:57 |显示全部楼层
就是说单靠写SQL语句是不能做到的咯?

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

使用道具 举报

版主

卡卡西

精华贴数
0
技术积分
4377
社区积分
0
注册时间
2007-3-10
论坛徽章:
12
会员2007贡献徽章
日期:2007-09-26 18:42:102011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:01生肖徽章2007版:鸡
日期:2009-11-07 14:03:15生肖徽章2007版:蛇
日期:2008-03-26 08:30:39生肖徽章2007版:鼠
日期:2008-01-02 17:35:53授权会员
日期:2007-12-26 16:34:03管理团队成员
日期:2011-05-07 01:45:08
发表于 2007-5-25 20:45:21 |显示全部楼层
我上面不是已经把如何同时给多表授权的代码给你了嘛

使用道具 举报

注册会员

努力飞

精华贴数
0
技术积分
8206
社区积分
33
注册时间
2005-4-13
论坛徽章:
31
数据库板块每日发贴之星
日期:2007-08-19 01:03:182011新春纪念徽章
日期:2011-02-18 11:43:33生肖徽章2007版:兔
日期:2011-01-20 12:58:49ITPUB季度 技术新星
日期:2011-01-17 11:30:462011新春纪念徽章
日期:2011-01-04 10:24:022010广州亚运会纪念徽章:帆船
日期:2010-11-22 15:33:202010广州亚运会纪念徽章:篮球
日期:2010-11-12 16:44:23ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51设计板块每日发贴之星
日期:2010-09-16 01:01:01ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
发表于 2007-5-25 21:45:39 |显示全部楼层
grant 要的是一个对象名称,
而select出来的结果,已是一个字符串了

使用道具 举报

版主

Eugene

精华贴数
2
技术积分
6596
社区积分
128
注册时间
2007-3-29
论坛徽章:
36
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442012新春纪念徽章
日期:2012-01-04 11:53:292011新春纪念徽章
日期:2011-02-18 11:43:342011新春纪念徽章
日期:2011-03-17 10:57:44现任管理团队成员
日期:2011-05-07 01:45:08ITPUB知识分享者
日期:2011-05-18 17:57:39ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36ITPUB十周年纪念徽章
日期:2011-09-27 16:32:49复活蛋
日期:2011-12-26 14:16:20ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262012新春纪念徽章
日期:2012-02-07 09:59:35生肖徽章2007版:龙
日期:2012-02-07 10:32:55
发表于 2007-5-25 23:47:06 |显示全部楼层
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'

使用道具 举报

注册会员

一般会员

精华贴数
0
技术积分
467
社区积分
15
注册时间
2006-1-4
论坛徽章:
2
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442009新春纪念徽章
日期:2009-01-04 14:52:28
发表于 2007-5-26 11:19:39 |显示全部楼层
最初由 hxd001_810 发布
[B]我上面不是已经把如何同时给多表授权的代码给你了嘛 [/B]


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

使用道具 举报

相关内容推荐
您需要登录后才可以回帖 登录 | 注册

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 邮箱 虎吧 老博客 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
回顶部