ITPUB??ì3
挑战终极任务6人行
ITPUB论坛 » MS SQL Server » 用SQL语句如何同时给多表授权


您有 1 条公共消息
  • 来自: 公共消息 标题: 3-5月ITPUB数据库 ... 内容: ITPUB与3月和5月分别安排了Oracle 11g DBA和Oracle性能优化培训,以及 ...

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



    精华贴数 0
    个人空间 6
    技术积分 443 (5253)
    社区积分 15 (10776)
    注册日期 2006-1-4
    论坛徽章:2
    2009新春纪念徽章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 (16784)
    社区积分 0 (1405439)
    注册日期 2007-4-28
    论坛徽章:0
          
          

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


    只看该作者    顶部
    离线 hxd001_810
    卡卡西


    精华贴数 0
    个人空间 0
    技术积分 4375 (392)
    社区积分 0 (1326829)
    注册日期 2007-3-10
    论坛徽章:7
    管理团队成员会员2007贡献徽章授权会员生肖徽章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
    个人空间 15856
    技术积分 17820 (75)
    社区积分 90199 (5)
    注册日期 2003-6-2
    论坛徽章:32
    BLOG年度发帖之星年度论坛发贴之星NBA季后赛纪念徽章NBA常规赛纪念章NBA季后赛纪念徽章NBA常规赛纪念章
    月度论坛发贴之星BLOG月度发帖之星月度论坛发贴之星月度论坛发贴之星BLOG月度发帖之星月度论坛发贴之星

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


    __________________
    只看该作者    顶部
    离线 hxd001_810
    卡卡西


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

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


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



    精华贴数 0
    个人空间 6
    技术积分 443 (5253)
    社区积分 15 (10776)
    注册日期 2006-1-4
    论坛徽章:2
    2009新春纪念徽章ITPUB新首页上线纪念徽章    
          

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

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


    只看该作者    顶部
    离线 hxd001_810
    卡卡西


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

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


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



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

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


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


    来自 上海
    精华贴数 1
    个人空间 191
    技术积分 3553 (502)
    社区积分 95 (4397)
    注册日期 2007-3-29
    论坛徽章:13
    现任管理团队成员2010新春纪念徽章2010年世界杯参赛球队:巴拉圭2009日食纪念生肖徽章2007版:虎生肖徽章2007版:虎
    生肖徽章2007版:狗2008北京奥运纪念徽章:跳水2008北京奥运纪念徽章:柔道2008北京奥运纪念徽章:乒乓球2008北京奥运纪念徽章:柔道生肖徽章2007版:鼠

    发表于 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
    个人空间 6
    技术积分 443 (5253)
    社区积分 15 (10776)
    注册日期 2006-1-4
    论坛徽章:2
    2009新春纪念徽章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证:060528号 联系我们