恢复数据库后创建dba用户失败(错误15063)如何解决?
解决SQL Server数据库所有者变更与用户创建错误15063的问题
错误原因解析
执行 sp_changedbowner 'dba', true 后,登录名 dba 已经与目标数据库的 dbo 用户建立了一对一的映射关系(SQL Server 中,数据库所有者对应的默认用户就是 dbo,无论登录名是什么)。此时你尝试创建同名的 dba 数据库用户,就会触发错误15063——因为一个登录名在同一数据库内只能映射到一个用户。
分步解决方法
1. 解决无法以dba身份登录的问题
首先排查登录名 dba 的状态和权限:
- 检查登录名是否被禁用:
在服务器级别执行以下查询:
如果返回的SELECT name, is_disabled FROM sys.server_principals WHERE name = 'dba';is_disabled值为1,执行以下语句启用登录名:ALTER LOGIN dba ENABLE; - 验证登录名与数据库用户的映射关系:
切换到目标数据库,执行查询确认映射:
正常情况下,SELECT dp.name AS 数据库用户, sp.name AS 登录名 FROM sys.database_principals dp JOIN sys.server_principals sp ON dp.sid = sp.sid WHERE dp.name = 'dbo';登录名列应显示为dba,说明映射正确——此时dba作为数据库所有者,默认拥有该数据库的全部权限,无需额外创建用户。
2. 若需数据库内存在名为dba的用户而非dbo
如果你明确需要数据库中存在名为 dba 的用户,同时让其成为数据库所有者,执行以下步骤:
- 先将数据库所有者改回原有登录名(例如
sa):EXEC sp_changedbowner 'sa'; - 删除数据库中可能存在的
dba用户(若有):DROP USER IF EXISTS dba; - 创建映射到登录名
dba的数据库用户:CREATE USER dba FOR LOGIN dba; - 将数据库所有者设置为该
dba用户:
完成后,登录名ALTER AUTHORIZATION ON DATABASE::[你的数据库名称] TO dba;dba即可访问数据库,且数据库内的所有者用户名为dba。
内容的提问来源于stack exchange,提问作者MurraySobol
相关产品推荐
相关产品推荐

