首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 數據庫對象所有權變更完全指南:sp_changeobjectowner 詳細用法與權限遷移實戰

     編輯:關於SqlServer

核心功能:sp_changeobjectowner

用於變更當前數據庫中表、視圖、存儲過程等對象的擁有者(Schema/Principal)。語法:

sp_changeobjectowner 
    [ @objname = ] 'object_name',
    [ @newowner = ] 'new_owner'
  • object_name:現有對象名,格式 [schema.]object,類型 nvarchar(517)。
  • new_owner:目標安全主體(用戶/角色/Windows 組),類型 sysname,必須存在於當前數據庫。

執行效果與副作用

  • 權限重置:對象原有所有權限(GRANT/DENY)被**全部移除**,需重新授予。
  • 所有者特權:新擁有者獲得對象完全控制權(SELECT/INSERT/UPDATE/DELETE/EXECUTE/ALTER 等)及權限管理權。
  • 返回碼:0 成功,1 失敗。

操作前必須執行的準備工作

  1. 腳本化現有權限:使用 SSMS「生成腳本」或 sp_helprotect 導出對象當前 ACL。
  2. 修改腳本中擁有者引用:將腳本內舊擁有者替換為新擁有者。
  3. 執行變更:EXEC sp_changeobjectowner 'authors', 'CorporateGeorgeW'。
  4. 重新應用權限腳本:運行修改後的授權腳本恢復業務訪問。

權限要求

僅限以下角色成員執行:

  • sysadmin 固定服務器角色
  • db_owner 固定數據庫角色
  • 同時屬於 db_ddladmin 和 db_securityadmin 固定數據庫角色的用戶

相關操作:數據庫級所有者變更

若需變更整個數據庫擁有者,使用 sp_changedbowner。

實戰示例

-- 將表 authors 擁有者改為 CorporateGeorgeW
EXEC sp_changeobjectowner 'authors', 'CorporateGeorgeW';

-- 將存儲過程 ychw.proc_Subject512_Function 擁有者改為 dbo
EXEC sp_changeobjectowner 'ychw.proc_Subject512_Function', 'dbo';

最佳實踐建議

  • 優先使用 Schema 管理對象歸屬(SQL 2005+),避免頻繁變更對象級所有者。
  • 變更前務必備份權限矩陣,變更後驗證應用連接字符串無隱式 Schema 依賴。
  • 自動化腳本化流程,納入變更管理流程,保留審計軌跡。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved