科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道如何进行 SQL Server 批理修改权限

如何进行 SQL Server 批理修改权限

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文将为大家介绍如何进行 SQL Server 批理修改权限。

作者:赛迪网 3946469 来源:天新网 2008年4月26日

关键字: Mssql SQL SQL Server 数据库

  • 评论
  • 分享微博
  • 分享邮件
问题:在机器备份的数据库到SQL Server,恢复后该数据库有一个mooip用户,该用户是数据库和一些表的所有者,但安全性里的登录中没有该用户,在删除该用户时提示“因为选定的用户拥有对象,所以无法除去该用户”。遇到这类问题不要慌张,按着该文介绍的方法一步步操作即可。

具体解决方式如下:

1、如果是一张表有此问题,解决方式如下:

exec sp_changeobjectowner "mooip.tablename", "dbo"这样就把tablename指定的表的所有者赋值给了dbo用户。

2 、如果所有表都存在此问题,这是就要编写存储过程实现批量修改了

IF OBJECT_ID("ChangeAll") IS NOT NULL Drop PROC ChangeAll
         GO 

         Create PROCEDURE ChangeAll (
             @old sysname,
             @new sysname
         )
        AS
             DECLARE @objname sysname 

             SET NOCOUNT ON 

             IF USER_ID(@old) IS NULL
                BEGIN
                    RAISERROR ("The @old passed 
                does not exist in the database", 16, 1)
                    RETURN
                END
             IF USER_ID(@new) IS NULL
                BEGIN
                    RAISERROR ("The @new passed 
                does not exist in the database", 16, 1)
                    RETURN
                END 

             DECLARE owner_cursor CURSOR FOR 

             Select name FROM sysobjects 
              Where uid = USER_ID(@old)
             OPEN owner_cursor
             FETCH NEXT FROM owner_cursor INTO @objname
             WHILE (@@fetch_status <> -1)
                 BEGIN
                     SET @objname = @old + "." + @objname
                     EXEC sp_changeobjectowner @objname, @new
                     FETCH NEXT FROM owner_cursor INTO @objname
                 END 

            CLOSE owner_cursor
            DEALLOCATE owner_cursorz
            GO 

             EXEC ChangeAll @old = "mooip", @new = "dbo"

这样就你就完成了批量修改权限的工作。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章