db_owner không thể hủy cơ sở dữ liệu - Lỗi 615, SQL Server


11

Tôi có cơ sở dữ liệu SQL Server 2012 đang chạy trên amazon EC2. Tôi đã tạo một người dùng để có thể tạo, chỉnh sửa và xóa cơ sở dữ liệu. Tôi đã cho người dùng mới với dbcreatorvai trò máy chủ.

Người dùng của tôi có thể kết nối từ xa và chạy thành công create database foo;lệnh. Nhưng khi người dùng cố gắng hủy cơ sở dữ liệu một lần nữa với drop database foo;lệnh không thành công với lỗi sau:

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

Mặc dù cơ sở dữ liệu được chọn là master(vì vậy tôi không nghĩ rằng đó là vì nó được sử dụng). Và lệnh thành công khi tôi chạy lại đăng nhập với tư cách người dùng quản trị.

Tôi đã kiểm tra cơ sở dữ liệu mới được tạo và người dùng của tôi đã được chỉ định db_ownervai trò trong cơ sở dữ liệu như tôi mong đợi vì vậy tôi hiểu rằng đây phải là quyền đủ để người dùng đó có thể bỏ cơ sở dữ liệu mà họ vừa tạo.

nhập mô tả hình ảnh ở đây

Theo http://technet.microsoft.com/en-us/l Library / ms178613.aspx vai trò db_owner phải có đủ quyền. "Yêu cầu quyền KIỂM SOÁT trên cơ sở dữ liệu hoặc THAY ĐỔI BẤT CỨ quyền truy cập hoặc thành viên trong vai trò cơ sở dữ liệu cố định db_owner."

Tôi đã tra cứu lỗi 615 và thấy "Không thể tìm thấy ID bảng cơ sở dữ liệu% d, tên '%. * Ls'." mà không có ý nghĩa với tôi. http://technet.microsoft.com/en-us/l Library / aa937592 (v = sql.80) .aspx

Thông tin phiên bản máy chủ 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- từ select @@version.

Câu trả lời:


12

Tôi có thể đoán bạn có tùy chọn Tự động đóng cho cơ sở dữ liệu được đặt thành True. Đây là hành vi mặc định khi bạn tạo cơ sở dữ liệu với Express Editions.

Các lỗi được đề cập có thể xảy ra chính xác trong trường hợp này. Trên thực tế, thông báo lỗi hoàn chỉnh 615 nêu rõ: "Could not find database ID %d, name '%.*ls'. The database may be offline. Wait a few minutes and try again."... Vì vậy, nó chỉ ra rằng cơ sở dữ liệu có thể bị đóng trong khi thả.

Vì vậy, đi đến thuộc tính DB, chuyển nó thành Sai và thử lại thả nó hoặc sử dụng tập lệnh bên dưới trước khi thả

ALTER DATABASE [MyDB] SET AUTO_CLOSE OFF 
GO

Nhiều người chỉ ra rằng tốt hơn là đặt Tự động đóng thành Sai. Tôi tìm thấy bài viết này giải thích thêm một chút về AutoClose: http://sqlmag.com/blog/worst-practice-allowing-autoclose-sql-server-database

Phần mở rộng nhỏ của câu trả lời:

-- 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

Cấu hình bạn mô tả sẽ ổn.

Có bất kỳ cơ hội nào mà bạn thực sự cố gắng bỏ cơ sở dữ liệu như một người dùng khác không?

Tôi khuyên bạn nên kết nối với tư cách là người dùng thử bằng SSMS để chắc chắn 100% rằng bạn là người dùng đó. Ngoài ra, trước khi bỏ kiểm tra cơ sở dữ liệu, bạn có thể truy cập một số dữ liệu từ nó, cũng có thể kiểm tra bạn có thể đặt nó vào chế độ người dùng duy nhất mà tôi đoán rằng cuối cùng bạn sẽ cần phải làm


Tôi thực sự đã thử với SSMS trực tiếp trên máy chủ, tạo kết nối mới với thông tin đăng nhập của người dùng này. Kết quả tương tự như từ xa. Tôi vừa kiểm tra và người dùng thực sự có thể tạo một bảng, chèn một hàng và đọc lại hàng thành công. Tôi đã kiểm tra kỹ người dùng chính xác đang hiển thị trước khi thực hiện truy vấn trong ssms và sau đó, nhưng sau khi chạy câu lệnh thả, nó đã thay đổi thành "không được kết nối". Tôi đoán đó chỉ là vì đó là một lỗi nghiêm trọng nhưng tôi đã không nhận thấy điều này trước đây.
Tim Abell

2
@Tim: Có, lỗi cấp 20 trở lên làm mất kết nối, vì vậy đó chỉ là một triệu chứng. Nhật ký lỗi máy chủ SQL hoặc Nhật ký sự kiện ứng dụng có cung cấp thêm thông tin nào không?
Jon Seigel

Tôi sợ rằng tôi đã không có cơ hội quay lại vấn đề này để kiểm tra, nhưng cảm ơn vì tiền boa. Tôi sẽ kiểm tra nhật ký vào lần tới khi tôi xem xét điều này (không chắc chắn khi nào nó sẽ xảy ra).
Tim Abell

0

Tôi không tìm thấy nguyên nhân cho việc này, nhưng sau đây trong khi giải pháp không tốt nhất sẽ kích hoạt lệnh.

Tôi hy vọng nó chỉ ra vấn đề và ai đó có thể cung cấp một câu trả lời tốt hơn.

Tôi sử dụng Microsoft SQL Server Management Studio (Quản trị viên) Theo thông tin đăng nhập Localhost Security

Nhấp đúp chuột vào người dùng, chọn Vai trò máy chủ, cung cấp dbcreator, công khai và sysadm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.