日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

更改SQL Server表所有者的操作方法

發(fā)布時間:2025/3/20 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 更改SQL Server表所有者的操作方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

更改SQL Server表所有者的操作方法

筆者用過兩種方法:

1) 通過修改當(dāng)前數(shù)據(jù)庫的對象表:sysobjects

sysobjects存儲的是當(dāng)前數(shù)據(jù)庫中的表的基本信息,其中由一個字段:uid,記錄的是表所有者的id號。如:uid為‘1’,一般表示所有者為dbo(一般是sa)??梢詾楸硭姓吒臑槟闼M谋硭姓叩?/span>id。

需要注意的是,直接在sysobjects表中對數(shù)據(jù)進(jìn)行的更新操作需要有權(quán)限允許。不然會更新不成功

2) 另外一種方式是通過sql腳本來完成的。

例如:exec sp_changeobjectowner 'cqadmin.authors', 111 將表'cqadmin.authors'的所有者改為111.

下面列出了網(wǎng)上搜索到的詳細(xì)資料:

來自于:http://www.cnblogs.com/cnkenny/archive/2008/07/31/1257642.html

今天下午還原sql數(shù)據(jù)庫以后,不管怎么樣也無法登陸論壇,仔細(xì)檢查才發(fā)現(xiàn),sql server表還是以前建立的用戶,而又無法刪除,,這些表的權(quán)限都不是DBO 后來在網(wǎng)上找了半天,才找到解決辦法,這里先保存下來。用來解決大家在還原了sql數(shù)據(jù)庫以后,無法刪除原登陸用戶的問題。

--執(zhí)行這個語句,就可以把當(dāng)前庫的所有表的所有者改為dbo

exec sp_msforeachtable 'sp_changeobjectowner ''?'', ''dbo'''

--如果是要用戶表/存儲過程/視圖/觸發(fā)器/自定義函數(shù)一齊改,則用游標(biāo)(不要理會錯誤提示)

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

更改當(dāng)前數(shù)據(jù)庫中對象的所有者。

語法

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

參數(shù)

[@objname =] 'object'

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

[@newowner =] 'owner'

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

返回代碼值

0(成功)或 1(失敗)

注釋

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

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

由于這個原因,建議在運行 sp_changeobjectowner 之前,編寫現(xiàn)有權(quán)限的腳本。一旦更改了對象的所有權(quán),可能要使用該腳本重新應(yīng)用權(quán)限。在運行該腳本之前需要在權(quán)限腳本中修改對象所有者。有關(guān)編寫數(shù)據(jù)庫腳本的更多信息,請參見編寫數(shù)據(jù)庫文檔和腳本。

可以使用 sp_changedbowner 更改數(shù)據(jù)庫的所有者。

權(quán)限

只有 sysadmin 固定服務(wù)器角色和 db_owner 固定數(shù)據(jù)庫角色成員,或既是 db_ddladmin 固定數(shù)據(jù)庫角色又是 db_securityadmin 固定數(shù)據(jù)庫角色的成員,才能執(zhí)行 sp_changeobjectowner。

示例

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

EXEC sp_changeobjectowner 'authors', 'Corporate/GeorgeW'

請參見

改變數(shù)據(jù)庫所有者:sp_changedbowner

------------------------------以上摘自sql server 的聯(lián)機叢書

注意:

使用sqlserver2000改變對象(object)(如TableSPView)的所有者(owner)時,需要注意一點:

如果對象改變前的ownerdbo,則直接用:exec sp_changeobjectowner 對象名,新的所有者名就可以成功。如果再需要改變該對象的所有者,則要用如下語法:

exec sp_changeobjectowner "[所有者].[對象名]",新的所有者。注意,雙引號不可省略,否則提示objectname does not exist

EXEC sp_changeobjectowner 'cqadmin.authors', 111

2.建與原表結(jié)構(gòu)相同表,然后把數(shù)據(jù)從原表插入到新表,操作方法:

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

然后再運行下面的語句往新表中插入數(shù)據(jù):

Insert INTO CQAdmin.m_actiondef //新所有者.新表名

Select *

FROM RegaltecDefSchema. CQAdministrator.m_actiondef // 數(shù)據(jù)庫名.舊所有者.舊表名

運行完了就做完了,可以把舊表刪掉,也可以留著。

總結(jié)

以上是生活随笔為你收集整理的更改SQL Server表所有者的操作方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。