(5.3.13)sql server修改作業所有者,sql server修改數據庫所有者,sql server修改數據庫對象所有者


【0】無法刪除登錄名,因為它是對象的所有者

【1】作業所有者

【1.1】作業表與登錄名基本信息

(1)查看登錄名信息

--登錄名表,所有者表
select * from master.dbo.syslogins  
--角色權限關系表
select * from sys.database_principals 

(2)查看作業信息

查詢所有作業的表:sysjobs(可以去官網了解文檔內容)

select * from msdb.dbo.sysjobs

--其中的sid和所有者表里的owner_sid是一致的

【1.2】查看某個登錄名下擁有的作業

(1)查詢被廢棄的所有者號下的所有作業

--可以用這個先查一遍。
select a.*,b.name from
( 
select * from msdb.dbo.sysjobs where owner_sid<>0x01
) a
left join master.sys.syslogins b on a.owner_sid=b.sid
where b.name like '%這里換成將要刪除的帳號%'

【1.3】自動化更新所有涉及到的作業的所有者為sa

declare @job_id varchar(300)
select a.job_id into #ttt from
( 
  select name,[enabled],owner_sid,job_id from msdb.dbo.sysjobs where owner_sid<>0x01
) a
left join master.sys.syslogins b on a.owner_sid=b.sid
where b.name is null or b.name like '%這里換成將要刪除的帳號%'
while (select count(1) from #ttt)>0
begin
select top 1 @job_id=job_id from #ttt order by job_id asc
declare @sql varchar(500)
select @sql = 'EXEC msdb.dbo.sp_update_job @job_id=N'''+@job_id+''', @owner_login_name=N''sa'''
print (@sql)
exec (@sql)
delete from #ttt where job_id=@job_id
end 
truncate table #ttt
drop table #ttt

【2】數據庫所有者

--修改數據庫dbname的所有者為sa
ALTER AUTHORIZATION ON DATABASE::dbname to [sa];

--修改dbname的所有者為sa
use dbname
sp_changedbowner sa

 

【2.1】查看登錄名對應擁有的數據庫

-- 查看屬於帶gg字樣登錄名的數據庫
select
t2.name,t1.* from sys.databases t1 join master.sys.syslogins t2 on t1.owner_sid=t2.sid where t2.name like '%gg%'

【2.2】自動化更新該登錄名下所有數據庫的擁有者為sa

-- 修改對應登錄名擁有的數據庫所有者為sa
declare
@sql varchar(max) set @sql='' select @sql=@sql+cast('use '+t1.name+';ALTER AUTHORIZATION ON DATABASE::['+t1.name+'] TO [sa];'+char(13) as varchar(max)) from master.sys.databases t1 join master.sys.syslogins t2 on t1.owner_sid=t2.sid where t2.name like '%gg%' print @sql exec(@sql)

【3】數據庫對象所有者sp_changeobjectowner 

【3.1】單表 

use test;
go

exec sp_changeobjectowner '[db_owner].[T1]','dbo';

執行上面存儲過程過后,表對象T1的所有者(owner)就從db_owner改為了dbo了。

【3.2】所有表

如果一個數據庫里面的表對象非常多,那么使用該方法就非常的繁瑣了。此時就可以使用sp_MSforeachtable來批量處理該工作。

use test;
go
 
exec sp_MSforeachtable 'exec sp_changeobjectowner ''?'',''dbo'' '

【3.3】所有數據庫對象

declare tb cursor local for
 
select 'sp_changeobjectowner ''['+replace(user_name(uid),']',']]')+'].[' 
+replace(name,']',']]')+']'',''dbo'''
from sysobjects
where xtype in('U','V','P','TR','FN','IF','TF') and status>=0
 
open tb
declare @s nvarchar(4000)
fetch tb into @s 
    while @@fetch_status=0 
    begin 
        exec(@s) 
        fetch tb into @s
    end
close tb
 
deallocate tb
go            

【3.4】修改數據庫對象所有者的注意事項

可能會導致視圖、存儲過程出現問題

  

 

【3.5】使用 alter schema 修改數據庫對象所有者

ALTER SCHEMA dbo TRANSFER db_owner.T1;

 

 

【參考文檔】

【3】中引用自:https://www.cnblogs.com/kerrycode/p/4314651.html?utm_source=tuicool&utm_medium=referral


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM