web-dev-qa-db-ja.com

db_ownerがデータベースを削除できません-エラー615、SQL Server

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_ロールが期待どおりに割り当てられているので、作成したデータベースを削除するには、これがそのユーザーに十分な権限であることがわかっています。

enter image description here

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 /n Copyright (c) Microsoft Corporation/n Express Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)/n-_select @@version_から。

11
Tim Abell

データベースのAutoCloseオプションが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
_
12
Learner

あなたが説明する設定は問題ないはずです。

実際に別のユーザーとしてデータベースを削除しようとしている可能性はありますか?

SSMSを使用してテストユーザーとして接続し、自分がそのユーザーであることを100%確認することをお勧めします。また、データベースチェックを削除する前に、そこから一部のデータにアクセスできます。また、テストして、それをシングルユーザーモードにして、最終的にはとにかく行う必要があると思います。

2
Joel Mansford

この原因はわかりませんでしたが、次の方法でコマンドを有効にすることはできません。

それが問題を指摘し、誰かがより良い答えを提供できることを願っています。

Microsoft SQL Server Management Studio(管理者)をlocalhostセキュリティログインの下で使用しています

ユーザーをダブルクリックし、[サーバーの役割]を選択して、dbcreator、public、およびsysadmを付与します。

0
DarrylBassett