如何更改 SQL Server 中新数据库的默认数据库所有者?

Man*_*ngo 2 sql-server logins owner

我有理由更改我的计算机名称(it\xe2\x80\x99s 在虚拟机中运行)。我有一个现有的 SQLExpress 实例,它是在重命名之前安装的。

\n

有些功能会失败,因为新数据库仍然由旧所有者创建。更具体地说,当我尝试创建新的数据库图表时,出现以下错误。

\n
\n

无法获取有关 Windows NT 组/用户 \'OLDNAME\\user\' 的信息,错误代码 0x534。(微软 SQL Server,错误:15404)。

\n
\n

我使用以下说明来重命名服务器:

\n
sp_dropserver \'OLDNAME\\SQLEXPRESS\';\nGO\nsp_addserver \'NEWNAME\\SQLEXPRESS\',\'local\';\nGO\n--  Restart Server\nSELECT @@SERVERNAME;    --  NEWNAME\\SQLEXPRESS\n
Run Code Online (Sandbox Code Playgroud)\n

但是,这并不影响新数据库的默认所有者。它们仍在与所有者一起创建OLDNAME\\user,但所有者已不存在。

\n

我知道如何在创建后更改现有数据库的所有者。但是,如何才能让新数据库拥有正确的所有者呢?

\n

Bre*_*rey 5

默认所有者将是创建数据库的人。就您而言,听起来您正在使用本地计算机帐户作为 SQL Server 的 Windows 登录名。因此,登录名的形式为OLDNAME\user; NEWNAME\user但是,您希望以所有者身份创建新数据库。

对 Windows 帐户的更改不会传播到 SQL Server,因此旧的登录名将持续存在,直到您手动更改为止。但是,登录会继续工作,因为 SID 是 SQL Server 在验证帐户时引用它的方式。

要解决此问题,您需要使用ALTER LOGIN命令将登录名从 更改OLDNAME\userNEWNAME\user

ALTER LOGIN [OLDNAME\user] WITH NAME = [NEWNAME\user]
Run Code Online (Sandbox Code Playgroud)

如果需要更改现有数据库的所有者,可以使用ALTER AUTHORIZATION. 我建议将数据库所有者更改为真实用户以外的其他人,例如 [sa]。

ALTER AUTHORIZATION ON DATABASE::<database_name>
    TO <domain>\<user>
Run Code Online (Sandbox Code Playgroud)

EXECUTE AS LOGIN = 'owner_to_be'另一种选择是在要执行的创建数据库的语句之前使用, 。