Man*_*ngo 2 sql-server logins owner
我有理由更改我的计算机名称(it\xe2\x80\x99s 在虚拟机中运行)。我有一个现有的 SQLExpress 实例,它是在重命名之前安装的。
\n有些功能会失败,因为新数据库仍然由旧所有者创建。更具体地说,当我尝试创建新的数据库图表时,出现以下错误。
\n\n\n无法获取有关 Windows NT 组/用户 \'OLDNAME\\user\' 的信息,错误代码 0x534。(微软 SQL Server,错误:15404)。
\n
我使用以下说明来重命名服务器:
\nsp_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默认所有者将是创建数据库的人。就您而言,听起来您正在使用本地计算机帐户作为 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]
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'
另一种选择是在要执行的创建数据库的语句之前使用, 。