我们有一个所有者为“dbowner”的数据库。我们的安装过程删除用户“dbowner”的登录名并重新创建它。
在任何其他版本的 SQL Server 上,以下 SQL 查询成功:
USE [master]
DROP LOGIN 'dbowner'
Run Code Online (Sandbox Code Playgroud)
在 SQL Server 2014 上,相同的查询返回以下错误:
登录 'dbowner' 拥有一个或多个数据库。在删除登录之前更改数据库的所有者。
谁能解释为什么这在 SQL Server 2014 上会有所不同?删除登录适用于所有其他版本的 SQL Server(2005、2008 和 2012)。
是否有任何设置可以强制在 SQL Server 2014 上使用相同的设置?
更新:
我可以用一个使用 Windows 用户的例子来复制这个。有任何想法吗?
CREATE LOGIN [comp\winuser] FROM WINDOWS;
GO
CREATE DATABASE mydb;
GO
ALTER AUTHORIZATION ON DATABASE::mydb TO [comp\winuser];
GO
DROP LOGIN [comp\winuser];
GO
Run Code Online (Sandbox Code Playgroud)
更新 2:
谢谢您的意见。我同意删除所有者的登录名是不可取的(但除 SQL Server 2014 外,其他地方的 Windows 用户都可以使用)。然而,我们的安装脚本目前依赖于它,极其复杂的数据库安装过程是 15 年前某个人制作的(他不再与我们合作了)。如果可能(只要它有效),我们希望避免更改该领域。
在我看来,我们有三个选择: