db_owner가 데이터베이스를 삭제할 수 없습니다-오류 615, SQL Server


11

Amazon EC2에서 실행되는 SQL Server 2012 데이터베이스가 있습니다. 데이터베이스를 작성, 편집 및 삭제 (drop) 할 수있는 사용자를 작성했습니다. 새 사용자에게 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/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 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.

답변:


12

데이터베이스에 대한 자동 닫기 옵션이 True로 설정되어 있다고 생각할 수 있습니다. Express Edition으로 데이터베이스를 작성할 때 이것이 기본 동작입니다.

이 경우 언급 된 오류가 정확하게 발생할 수 있습니다. 실제로 전체 오류 메시지 615는 다음과 같이 말합니다. "Could not find database ID %d, name '%.*ls'. The database may be offline. Wait a few minutes and try again."... 삭제 중에 데이터베이스를 닫을 수 있음을 나타냅니다.

따라서 DB 속성으로 이동하여 False로 전환 한 후 다시 삭제하거나 스크립트를 사용하여 삭제하십시오.

ALTER DATABASE [MyDB] SET AUTO_CLOSE OFF 
GO

많은 사람들은 AutoClose를 False로 설정하는 것이 좋습니다. 이 기사에서는 AutoClose에 대해 조금 더 설명했습니다. 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 % 확신하는 것이 좋습니다. 또한 데이터베이스 검사를 삭제하기 전에 일부 데이터에 액세스 할 수 있습니다. 어쩌면 궁극적으로 어쨌든해야 할 것으로 생각되는 단일 사용자 모드로 넣을 수 있는지 테스트하십시오.


I have indeed tried with SSMS directly on the server, making a new connection with this user's credentials. Same result as remotely. I've just checked and the user can indeed create a table, insert a row and read the row back successfully. I double-checked the correct user was showing before executing the query in ssms and it was, but after running the drop statement it changed to "not connected". I guess that's just because it's a fatal error but I hadn't noticed this before now.
Tim Abell

2
@Tim: Yes, errors of level 20 and higher drop the connection, so that's just a symptom. Does the SQL Server Error Log or the Application Event Log give any more information?
Jon Seigel

I'm afraid I haven't had a chance to go back to this to check, but thanks for the tip. I shall check the logs next time I'm looking into this (not sure when that will be).
Tim Abell

0

I did not find the cause for this, but the following while not best solution does enable command.

It is my hope it points to the problem and someone can provide a better answer.

I use Microsoft SQL Server Management Studio (Administrator) Under localhost Security logins

Double click user, select Server Roles, give dbcreator, public, and sysadm.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.