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

2023年 4月 16日 60.5k 0

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

数据库操作当中,当数据库对象列表不只有一个普通的元素——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    ——将除了用户表之外数据库对象(视图、存储过程)的拥有者更改成'你的用户名'

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论