db_owner tidak dapat menghapus basis data - Kesalahan 615, SQL Server

11

Saya memiliki database SQL Server 2012 yang berjalan di amazon EC2. Saya telah membuat pengguna untuk dapat membuat, mengedit, dan menjatuhkan basis data. Saya memberi pengguna baru dengan dbcreatorperan server.

Pengguna saya dapat terhubung dari jarak jauh dan berhasil menjalankan create database foo;perintah. Tetapi ketika pengguna mencoba untuk menjatuhkan database lagi dengan drop database foo;perintah gagal dengan kesalahan berikut:

Warning: Fatal error 615 occurred at Feb  1 2014  5:15PM.
   Note the error and time, and contact your system administrator.
ErrorCode: 21

Meskipun database yang dipilih adalah master(jadi saya tidak berpikir itu karena sedang digunakan). Dan perintah berhasil ketika saya menjalankannya lagi login sebagai pengguna administratif.

Saya memeriksa database yang baru dibuat, dan pengguna saya telah diberi db_ownerperan dalam database seperti yang saya harapkan sehingga pemahaman saya adalah bahwa ini harus menjadi izin yang cukup bagi pengguna untuk dapat menjatuhkan database yang baru saja mereka buat.

masukkan deskripsi gambar di sini

Menurut http://technet.microsoft.com/en-us/library/ms178613.aspx peran db_owner haruslah izin yang memadai. "Membutuhkan izin KONTROL pada basis data, atau MENGUBAH izin DATABASE, atau keanggotaan dalam peran basis data tetap db_owner."

Saya telah mencari kesalahan 615 dan menemukan "Tidak dapat menemukan ID tabel database% d, nama '%. * Ls'." yang tidak masuk akal bagi saya. http://technet.microsoft.com/en-us/library/aa937592(v=sql.80).aspx

Info versi server 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- from select @@version.

Tim Abell
sumber

Jawaban:

12

Saya kira Anda memiliki opsi AutoClose untuk database yang disetel ke True. Ini adalah perilaku default ketika Anda membuat database dengan Edisi Express.

Kesalahan yang disebutkan dapat terjadi persis dalam kasus ini. Sebenarnya pesan kesalahan lengkap 615 menyatakan: "Could not find database ID %d, name '%.*ls'. The database may be offline. Wait a few minutes and try again."... Jadi itu menunjukkan bahwa database bisa ditutup selama menjatuhkan.

Jadi, buka properti DB, alihkan ke False dan coba lagi menjatuhkannya atau menggunakan skrip di bawah sebelum menjatuhkan

ALTER DATABASE [MyDB] SET AUTO_CLOSE OFF 
GO

Banyak yang menunjukkan bahwa lebih baik AutoClose diatur ke False. Saya menemukan artikel ini menjelaskan lebih banyak tentang AutoClose: http://sqlmag.com/blog/worst-practice-allowing-autoclose-sql-server-databases

Ekstensi kecil dari jawabannya:

-- 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
Pelajar
sumber
2

Konfigurasi yang Anda gambarkan harus baik-baik saja.

Apakah ada kemungkinan Anda benar-benar mencoba untuk menjatuhkan database sebagai pengguna yang berbeda?

Saya akan merekomendasikan menghubungkan sebagai pengguna uji menggunakan SSMS agar 100% yakin bahwa Anda adalah pengguna itu. Juga, sebelum menjatuhkan cek database Anda dapat mengakses beberapa data dari itu, mungkin juga menguji Anda dapat memasukkannya ke mode pengguna tunggal yang saya kira Anda harus melakukan akhirnya

Joel Mansford
sumber
Saya memang sudah mencoba dengan SSMS langsung di server, membuat koneksi baru dengan kredensial pengguna ini. Hasil yang sama seperti jarak jauh. Saya baru saja memeriksa dan pengguna memang dapat membuat tabel, menyisipkan baris dan membaca kembali baris dengan sukses. Saya memeriksa ulang pengguna yang benar ditampilkan sebelum mengeksekusi permintaan dalam ssms dan itu, tetapi setelah menjalankan pernyataan drop itu berubah menjadi "tidak terhubung". Saya kira itu hanya karena kesalahan fatal tetapi saya tidak menyadarinya sebelumnya.
Tim Abell
2
@Tim: Ya, kesalahan level 20 dan lebih tinggi menjatuhkan koneksi, jadi itu hanya gejala. Apakah SQL Server Error Log atau Application Event Log memberikan informasi lebih lanjut?
Jon Seigel
Saya khawatir saya tidak memiliki kesempatan untuk kembali ke sini untuk memeriksa, tetapi terima kasih atas tipnya. Saya akan memeriksa log lain kali saya melihat ini (tidak yakin kapan itu akan terjadi).
Tim Abell
0

Saya tidak menemukan penyebabnya, tetapi solusi sementara yang terbaik tidak mengaktifkan perintah.

Ini adalah harapan saya yang menunjuk ke masalah dan seseorang dapat memberikan jawaban yang lebih baik.

Saya menggunakan Microsoft SQL Server Management Studio (Administrator) Di bawah login keamanan localhost

Klik dua kali pengguna, pilih Peran Server, berikan dbcreator, publik, dan sysadm.

DarrylBassett
sumber