Máy chủ SQL Lỗi hệ điều hành 5: Năm 5 (Truy cập bị từ chối.)


153

Tôi đang bắt đầu học SQL và tôi có một cuốn sách cung cấp cơ sở dữ liệu để làm việc. Các tệp dưới đây nằm trong thư mục nhưng vấn đề là khi tôi chạy truy vấn, nó sẽ báo lỗi này:

Msg 5120, Cấp 16, Trạng thái 101, Dòng 1 Không thể mở tệp vật lý "C: \ Murach \ SQL Server 2008 \ Cơ sở dữ liệu \ AP.mdf". Lỗi hệ điều hành 5: "5 (Truy cập bị từ chối.)".

   CREATE DATABASE AP
      ON PRIMARY (FILENAME = 'C:\Murach\SQL Server 2008\Databases\AP.mdf')
      LOG ON (FILENAME =     'C:\Murach\SQL Server 2008\Databases\AP_log.ldf')
      FOR ATTACH
    GO

Trong cuốn sách tác giả nói rằng nó nên hoạt động, nhưng nó không hoạt động trong trường hợp của tôi. Tôi đã tìm kiếm nhưng tôi không biết chính xác vấn đề là gì, vì vậy tôi đã đăng câu hỏi này.


Nếu tệp sao lưu đã tồn tại, vui lòng đảm bảo rằng nó không có thuộc tính "chỉ đọc", ngoài việc đảm bảo rằng dịch vụ có quyền ghi.
jumxozizi

Câu trả lời:


133

Tài khoản dịch vụ công cụ cơ sở dữ liệu SQL Server phải có quyền đọc / ghi trong thư mục mới.

Kiểm tra này

Để khắc phục, tôi đã làm như sau:

Đã thêm Nhóm quản trị viên vào quyền bảo mật tệp với toàn quyền kiểm soát tệp Dữ liệu (S :) và Tệp nhật ký (T :).

Đã đính kèm cơ sở dữ liệu và nó hoạt động tốt.

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

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


4
Đôi khi, máy chủ SQL sẽ chạy dưới một nhóm người dùng khác ngoàiAdministrators Group
JDandChips

57
Ngoài ra, nó có thể giúp khởi động SQL Server Management Studio với tư cách Quản trị viên, không chỉ dịch vụ máy chủ.
david.barkhuizen

1
Đối với tôi, giải pháp trong liên kết sau đã hoạt động: stackoverflow.com/a/19061137/365188
Ozair Kafray

3
Đối với tôi, việc thay đổi tài khoản SQL Server Agent Service thành Local System đã hoạt động.
singhm0077

22
Nếu phiên bản SQL Server của bạn đang chạy trong tài khoản dịch vụ (ví dụ: của tôi MSSQL$SQLEXPRESS), có thể không rõ ràng rằng bạn cần thêm tài khoản vào danh sách quyền thư mục là:NT Service\MSSQL$SQLEXPRESS
Brian Lacy

109

Một bài đăng cũ, nhưng đây là từng bước hoạt động cho SQL Server 2014 chạy trong windows 7:

  • Bảng điều khiển ->
  • Hệ thống và bảo mật ->
  • Công cụ quản trị ->
  • Dịch vụ ->
  • Double Click SQL Server (SQLEXPRESS) -> nhấp chuột phải, Thuộc tính
  • Chọn đăng nhập trên tab
  • Chọn "Tài khoản hệ thống cục bộ" (mặc định là một số tài khoản Windows System khó hiểu)
  • -> OK
  • nhấp chuột phải, Dừng lại
  • nhấp chuột phải, bắt đầu

Voilá!

Tôi nghĩ rằng việc thiết lập tài khoản đăng nhập có thể là một tùy chọn trong quá trình cài đặt, nhưng nếu vậy nó không phải là mặc định và rất dễ bỏ lỡ nếu bạn chưa biết về vấn đề này.


5
Tôi đã thử rất nhiều lựa chọn nhưng câu trả lời của bạn vẫn hoạt động tốt. Cảm ơn mickeyf.
vicky

2
Hoạt động cho SQL Server 2014 trong Win 10 là tốt. Cảm ơn.
Johan Foley

7
-1 Làm điều này đi ngược lại toàn bộ ý tưởng thiết lập người dùng này ngay từ đầu. Đây là một tính năng bảo mật và thực hiện việc này để phá vỡ nó.
NullUserException 18/07/17

2
WOW .. Cant tin rằng mọi người chỉ nhảy vào "câu trả lời" này .. Điều này có thể tạo ra một vấn đề bảo mật lớn .. Nếu không, sẽ không có lý do để đặt người dùng đó vào lúc đầu, phải không? Dù sao, nó là một "giải pháp" cho những người không coi đây là vấn đề bảo mật trong trường hợp của họ.
tò mòBoy

2
Bất cứ ai nghĩ rằng bảo mật quan trọng hơn việc hoàn thành một số công việc chỉ có thể tắt máy chủ SQL của họ!
Ivan

44

Để giải quyết vấn đề bị từ chối truy cập, tôi đã bắt đầu SSMS với tư cách quản trị viên và điều đó cho phép tôi đính kèm cơ sở dữ liệu từ ổ đĩa cục bộ của mình. Cơ sở dữ liệu đã được tạo trong một phiên bản SQL và windows khác.


3
đây là nó cho tôi ... Tôi chỉ nhìn vào một thiết lập hoàn toàn cục bộ và gặp vấn đề này, trên Windows 10 Home, và trước đây tôi đã tự mình tạo ra "chủ sở hữu" mdf & ldf vì một lý do khác - có thể có liên quan
Mike M

3
Điều này làm việc cho tôi quá. Tôi đang sử dụng Windows 10 và Microsoft SQL Server 2012. Tôi đã chạy SQL Management Studio với tư cách Quản trị viên và sau đó có thể đính kèm cơ sở dữ liệu Mẫu công việc Phiêu lưu.
arsho

1
Điều này cũng giải quyết vấn đề với Windows 10 Pro khi chạy trong môi trường miền công việc.
PerPlexSystem

Tương tự - Tên miền Env, SSMS 2017.x, Win10 Pro. Tách ra khỏi máy khác và Đính kèm trên máy mới.
TravisWhidden

44

Đây là sự cố liên quan đến Windows trong đó SQL Server không có quyền phù hợp với thư mục chứa tệp .bak và do đó xảy ra lỗi này.

Công việc đơn giản nhất là sao chép tệp .bak của bạn sang vị trí sao lưu SQL mặc định có tất cả các quyền cần thiết. Bạn không cần phải nghịch ngợm với bất cứ điều gì khác. Trong SQL SERVER 2012 , vị trí này là

D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup (SQL 2012)
C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup (SQL 2014)
C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\Backup (SQL 2016)

@AdamLevitt bạn có cài đặt nhiều phiên bản SQL hoặc đã cài đặt trước đó không? Bạn có chắc chắn rằng bạn đang đặt nó vào đúng vị trí?
Hammad Khan

1
@hmd, Cảm ơn tôi. Cách khắc phục là xuất vào thư mục sao lưu 2012.
Adam Levitt

1
Giải pháp này cũng hoạt động trong SQL Server 2014. Đường dẫn là C: \ Chương trình tập tin \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Backup
Nick King

Đây sẽ là câu trả lời !!
Axel

Tôi gặp vấn đề tương tự với MS SQL Express 2016, giải pháp là đặt tệp .mdf của tôi vào thư mục: C: \ Program Files \ Microsoft SQL Server \ MSSQL13.SQLEXPRESS \ MSSQL \ Backup
jirikadlec2

13

Tôi đã có vấn đề này. Chỉ cần chạy SQL Server với tư cách quản trị viên


1
'Chạy với tư cách Quản trị viên' như trong UAC làm việc cho tôi. Tôi không cần phải đăng nhập với tư cách Quản trị viên tài khoản (tuy nhiên tôi thuộc nhóm quản trị viên).
Mike Cheel

1
Vâng, đã làm điều tương tự, chạy như quản trị viên và tất cả đều ổn.
Clyde

12

Có, đúng rồi. Trước tiên, bạn nên tìm hiểu tài khoản dịch vụ của máy chủ sqls, bạn có thể thấy nó trong Trình quản lý tác vụ khi nhấn ctrl + alt + xóa cùng lúc; Sau đó, bạn phải cung cấp đặc quyền đọc / ghi của "C : \ Murach \ SQL Server 2008 \ Cơ sở dữ liệu "vào tài khoản dịch vụ.


10

Vấn đề là do thiếu quyền cho SQL Server truy cập các tệp mdf & ldf. Tất cả các thủ tục này sẽ hoạt động:

  1. bạn có thể trực tiếp thay đổi tài khoản người dùng khởi động dịch vụ MSSQLSERVER, với tài khoản người dùng có đặc quyền tốt hơn trên các tệp. Sau đó thử đính kèm cơ sở dữ liệu.
  2. Hoặc bạn có thể gán người dùng cho tệp trong tab bảo mật của thuộc tính tệp mdf & ldf với các đặc quyền đọc và ghi được kiểm tra.
  3. Khởi động với tài khoản quản trị viên windows và mở SQL Server với tùy chọn quản trị viên và thử đăng nhập bằng xác thực windows và bây giờ thử đính kèm cơ sở dữ liệu.

9

Tôi giải quyết vấn đề này bằng cách thêm Full controlquyền cho cả hai .mdf.ldftệp cho Usersnhóm.


5

Đối với tôi, nó đã được giải quyết theo cách sau với SQL Server Management studio - Đăng nhập với tư cách quản trị viên (Tôi đã đăng nhập dưới dạng cửa sổ xác thực) -Tiếp theo tệp mdf (nhấp chuột phải vào Cơ sở dữ liệu | đính kèm | Thêm) người dùng bình thường


4

Các quyền máy chủ thực tế sẽ không quan trọng tại thời điểm này; tất cả đều ổn Bản thân SQL Server cần có quyền truy cập thư mục.
tùy thuộc vào phiên bản của bạn, bạn có thể thêm quyền của SERVERNAME $ MSSQLSERVER để chạm vào thư mục của mình. Xin chào, nó phải nằm trong thư mục BACKUP mặc định (dù bạn đã cài đặt nó hay mặc định là c: \ programfiles (x) \ MSSQL \ BACKUP.


2

Ngay cả khi bạn thực hiện các bước sau, bạn vẫn có thể nhận được thông báo lỗi tương tự.

1. login as SA user (SSMS)
2. Edit the file permissions to say "everyone" full access (windows folder)
3. Delete the Log file (Windows Exploring  (this was what I had done per advise from some msdn forum) 

Tôi vẫn GOT lỗi cấp phép, nhưng sau đó tôi nhận thấy rằng trong màn hình Đính kèm, phần dưới cùng VẪN hiển thị tệp LOG và thông báo lỗi vẫn giữ nguyên.

Hy vọng điều này sẽ giúp một người đã làm điều tương tự.


0

Giải pháp rất đơn giản.

  1. Đăng nhập bằng quản trị hệ thống
  2. sao chép các tệp mdf và ldf của bạn trong "C: \ Chương trình tệp (x86) \ Microsoft SQL Server \ MSSQL11.MSQuerySERVER \ MSSQL \ DATA" Trong đó tất cả các tệp dữ liệu khác nằm trong đó.
  3. Bây giờ đính kèm từ đó nó sẽ làm việc

1
Bạn không nên lưu trữ dữ liệu trong thư mục tệp chương trình. Vị trí mặc định sẽ được thay đổi khi bạn cài đặt Máy chủ SQl
OrangeKing89

0

Tôi đã sử dụng khung Entity trong ứng dụng của mình và gặp sự cố này, tôi đã đặt bất kỳ quyền nào trong các thư mục và dịch vụ windows và không hoạt động, sau đó tôi khởi động ứng dụng của mình với tư cách quản trị viên (nhấp chuột phải vào tệp exe và chọn "chạy với tư cách quản trị viên") và nó hoạt động khỏe.


0

Nếu bạn gặp lỗi này trên một .MDFtệp trong APP_DATAthư mục (hoặc bất cứ nơi nào bạn đặt) cho dự án Visual Studio, cách tôi đã làm là chỉ cần sao chép quyền từ DATAthư mục hiện có tại đây (Tôi đang sử dụng SQL Express 2014 để hỗ trợ một ứng dụng cũ hơn):

C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS2014\MSSQL\DATA

(lưu ý: đường dẫn cài đặt thực tế của tôi khác nhau - đặc biệt nếu tên đối tượng của bạn khác)

Nhấp đúp chuột vào DATAthư mục đầu tiên với tư cách quản trị viên để đảm bảo bạn có quyền truy cập, sau đó mở các thuộc tính trên thư mục và bắt chước tương tự cho APP_DATAthư mục. Trong trường hợp của tôi, người dùng bị mất là MSSQL$SQLEXPRESS2014(vì tôi đặt tên ví dụ SQLEXPRESS2014- bạn có thể khác). Đó cũng là tên người dùng dịch vụ SQL Server.


0

Vì một số lý do, việc thiết lập tất cả các quyền chính xác không giúp ích gì trong trường hợp của tôi. Tôi đã có một tập tin db.bakmà tôi không thể khôi phục do 5(Access is denied.)lỗi. Tệp được đặt trong cùng thư mục với một số tệp sao lưu khác và tất cả các quyền đều giống hệt với các tệp khác. Tôi đã có thể khôi phục tất cả các tệp khác ngoại trừ db.baktệp này . Tôi thậm chí đã cố gắng thay đổi nhật ký dịch vụ SQL Server trên người dùng - vẫn cho kết quả tương tự. Tôi đã thử sao chép tập tin mà không có hiệu lực.

Sau đó, tôi đã cố gắng chỉ tạo một tệp giống hệt bằng cách thực hiện

type db.bak > db2.bak

thay vì sao chép tập tin. Và nó đã làm việc! db2.bakkhôi phục thành công.

Tôi nghi ngờ rằng một số vấn đề khác khi đọc tệp sao lưu có thể được báo cáo sai lệch như 5(Access is denied.)MS SQL.


0

Trong linux, tôi đã đi đến /var/opt/mssql/data/thư mục và sudosau đó mở một thiết bị đầu cuối , thay đổi quyền truy cập tệp * .mdf và * .ldf của tôi như dưới đây trong đó bạn thay thế yourDBbằng tên tệp Cơ sở dữ liệu của mình và myUserthành tên người dùng hiện đang đăng nhập:

chmod 755 yourDB.mdf
chown myUser yourDB.mdf

chmod 755 yourDB.ldf
chown myUser yourDB.ldf

Sau đó, nó đã được kết nối lại mà không có vấn đề gì.


0

Điều đó có nghĩa là người dùng đăng nhập SSMS không có quyền đối với tệp .mdf. Đây là cách nó đã làm việc cho tôi:

Tôi đã mở SSMS (Chạy với tư cách quản trị viên) và đăng nhập với tư cách người dùng quản trị viên, cơ sở dữ liệu nhấp chuột phải đính kèm, nhấp vào thêm, chọn tệp .mdf, nhấp Ok. Làm xong.

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.