Lỗi truy cập bị từ chối trong TẠO RA CƠ SỞ DẠNG ĐẾN ATTACH


7

Tôi đang cố gắng đính kèm một bản sao của msdbmáy trạm SQL Server 2012 dành cho nhà phát triển của mình trên Windows 8.1 để cố gắng bắt chước vấn đề được nêu chi tiết trong câu hỏi này khi OP đang cố gắng tạo lại các công việc bị thiếu từ msdb nước ngoài.

Tôi đã thực hiện các hành động sau:

use master;

backup database msdb to disk='C:\sqlserver\test.bak';
go
restore database msdbtest from disk='c:\sqlserver\test.bak' 
    with move 'MSDBData' to 'C:\SQLServer\Data\msdbtest_data.mdf'
    , move 'MSDBLog' TO 'C:\SQLServer\Logs\msdbtest_log.ldf';
go

Sau đó tôi dừng SQL Server dịch vụ, tạo ra một bản sao của C:\SQLServer\Data\msdbtest_data.mdfC:\SQLServer\Logs\msdbtest_log.mdf, và khởi động lại SQL Server.

Sau đó tôi đã thực hiện như sau:

drop database msdbtest;
go
create database msdbtest on (
    name='msdbtest_data'
    ,filename='c:\sqlserver\data\msdbtest_data.mdf'
) log on (
    name='msdbtest_log'
    , filename='c:\sqlserver\log\msdbtest_log.ldf'
) for attach;

Kết quả này trong:

Msg 5120, Level 16, State 101, Line 1
Unable to open the physical file "c:\sqlserver\data\msdbtest_data.mdf". 
Operating system error 5: "5(Access is denied.)".

SQL Server được cấu hình với các cài đặt ngoài hộp mặc định cho tài khoản dịch vụ:

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

Bảo mật truy cập hiệu quả cho tài khoản dịch vụ SQL Server trên c:\sqlserver\data\msdbtest_data.mdflà:

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

Tôi hoàn toàn mất mát; Tôi nghĩ rằng lỗi được trả lại là gây hiểu lầm cho tôi. Có lẽ tôi hiểu sai mục đích của CREATE DATABASE ... FOR ATTACH?

Theo như tôi có thể nói, SQL Server chắc chắn sẽ có quyền truy cập vào tệp. Thư mục C:\SQLServer\Datađược sử dụng bởi tất cả các cơ sở dữ liệu người dùng khác hiện được đính kèm.

SELECT @@VERSION trả về:

Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
Dec 28 2012 20:23:12 
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )

Đây có phải là một trường hợp nhạy cảm trường hợp?
Jon Seigel

đối chiếu máy chủ là mặc định cho cài đặt EN-US. Vậy là CI, NHƯ.
Max Vernon

Là .mdf và .ldf trong hệ thống tệp đọc-ghi (nghĩa là không được đánh dấu chỉ đọc)?
Jon Seigel

Câu trả lời:


7

Khi bạn nhận được tin nhắn này, nó có thể là một vài điều. Vài ví dụ:

1.) Chỉ đọc các tệp được đánh dấu

2.) Không đủ quyền đối với các tệp cho tài khoản Dịch vụ máy chủ SQL

3.) Không đủ quyền cho các thư mục mà các tập tin trực tiếp.

Bạn đã chỉ ra trong cuộc trò chuyện của chúng tôi rằng điều này không chỉ đọc. Bạn cũng đã xác minh quyền trông giống như truy cập đầy đủ. Điều đó loại trừ ba mục này.

Thực tế là, từ cuộc trò chuyện của chúng tôi, bạn không gặp phải vấn đề này khi bạn tách cơ sở dữ liệu đúng cách bằng sp_detach_db - điều này thực sự thay đổi quyền xung quanh một chút trên các tệp khiến tôi đề nghị thử chạy SSMS với tư cách quản trị viên.

Tại sao? Vâng, bài viết này trở nên khó hiểu hơn về một số vấn đề mạo danh ở đây - nhưng sự hiểu biết của tôi là:

1.) Khi bạn chỉ dừng Dịch vụ máy chủ SQL và di chuyển tệp xung quanh. Chủ sở hữu của tệp là tài khoản dịch vụ đã tạo ra nó.

2.) Khi bạn tách cơ sở dữ liệu - bạn sẽ có khả năng nhận thấy sự thay đổi quyền. Chủ sở hữu đã thay đổi về cơ bản và tệp không thực sự được liên kết với tài khoản dịch vụ SQL Server đó theo cùng một cách.

3.) Vì vậy, nó hoạt động khi bạn cố gắng đính kèm vì các quyền có thể được chỉ định, vì tính bảo mật của tệp cho phép nó ..

Nhưng nếu bạn chỉ dừng dịch vụ thì bảo mật đã không thay đổi và bạn không thể đính kèm nếu bạn bật UAC trừ khi bạn đang mạo danh quyền truy cập quản trị.

Có lẽ tôi đã làm cho quyền sở hữu tệp và truy cập khó hiểu hơn ở đây nhưng bài viết tôi chia sẻ có thể làm việc tốt hơn :-)

Nhưng một điều đạo đức nhỏ là - hãy tách ra vào lần tới ;-) Hoặc chỉ cần chuẩn bị để chạy SSMS với tư cách quản trị viên theo thời gian khi tương tác với HĐH theo nhiều cách khác nhau.


1

Theo Blog CrossJoin của SQL , cờ theo dõi 1802 có thể được sử dụng để vô hiệu hóa mã sửa đổi quyền.

Từ blog đó:

[Cờ theo dõi 1802] Hoạt động xung quanh một vấn đề trong đó, sau khi bạn tách cơ sở dữ liệu Microsoft SQL Server 2005 nằm trên bộ lưu trữ gắn liền với mạng, bạn không thể gắn lại cơ sở dữ liệu SQL Server. Sự cố này xảy ra do SQL Server 2005 đặt lại quyền truy cập tệp khi cơ sở dữ liệu bị tách ra. Khi bạn cố gắng gắn lại cơ sở dữ liệu, nó không thể được đính kèm vì quyền chia sẻ bị giới hạn. ( KB922804 )

Từ mô tả, có vẻ như cờ này vô hiệu hóa chức năng của SQL Server trong việc thay đổi quyền trên các tệp cơ sở dữ liệu sau khi DB bị tách ra, điều đó có nghĩa là cờ có ý nghĩa bảo mật.


-1

Dừng dịch vụ SQL Server và thay đổi "đăng nhập là" thành Hệ thống cục bộ

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

Khởi động lại các dịch vụ SQL và kiểm tra. Nó bắt đầu hoạt động tốt trong trường hợp của tôi.

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.