db_owner无法删除数据库-错误615,SQL Server


11

我有一个在Amazon EC2上运行的SQL Server 2012数据库。我已经创建了一个用户,可以创建,编辑和删除数据库。我给新用户dbcreator担任服务器角色。

我的用户可以远程连接并成功运行create database foo;命令。但是,当用户尝试使用drop database foo;命令再次删除数据库时,失败并显示以下错误:

Warning: Fatal error 615 occurred at Feb  1 2014  5:15PM.
   Note the error and time, and contact your system administrator.
ErrorCode: 21

即使选择的数据库是master(所以我也不认为是因为它正在使用中)。当我再次运行该命令时,该命令成功,以管理用户身份登录。

我检查了新创建的数据库,并按db_owner预期向用户分配了该数据库中的角色,因此我的理解是,这对于该用户来说应该是足够的权限,以便能够删除他们刚刚创建的数据库。

在此处输入图片说明

根据http://technet.microsoft.com/zh-cn/library/ms178613.aspx,db_owner角色应具有足够的权限。“需要数据库的CONTROL权限,ALTER ANY DATABASE权限或db_owner固定数据库角色的成员身份。”

我查找了错误615,发现“找不到数据库表ID%d,名称为'%。* ls'。” 这对我来说毫无意义。http://technet.microsoft.com/zh-CN/library/aa937592(v=sql.80).aspx

SQL Server版本信息:Microsoft SQL Server 2012 (SP1) - 11.0.3368.0 (X64) /n May 22 2013 17:10:44 /n Copyright (c) Microsoft Corporation/n Express Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)/n-从select @@version

Answers:


12

我可以猜测您已将数据库的“自动关闭”选项设置为“真”。使用Express Editions创建数据库时,这是默认行为。

在这种情况下,可能会发生上述错误。实际上,完整的错误消息615指出:"Could not find database ID %d, name '%.*ls'. The database may be offline. Wait a few minutes and try again."...因此,它指出在删除过程中可能会关闭数据库。

因此,转到数据库属性,将其切换为False,然后再次删除它或在删除之前使用以下脚本

ALTER DATABASE [MyDB] SET AUTO_CLOSE OFF 
GO

许多人指出,最好将AutoClose设置为False。我发现这篇文章进一步解释了有关自动关闭的内容:http : //sqlmag.com/blog/worst-practice-allowing-autoclose-sql-server-databases

小扩展答案:

-- this works in standard SQL Server Editions, but NOT with Express Editions:
CREATE DATABASE [MyDB]
GO
DROP DATABASE [MyDB]
GO

-- this works in ALL SQL Server Editions
CREATE DATABASE [MyDB]
GO
ALTER DATABASE [MyDB] SET AUTO_CLOSE OFF 
GO
DROP DATABASE [MyDB]
GO

2

您描述的配置应该很好。

您是否真的有可能尝试以其他用户身份删除数据库?

我建议以使用SSMS的测试用户身份进行连接,以100%确保您是该用户。另外,在删除数据库检查之前,您可以从中访问一些数据,也许还可以测试您可以将其置于单用户模式下,我想您最终还是需要这样做


我确实确实尝试过直接在服务器上使用SSMS,并使用该用户的凭据建立新连接。与远程结果相同。我刚刚检查了一下,用户确实可以创建表,插入一行并成功读回该行。在ssms中执行查询之前,我仔细检查了显示的正确用户,但是在运行drop语句后,它更改为“未连接”。我想那只是因为这是一个致命错误,但我之前没有注意到这一点。
蒂姆·阿贝尔2014年

2
@Tim:是的,级别为20或更高的错误会断开连接,所以这只是一种症状。SQL Server错误日志或应用程序事件日志是否提供更多信息?
乔恩·塞格尔

恐怕我还没有机会再去检查一下,但是谢谢您的提示。下次查看该日志时,我将检查日志(不确定何时会出现)。
蒂姆·阿贝尔2014年

0

我没有找到原因,但以下虽然不是最佳解决方案的确启用了命令。

我希望它指出了问题,并且有人可以提供更好的答案。

我在本地主机安全性登录名下使用Microsoft SQL Server Management Studio(管理员)

双击用户,选择服务器角色,指定dbcreator,public和sysadm。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.