SQLServer修改表所有者


批量修改:
EXEC sp_MSforeachtable 'exec sp_changeobjectowner ''?'',''dbo'' '
單個修改:
exec sp_changeobjectowner '要改的表名','dbo'

只有所有者才能更改表的所有者


有很服務器:   消息   15001,級別   16,狀態   1,過程   sp_changeobjectowner,行   38   
  對象   'user'   不存在或不是對此操作有效的對象。   
多表是導入的 一些所有者的密碼都不記得就會產生
覺得是不是沒有原來的所有者 我加了一下 嘿嘿 正常!
exec sp_changeobjectowner '表所有者.要改的表名','dbo'
就不需表的所有者才能修改了

 

 

 

補充:

--執行這個語句,就可以把當前庫的所有表的所有者改為dbo
exec sp_msforeachtable 'sp_changeobjectowner ''?'', ''dbo'''


--如果是要用戶表/存儲過程/視圖/觸發器/自定義函數一齊改,則用游標(不要理會錯誤提示)
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

1. sp_changeobjectowner
更改當前數據庫中對象的所有者。

語法
sp_changeobjectowner [ @objname = ] 'object' , [ @newowner = ] 'owner'

參數
[@objname =] 'object'

當前數據庫中現有的表、視圖或存儲過程的名稱。object 的數據類型為 nvarchar(517),沒有默認值。object 可用現有對象所有者限定,格式為 existing_owner.object。

[@newowner =] 'owner'

即將成為對象的新所有者的安全帳戶的名稱。owner 的數據類型為 sysname,沒有默認值。owner 必須是當前數據庫中有效的 Microsoft? SQL Server? 用戶或角色或 Microsoft Windows NT? 用戶或組。指定 Windows NT 用戶或組時,請指定 Windows NT 用戶或組在數據庫中已知的名稱(用 sp_grantdbaccess 添加)。

返回代碼值
0(成功)或 1(失敗)

注釋
對象所有者(或擁有對象的組或角色的成員)對對象有特殊的權限。對象所有者可以執行任何與對象有關的 Transact-SQL 語句(例如 Insert、Update、Delete、Select 或 EXECUTE),也可以管理對象的權限。

如果擁有對象的安全帳戶必須要除去,但同時要保留該對象,請使用 sp_changeobjectowner 更改對象所有者。該過程從對象中刪除所有現有權限。在運行 sp_changeobjectowner 之后,需要重新應用要保留的任何權限。

由於這個原因,建議在運行 sp_changeobjectowner 之前,編寫現有權限的腳本。一旦更改了對象的所有權,可能要使用該腳本重新應用權限。在運行該腳本之前需要在權限腳本中修改對象所有者。有關編寫數據庫腳本的更多信息,請參見編寫數據庫文檔和腳本。

可以使用 sp_changedbowner 更改數據庫的所有者。

權限
只有 sysadmin 固定服務器角色和 db_owner 固定數據庫角色成員,或既是 db_ddladmin 固定數據庫角色又是 db_securityadmin 固定數據庫角色的成員,才能執行 sp_changeobjectowner。

示例
下面的示例將 authors 表的所有者改為 Corporate\GeorgeW。

EXEC sp_changeobjectowner 'authors', 'Corporate\GeorgeW'


請參見
改變數據庫所有者:sp_changedbowner

------------------------------以上摘自sql server 的聯機叢書
注意:
使用sqlserver2000改變對象(object)(如Table,SP,View)的所有者(owner)時,需要注意一點:
如果對象改變前的owner為dbo,則直接用:exec sp_changeobjectowner 對象名,新的所有者名就可以成功。如果再需要改變該對象的所有者,則要用如下語法:
exec sp_changeobjectowner "[所有者].[對象名]",新的所有者。注意,雙引號不可省略,否則提示objectname does not exist。

EXEC sp_changeobjectowner 'cqadmin.authors', 111

 

2.建與原表結構相同表,然后把數據從原表插入到新表,操作方法:

在sql server企業管理器中選擇原表點右鍵,選擇“所有任務/生存SQL腳本”,保存生成的腳本,在腳本中把表的原所有者改成新所有者。然后再把該腳本運行一遍,數據庫中就新生成了一個表,所有者是新所有者,原來的表還在數據庫中沒有被替換。新表和舊表 表名相同,所有者不同,此時的新表中沒有數據。

然后再運行下面的語句往新表中插入數據:

Insert INTO CQAdmin.m_actiondef //新所有者.新表名
Select *
FROM RegaltecDefSchema. CQAdministrator.m_actiondef // 數據庫名.舊所有者.舊表名
運行完了就做完了,可以把舊表刪掉,也可以留着。


免責聲明!

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



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