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/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
_から。
データベースの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
_
あなたが説明する設定は問題ないはずです。
実際に別のユーザーとしてデータベースを削除しようとしている可能性はありますか?
SSMSを使用してテストユーザーとして接続し、自分がそのユーザーであることを100%確認することをお勧めします。また、データベースチェックを削除する前に、そこから一部のデータにアクセスできます。また、テストして、それをシングルユーザーモードにして、最終的にはとにかく行う必要があると思います。
この原因はわかりませんでしたが、次の方法でコマンドを有効にすることはできません。
それが問題を指摘し、誰かがより良い答えを提供できることを願っています。
Microsoft SQL Server Management Studio(管理者)をlocalhostセキュリティログインの下で使用しています
ユーザーをダブルクリックし、[サーバーの役割]を選択して、dbcreator、public、およびsysadmを付与します。