我有理由更改我的计算机名称(它在虚拟机中运行)。我有一个在重命名之前安装的现有 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 AUTHORIZATION
. 我建议将数据库所有者更改为真实用户以外的其他人,例如 [sa]。另一种选择是使用
EXECUTE AS LOGIN = 'owner_to_be'
,就在要执行的语句之前以创建数据库。