1.不要使用sa用户连接数据库
2、新建一个public权限数据库用户,并用这个用户访问数据库
3、[角色]去掉角色public对sysobjects与syscolumns对象的select访问权限
4、[用户]用户名称-> 右键-属性-权限-在sysobjects与syscolumns上面打“×”
5、通过以下代码检测(失败表示权限正确,如能显示出来则表明权限太高):
DECLARE    @T    varchar(255),
@C    varchar(255)
DECLARE    Table_Cursor    CURSOR    FOR
Select    a.name,b.name    from    sysobjects    a,syscolumns    b
where    a.id=b.id    and    a.xtype='u'    and    (b.xtype=99    or    b.xtype=35    or    b.xtype=231    or    b.xtype=167)  
OPEN    Table_Cursor
FETCH    NEXT    FROM    Table_Cursor    INTO    @T,@C
WHILE(@@FETCH_STATUS=0)
BEGIN    print    @c
FETCH    NEXT    FROM    Table_Cursor    INTO    @T,@C   
END
CLOSE    Table_Cursor
DEALLOCATE    Table_Cursor  
-----------------------------------------------上面是网上抄的--------------
为了加强数据库的安全,我准备试一下,但中间有不少的麻烦。
我加了一个叫ABC 的public权限数据库用户 第2步完成了,
接着我进入  ----数据库访问---public---权限,开始设置权限 3步 完成了
接着我[用户]用户名称-> 右键-属性-权限- 但发现权限已设置不作深究接着向下。 4步 完成了
通过以下代码检测,好代码也成功提示权限报错。5步 完成了开始以为大功告成,修改程序数据库连接,但事实去不是这样的。程序一运行就提示 存储过程与表权限报错,这时才发现原来还需要对库中用户表与用户存储过程加上权限,也就是凡是自己加的东西都要加上权限。这下傻眼了因为这样库中表过百,存储也是几百,这怎么加啊,如果用手工哪得加多久啊,而且这样加了测试库,正式库上也要加时间上不现实。求助,
1如何用代码方式给这些表与存储过程、触发等加上权限,如存储过程 加上exec 表加上可 select  del insert 等权限。
2如何快速复制用户权限到另个SQL中。

解决方案 »

  1.   

    http://topic.csdn.net/u/20090710/13/597cb12f-bcc2-4885-9814-a5124dd4c74c.html
    回复请参考一下我以前发的一个帖子,也没很好的解决。
      

  2.   


    是不是可以写批处理来完成?举例
    sqlcmd -i sqlfile.sql -d databasename -s 192.168.1.1
    查看用户权限,所有用户表与用户存储过程权限,决定哪些需要授权举例
    select * from sysobjects
    exec sp_helprotect @username = 'user name'
    最后就是授权举例
    grant creat table,create procedure ,create view to User1
    grant update on students(name,native) to User1  
    用文本编辑批量处理
      

  3.   

    代码的话只能一个一个写,或者你干脆给dbo权限,不过这不安全可以建立一个专门的角色,分配权限,并将用户添加到角色中去
      

  4.   

    程序员的sql金典