db_owner не може скинути базу даних - помилка 615, SQL Server


11

У мене база даних SQL Server 2012 працює на Amazon EC2. Я створив користувача, щоб мати змогу створювати, редагувати та скидати бази даних. Я дав нового користувача з 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 повинна мати достатньо дозволів. "Потрібен дозвіл КОНТРОЛЮ на базі даних або ВСІМ ДІЯЛЬНОСТЬ ДАТАБАЗИ або членство в ролі бази даних db_owner з фіксованою базою даних."

Я переглянув помилку 615 і виявив "Не вдалося знайти ідентифікатор таблиці бази даних% 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.

Відповіді:


12

Я можу здогадатися, що у вас є параметр AutoClose для бази даних встановлений на True. Це поведінка за замовчуванням під час створення бази даних з Express Editions.

Згадана помилка може статися саме в цьому випадку. Насправді повне повідомлення про помилку 615 зазначає: "Could not find database ID %d, name '%.*ls'. The database may be offline. Wait a few minutes and try again."... Отже, це вказує на те, що база даних може бути закрита під час падіння.

Отже, перейдіть до властивостей БД, перемкніть його на Неправильне та спробуйте знову скинути його або використати нижче скрипт перед тим, як скинути

ALTER DATABASE [MyDB] SET AUTO_CLOSE OFF 
GO

Багато хто зазначає, що для автоматичного закриття краще встановити значення False. Я знайшов цю статтю, де пояснюється трохи більше про AutoClose: http://sqlmag.com/blog/worst-practice-allowing-autoclose-sql-server-datababa

Невелике розширення відповіді:

-- 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 змінив на "не підключено". Я думаю, це лише тому, що це фатальна помилка, але я цього раніше не помічав.
Тім Абел

2
@Tim: Так, помилки рівня 20 і вище падають на з'єднання, тому це лише симптом. Чи дає журнал помилок SQL Server або Журнал подій додатків більше інформації?
Джон Сейгель

Боюся, у мене не було можливості повернутися до цього, щоб перевірити, але дякую за пораду. Я буду перевіряти журнали наступного разу, коли я розглядаю це (не впевнений, коли це буде).
Тім Абелл

0

Я не знайшов причину для цього, але наступне, хоча не найкраще рішення, робить команду enable.

Я сподіваюся, що він вказує на проблему, і хтось може дати кращу відповідь.

Я використовую Microsoft SQL Server Management Studio (Адміністратор) під локальними входами безпеки

Двічі клацніть користувача, виберіть Ролі сервера, надайте dbcreator, public та sysadm.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.