将Sql Server对象的当前拥有者更改成目标拥有者

数据库操作当中,当数据库对象列表不只有一个普通的元素——objectname时,你将要使用objectowner.objectname来引用对象,但如果需要更改当前数据库中对象的所有者可以使用系统存储过程 sp_changeobjectowner (点击这里更详细)

sp_changeobjectowner
更改当前数据库中对象的所有者。
语法: sp_changeobjectowner  [ @objname = ] 'object' , [, @newowner = ] 'owner'. 参数. [@objname =] 'object'.

但往往由于数据库对象过多,希望批处理更改当前数据库中对象的所有者,那么你可以尝试使用Net Fetch的 nf_ChangeObjectOwner 存储过程来完成批处理。具体用法如下:

首先使用以下代码创建存储过程——

nf_ChangeObjectOwner 
将Sql Server对象的当前拥有者更改成目标拥有者
语法:nf_ChangeObjectOwner [, @current_Owner = ] 'owner',[,@target_Owner =] 'owner',[ ,@modify_Type=] type


代码如下:

if exists (select * from sysobjects where id = object_id(N'[nf_ChangeObjectOwner]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure nf_ChangeObjectOwner
GO

Create PROCEDURE nf_ChangeObjectOwner 
    @current_Owner nvarchar(255),    
    @target_Owner nvarchar(255),
    @modify_Type int
/***********************************************************************************************

nf_ChangeObjectOwner

实现功能:    将Sql Server对象的当前拥有者更改成目标拥有者
**** 使用本代码前请备份数据库!
**** 所带来的安全问题,与俺家的驴子无关!
**** 欢迎斧头劈我,劈死偶有奖!
调用方法:    Exec nf_ChangeObjectOwner @current_Owner,@target_Owner,@modify_Type

输入参数:    @current_Owner nvarchar(255)    --对象的当前拥有者
        @target_Owner nvarchar(255)    --对象的目标拥有者
        @modify_Type int        --0为默认,更改表的拥有者;1为视图和存储过程
输出参数:    RETURN值        = -1        --操作对象为0,操作对象不存在
                = -2        --操作失败,可能对象被锁定
                = 0(默认值)    --操作成功,打印更改对象数目@object_Num
        @object_Num            --SQL 打印值,返回更改成功的对象数目

@Write by Net Fetch.    @At 2005/09/12
                            @Email: cnNetFetch*Gmail.Com    blog.ad0.cn

************************************************************************************************/
AS
    DECLARE @str_Tbl_Name nvarchar(255),@object_Num int,@current_Owner_uid smallint
    Set @object_Num = 0
    DECLARE @return_status int
    Set @return_status = -1
    Set @current_Owner_uid = (Select uid From sysusers Where [Name] = @current_Owner)
    If Not (Len(@current_Owner_uid)>0)  
        RETURN -1
        If (@modify_Type = 1)
            DECLARE ChangeObjectOwner_Cursor CURSOR FOR Select [Name] From sysobjects Where (type='U' or type='V' or type='P') and userstat=0 and [Name]<>'nf_ChangeObjectOwner' and status>-1 and uid = @current_Owner_uid
        Else
            DECLARE ChangeObjectOwner_Cursor CURSOR FOR Select [Name] From sysobjects Where (type='U' or type='V' or type='P') and userstat<>0 and [Name]<>'dtproperties' and uid = @current_Owner_uid
        OPEN ChangeObjectOwner_Cursor
    BEGIN TRANSACTION Change_ObjectOwner        
        FETCH NEXT FROM ChangeObjectOwner_Cursor INTO @str_Tbl_Name
        WHILE (@@FETCH_STATUS = 0)
            BEGIN    
                Set @str_Tbl_Name = @current_Owner + '.' + @str_Tbl_Name
                Print @str_Tbl_Name
                EXEC @return_status = sp_changeobjectowner @str_Tbl_Name, @target_Owner
                IF (@return_status <> 0)
                    BEGIN 
                        ROLLBACK TRANSACTION Change_ObjectOwner
                        RETURN -2
                    END
                Set @object_Num = @object_Num + 1
                FETCH NEXT FROM ChangeObjectOwner_Cursor INTO @str_Tbl_Name
            END
        Print @object_Num
    COMMIT TRANSACTION Change_ObjectOwner
    CLOSE ChangeObjectOwner_Cursor
    DEALLOCATE ChangeObjectOwner_Cursor

Go

Usage(使用方法): Exec nf_ChangeObjectOwner 'dbo','你的用户名',0
   ——将所有用户表的拥有者更改成'你的用户名'
Usage(使用方法): Exec nf_ChangeObjectOwner 'dbo','你的用户名',1
   ——将除了用户表之外数据库对象(视图、存储过程)的拥有者更改成'你的用户名'

(0)

相关推荐

  • 将Sql Server对象的当前拥有者更改成目标拥有者

    数据库操作当中,当数据库对象列表不只有一个普通的元素--objectname时,你将要使用objectowner.objectname来引用对象,但如果需要更改当前数据库中对象的所有者可以使用系统存储过程 sp_changeobjectowner (点击这里更详细) sp_changeobjectowner 更改当前数据库中对象的所有者. 语法: sp_changeobjectowner  [ @objname = ] 'object' , [, @newowner = ] 'owner'. 参

  • SQL Server 2008 阻止保存要求重新创建表的更改问题的设置方法

    SQL Server 2008"阻止保存要求重新创建表的更改"的错误的解决方案是本文我们主要要介绍的内容,情况是这样的:我们在用SQL Server 2008 建完表后,插入或修改任意列时,提示:当用户在在SQL Server 2008企业管理器中更改表结构时,必须要先删除原来的表,然后重新创建新表,才能完成表的更改. 如果强行更改会出现以下提示:不允许保存更改.您所做的更改要求删除并重新创建以下表.您对无法重新创建的标进行了更改或者启用了"阻止保存要求重新创建表的更改&qu

  • SQL server中提示对象名无效的解决方法

    产生SQL对象名无效的问题大多原因是由于数据迁移导致的,下面我们给出解决方法. 在使用数据库的过程中,经常会遇到数据库迁移或者数据迁移的问题,或者有突然的数据库损坏,这时需要从数据库的备份中直接恢复.但是,此时会出现问题,这里说明几种常见问题的解决方法. 一.孤立用户的问题 比如,以前的数据库的很多表是用户test建立的,但是当我们恢复数据库后,test用户此时就成了孤立用户,没有与之对应的登陆用户名,哪怕你建立了一个test登录用户名,而且是以前的用户密码,用该用户登录后同样没办法操作以前属于

  • SQL Server 2012 安全概述

    在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Server里的安全功能充分利用,不用在面对特定威胁,不能保护你数据的功能上浪费时间. 从让人眼花缭乱的客户端使用连接,通过到处分布的网络,尤其是互联网,关系数据库在各种应用程序里广泛使用.这使数据对任何人,在任何地方都可访问.数据库可以保存人类知识的很大部分,包括高度敏感的个人信息和让国际商务工作的关

  • SQL SERVER 数据库备份的三种策略及语句

    1.全量数据备份 备份整个数据库,恢复时恢复所有.优点是简单,缺点是数据量太大,非常耗时 全数据库备份因为容易实施,被许多系统优先采用.在一天或一周中预定的时间进行全数据库备份使你不用动什么脑筋.使用这种类型的备份带来的问题是非常缺乏灵活性,而且当数据库被冲掉后,你面临丢失大量数据的潜在威胁.例如,假设你每天在午夜备份数据库. 如果服务器在晚上11点崩溃了,你将丢失前面23个小时对数据所做的全部修改.对大多数系统来说,这是无法接受的.对此规则,为数不多的例外如下: 1.系统中所存的数据可以很容易

  • SQL Server 2012 身份验证(Authentication)

    在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Server里的安全功能充分利用,不用在面对特定威胁,不能保护你数据的功能上浪费时间. 身份验证是验证主体(需要访问SQL Server数据库的用户或进程,是声称是的人或物)的过程.主体需要唯一的身份,这样的话SQL Server可以决定主体有哪个许可.在提供安全访问数据库对象中,正确的身份验证是必须的

  • 将Access数据库移植到SQL Server

    随着用户对于企业级高性能数据库的需求的增长,用户时常要从Microsoft Access Jet引擎的文件-服务器环境下转换到Microsoft SQL Server的客户-服务器环境.Microsoft Office 2000中的Access 2000 Upsizing Wizard可实现将数据表和查询转移到SQL Server 7.0中.如果您用的是Access的较早的版本,您可以先将它升级为Access 2000,然后再使用其中的Upsizing Wizard,从而将您的应用移植到SQL 

  • SQL Server数据类型转换方法

    在SQL Server日常的函数.存储过程和SQL语句中,经常会用到不同数据类型的转换.在SQL Server有两种数据转换类型:一种是显性数据转换:另一种是隐性数据转换.下面分别对这两种数据类型转换进行简要的说明: 1 显式转换 显示转换是将某种数据类型的表达式显式转换为另一种数据类型.常用的是CAST 和 CONVERT 函数. CAST: CAST ( expression AS data_type )  CONVERT: CONVERT (data_type[(length)], exp

  • Sql Server查询性能优化之不可小觑的书签查找介绍

    小小程序猿SQL Server认知的成长 1.没毕业或工作没多久,只知道有数据库.SQL这么个东东,浑然分不清SQL和Sql Server Oracle.MySql的关系,通常认为SQL就是SQL Server 2.工作好几年了,也写过不少SQL,却浑然不知道索引为何物,只知道数据库有索引这么个东西,分不清聚集索引和非聚集索引,只知道查询慢了建个索引查询就快了,到头来索引也建了不少,查询也确实快了,偶然问之:汝建之索引为何类型?答曰:... 3.终于受到刺激开始奋发图强,买书,gg查资料终于知道

  • SQL server 2008 更改登录验证方式的方法

    前言:之前在敲学生的时候也遇到过这个问题,但是当时没有能及时总结,导致这次遇到问题还要重新去查,所以今天就做个总结,方便自己也帮助他人! 如果在安装过程中选择"Windows 身份验证模式",则 sa 登录名将被禁用.如果稍后将身份验证模式更改为"SQL Server 和 Windows 身份验证模式",则 sa 登录名仍处于禁用状态.若要启用 sa 登录帐户,请使用 ALTER LOGIN 语句. 安全说明: sa 帐户是一个广为人知的 SQL Server 帐户

随机推荐