小编Tim*_*ell的帖子

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

我有一个在亚马逊 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
Run Code Online (Sandbox Code Playgroud)

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

我检查了新创建的数据库,并且我的用户已db_owner按照我的预期在数据库中分配了角色,所以我的理解是,这应该是该用户能够删除他们刚刚创建的数据库的足够权限。

在此处输入图片说明

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

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

Sql 服务器版本信息:Microsoft SQL Server 2012 (SP1) - 11.0.3368.0 (X64) /n May 22 2013 17:10:44 …

sql-server permissions sql-server-2012 amazon-ec2

12
推荐指数
1
解决办法
1万
查看次数

为什么 SQL Server 不回滚 identity_insert 状态?

我有一个大型脚本,用于设置一个新数据库,该数据库在许多表上执行大量身份插入;当我正在扩展它时,由于它正在进行中,我经常遇到暂时性错误。如果这些错误之一介于两者之间set identity_insert [table] onset identity_insert [table] off并且脚本拒绝第二次运行并显示以下错误:

消息 8107,级别 16,状态 1,第 15 行
IDENTITY_INSERT 已为表“x”打开。无法对表 'y' 执行 SET 操作。

这是一种痛苦!为了解决这个问题,我突出显示“离线”行并手动运行,或者终止连接并重新连接(身份插入是我收集的每个会话)。

我将整个脚本包装在一个事务中,set xact_abort on在顶部,所以我期望服务器返回到错误前的状态。

为什么不是这样?我做错了什么吗,还有比我在这里更强大的方法吗?

以下是重现该行为的最小测试用例。运行两次,注意错误从第一次运行中的类型转换错误到后续运行中的 identity_insert 错误:

-- setup test tables for convenience
if not exists (select * from sys.tables where name = 'bill')
begin
    create table bill (id int identity primary key);
end
if not exists (select * from sys.tables where name = 'ben')
begin
    create table ben (id int identity primary key, …
Run Code Online (Sandbox Code Playgroud)

sql-server transaction

2
推荐指数
1
解决办法
3042
查看次数