批量更改数据库所有者的对象
来源:网络来源 时间:2010-05-14 点击:次
--功能说明:批量更改数据库所有者的对象
--用法:exec ChangeObjectOwner ’nmkspro’,’dbo’
--即可将所有nmkspro所有者的对象改为dbo所有
--运行成功后将提示:\"注意: 更改对象名的任一部分都可能破坏脚本和存储过程。\"
CREATE PROCEDURE dbo.ChangeObjectOwner
@OldOwner as NVARCHAR(128),--参数原所有者
@NewOwner as NVARCHAR(128)--参数新所有者
AS
DECLARE @Name as NVARCHAR(128)
DECLARE @Owner as NVARCHAR(128)
DECLARE @OwnerName as NVARCHAR(128)
DECLARE curObject CURSOR FOR
select 'Name' = name,
'Owner' = user_name(uid)
from sysobjects
where user_name(uid)=@OldOwner
order by name
OPEN curObject
FETCH NEXT FROM curObject INTO @Name, @Owner
WHILE(@@FETCH_STATUS=0)
BEGIN
if @Owner=@OldOwner
begin
set @OwnerName = @OldOwner + '.' + rtrim(@Name)
exec sp_changeobjectowner @OwnerName, @NewOwner
end
FETCH NEXT FROM curObject INTO @Name, @Owner
END
close curObject
deallocate curObject
GO
---
如果将一个表所有者改为dbo,只需
sp_changeobjectowner '表名','dbo'即可
要将所有的表的所有者都改为dbo,可以用循环处理,此处略
其实用SQL的系统存储过程sp_MSForEachTable可以轻松搞定
只需exec sp_MSForEachTable 'sp_changeobjectowner ''?'', ''dbo'''
/*附加数据库修改所有者*/
企业管理器 > 服务器设置 > 允许对系统目录直接进行修改
delete from sysusers where name='附加上来的原有用户名'
企业管理器 > 安全性 > 添加/编辑用户拥有数据库的所有者权限