Sql-Server
如何更改 SQL Server 中新數據庫的預設數據庫所有者?
我有理由更改我的電腦名稱(它在虛擬機中執行)。我有一個在重命名之前安裝的現有 SQLExpress 實例。
有一些功能會失敗,因為新數據庫仍然是使用舊所有者創建的。更具體地說,當我嘗試創建新的數據庫圖表時,出現以下錯誤。
無法獲取有關 Windows NT 組/使用者 ‘OLDNAME\user’ 的資訊,錯誤程式碼 0x534。(Microsoft SQL Server,錯誤:15404)。
我使用以下說明重命名伺服器:
sp_dropserver 'OLDNAME\SQLEXPRESS'; GO sp_addserver 'NEWNAME\SQLEXPRESS','local'; GO -- Restart Server SELECT @@SERVERNAME; -- NEWNAME\SQLEXPRESS
但是,這並不影響新數據庫的預設所有者。它們仍在與
OLDNAME\user
不再存在的所有者一起創建。我知道如何在創建後更改現有數據庫的所有者。但是,我怎樣才能讓新數據庫擁有正確的所有者呢?
預設所有者將是創建數據庫的人。在您的情況下,聽起來您正在使用本地電腦帳戶作為 SQL Server 的 Windows 登錄名。因此,登錄名的格式為
OLDNAME\user
; 但是,您希望以NEWNAME\user
所有者身份創建新數據庫。對 Windows 帳戶的更改不會傳播到 SQL Server,因此舊登錄名將一直存在,直到您手動更改它。但是,登錄繼續工作,因為 SID 是 SQL Server 在驗證帳戶時引用它的方式。
要解決此問題,您需要使用ALTER LOGIN命令將登錄名從 更改
OLDNAME\user
為NEWNAME\user
。ALTER LOGIN [OLDNAME\user] WITH NAME = [NEWNAME\user]
如果需要更改現有數據庫的所有者,可以使用
ALTER AUTHORIZATION
. 我建議將數據庫所有者更改為真實使用者以外的其他人,例如$$ sa $$.
ALTER AUTHORIZATION ON DATABASE::<database_name> TO <domain>\<user>
另一種選擇是使用
EXECUTE AS LOGIN = 'owner_to_be'
,就在要執行的語句之前以創建數據庫。