Truy cập bị từ chối khi đính kèm cơ sở dữ liệu


146

Tôi đang sử dụng phiên bản dành cho nhà phát triển SQL Server 2008. Tôi đã cố gắng đính kèm cơ sở dữ liệu AdventureWorks2008.

Khi tôi cố đính kèm, tôi đã nhận được lỗi "truy cập bị từ chối". Theo nhật ký sự kiện, nó đến từ O / S:

Không thể mở tệp: Không thể mở tệp D: \ ProjectData \ AdventureWorks \ AdventureWorksLT2008_Data.mdf cho tệp số 0. Lỗi hệ điều hành: 5 (Truy cập bị từ chối.).

Tôi nghĩ rằng "vấn đề NTFS", nhưng Hệ thống (và tôi) đã sửa đổi quyền truy cập vào cả hai tệp.

Tôi thấy rằng tôi có thể đính kèm cơ sở dữ liệu thành công nếu tôi đăng nhập như sa, nhưng tài khoản người dùng của tôi sẽ không hoạt động.

Tôi là thành viên của nhóm quản trị viên cục bộ trên máy của mình và tôi đang ở trong vai trò sysadmins trong phiên bản SQL Server.

Bất cứ ý tưởng tại sao tôi phải đăng nhập như sa?


Là tập tin MDF được mã hóa bởi bất kỳ cơ hội?
Brettski

Không - sự tò mò thực sự đối với tôi là nó hoạt động tốt nếu tôi đăng nhập như sa (sử dụng Management Studio), nhưng nó không hoạt động nếu tôi sử dụng tài khoản quản trị viên cục bộ của mình. Tài khoản của tôi là quản trị viên, quản trị viên tên miền và đó là tài khoản mà tôi đã đăng nhập khi tôi cài đặt SQL Server (trong quá trình thiết lập, có một tùy chọn để biến tài khoản hiện tại của tôi thành sysadmin và tôi đã làm như vậy).
JMarsch

1
Đây là cách UAC hoạt động trong W7, không có gì ngạc nhiên.
Al Kepp

@AlKepp Không - không phải là một điều UAC. Chỉ cần đăng nhập như một sửa chữa (tài khoản máy chủ SQL, không có gì để làm với UAC) vấn đề. Ngoài ra, chỉ bằng cách là thành viên của nhóm quản trị viên địa phương, tôi có được quyền của mình - tôi không phải nâng cao để thông tin đăng nhập AD của tôi hoạt động.
JMarsch

Câu trả lời:


162

Chạy SQL Server Management Studio với tư cách Quản trị viên. (nhấp chuột phải-> chạy với tư cách quản trị viên) đã xử lý tất cả sự kỳ lạ trong trường hợp của tôi.

SQL SRV EXPRESS 2008 R2. Windows 7


5
Chạy Management Studio với tư cách quản trị viên KHÔNG làm việc cho tôi. Lỗi này xảy ra khi cố gắng khởi động dịch vụ windows.
nuzzolilo

9
Chạy với tư cách Quản trị viên là bước đầu tiên. Bước thứ hai là đăng nhập vào SQL Server bằng Windows xác thực. (Phương pháp này hiệu quả với tôi!)
Furkan Ekinci

3
Làm việc cho tôi quá. Không thể diễn tả bằng lời nói làm thế nào mệt mỏi và bực bội các lời nhắc cấp phép và lỗi trên Windows. TÔI LÀ NGƯỜI QUẢN LÝ!
David Masters

Làm việc cho tôi quá. Lúc đầu tôi không nghĩ nó sẽ hoạt động vì SSMS chỉ là máy khách UI. Tôi nghĩ cần dịch vụ để được chạy như Admin. Nhưng chạy SSMS với tư cách Quản trị viên là đủ.
Luke Võ

2
Làm việc cho tôi quá. Máy chủ SQL 2019, SSMS 18.4
Ryan Thomas

104

Cảm ơn bạn cho tất cả các ý kiến. Một số bạn đã giúp dẫn tôi đến câu trả lời. Đây là những gì tôi tìm thấy:

Đó là một vấn đề về quyền NTFS và không phải là vấn đề SQL. Hơn nữa, nó trông giống như lỗi (và nó có thể lặp lại).

Vấn đề: Tài khoản mà tôi đang sử dụng có toàn quyền kiểm soát NTFS đối với các tệp mdf và ldf. Tuy nhiên, nó có các quyền đó thông qua thành viên nhóm (nhóm Quản trị viên cục bộ có quyền và tài khoản của tôi là thành viên của quản trị viên cục bộ). (Tôi đã xác minh các quyền)

Nếu tôi cố thực hiện đính kèm, hãy kết nối với SQL Server như tôi (nơi tôi đang ở trong nhóm quản trị viên), nó không thành công với vấn đề NTFS.

Tuy nhiên, nếu tôi cấp các quyền tệp tương tự mà nhóm quản trị viên cục bộ có trực tiếp cho Tài khoản Miền của tôi, thì tôi có thể đính kèm mà không gặp vấn đề gì.

(oh, và vâng, tôi đã kiểm tra các nhóm cục bộ trên máy này và tôi đã xác minh rằng tài khoản miền của tôi thực sự là một thành viên của nhóm quản trị viên địa phương).

Vì vậy, có vẻ như lỗi xảy ra do một số mã (trong SQL Server hoặc Management Studio) kiểm tra các quyền mà tài khoản người dùng nắm giữ, nhưng nó không đi xa đến mức kiểm tra quyền của nhóm mà tài khoản người dùng thừa hưởng.

Điều đó nghe có vẻ kỳ lạ đối với tôi, nhưng tôi có thể tái tạo nó nhiều lần, vì vậy tôi đã kết luận rằng đó là câu trả lời.

Cập nhật: Tôi đã báo cáo đây là một lỗi: https://connect.microsoft.com/QueryServer/feedback/details/539703/access-denied-attaching-a-database-when-permissions-are-inherited


104
Nếu như tôi, bạn đang sử dụng Windows 7, bạn sẽ phải chạy SQL Server Management Studio với tư cách Quản trị viên để tránh gặp lỗi này.
Antony

4
Đã sao chép trên Win7 Pro bằng SS2008 Express. Vấn đề tương tự cho cả sqlcmd và SSMS. == Meldung '5120', Ebene '16', Status '101', Máy chủ 'DAGO \ SQLEXPRESS', Zeile 1 - 'Die Physische Datei' D: \ data \ mssql \ drei.mdf 'kann nicht geöffnet werden. Betriebssystemfehler 5: '5 (Zugriff verweigert) == Cấp quyền truy cập đầy đủ cho người dùng (là thành viên của nhóm quản trị viên cục bộ, có quyền truy cập) khắc phục sự cố. Ngoài ra, chạy sqlcmd (hoặc SSMS, tôi đoán) vì Administrator không tạo ra lỗi này.
Lumi

1
Anthony Highsky có câu trả lời. Chỉ cần chắc chắn để chạy Management Studio với tư cách Quản trị viên.
James

Vấn đề tương tự, và giải pháp, cho tôi. 2008R2, Win 7, v.v. Chỉ cần thêm bản thân một cách rõ ràng vào danh sách bảo mật, và nó đã hoạt động. Tôi cho rằng SQL Server có thể đọc chúng, một khi được đính kèm, nhưng không theo thông tin đăng nhập của tôi khi đính kèm?
Andrew Backer

4
Chạy Management Studio với tư cách quản trị viên KHÔNG làm việc cho tôi. Lỗi này xảy ra khi cố gắng khởi động dịch vụ windows.
nuzzolilo

20

Tôi muốn thêm thông tin vào câu trả lời đã được đăng.

Hãy cẩn thận khi tách cơ sở dữ liệungười dùng windows mà bạn đã đăng nhập sẽ trở thành người dùng duy nhất có quyền đối với tệp .mdf! Các quyền ban đầu mà tệp .mdf có bao gồm người dùng SQLServerMSSQLUser$<computer_name>$<instance_name>và tài khoản Quản trị viên sẽ bị ghi đè bởi bất kỳ người dùng windows nào bạn đăng nhập dưới dạng (không phải người dùng máy chủ sql). Boom, tất cả các quyền đã biến mất như thế. Vì vậy, làm như những người khác đã nói và nhấp chuột phải vào tệp .mdf của bạn và kiểm tra lại các quyền.

Tôi gặp phải vấn đề này vì tôi đã sử dụng SSMS để kết nối với cơ sở dữ liệu (không quan trọng là tài khoản máy chủ sql nào) và tách rời cơ sở dữ liệu. Sau khi làm điều đó, người dùng windows của tôi là người duy nhất có bất kỳ quyền nào đối với tệp .mdf. Vì vậy, sau này khi tôi cố gắng đính kèm db bằng tài khoản sa, nó đã ném lỗi "truy cập bị từ chối".

Để giữ quyền ban đầu trong chiến thuật, bạn nên lấy cơ sở dữ liệu ngoại tuyến, sau đó tách ra, sau đó đính kèm theo thứ tự như vậy:

USE [master]
GO
-- kick all users out of the db
ALTER DATABASE mydb
SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
GO

-- Take the Database Offline
ALTER DATABASE mydb SET OFFLINE WITH
ROLLBACK IMMEDIATE
GO

-- detach the db
EXEC master.dbo.sp_detach_db @dbname = N'mydb'
GO

1
Cảm ơn vì điều đó! Tôi nghĩ rằng sẽ dễ dàng hơn rất nhiều để làm cho đúng nếu bạn cũng đăng nhập bằng tài khoản Xác thực Máy chủ SQL với các đặc quyền của serveradmin.
William Rose

Thật không may, điều này không giúp ích gì cho tôi nếu ban đầu tôi tạo cơ sở dữ liệu là 'sa' thay vì với tư cách là người dùng Windows
David Gardiner

"Hãy cẩn thận khi tách cơ sở dữ liệu". Nói với SSMS hãy cẩn thận. Sự cố của tôi xảy ra vì sử dụng SSMS, lệnh Sao chép cơ sở dữ liệu không thành công khiến tôi không thể giải thích được
Alan Macdonald

18

Thêm quyền vào thư mục chứa .mdftệp của bạn .

Kiểm tra tên này: NT Service\MSSQLSERVER

Và thay đổi Locationtên máy chủ của bạn.


5
Để tìm tên tài khoản chính xác, vì nó có thể thay đổi tùy theo từng trường hợp, hãy chạy này : SELECT servicename, service_account FROM sys.dm_server_services.
Arve Systad

13

Vấn đề này là do UAC (Kiểm soát tài khoản người dùng), phải không? Mặc dù tài khoản người dùng của bạn là thành viên của nhóm Quản trị viên, UAC trong Windows 7 không cho phép bạn thực hiện những việc của quản trị viên trừ khi bạn chạy chương trình "với tư cách quản trị viên". Đây không phải là một lỗi thực sự trong SQL Server hoặc Management Studio hay bất cứ điều gì. (Mặc dù có thể có thể biết được sự cố và yêu cầu bạn cấp quyền nâng cao thay vì chỉ phàn nàn "lỗi 5".)


11

Chạy SQL Server Management Studio với tư cách Quản trị viên. (nhấp chuột phải-> chạy với tư cách quản trị viên) làm việc với tôi với Windows 7 - Máy chủ SQL 2008 R2


1
Câu trả lời này nên được nâng cao. Chạy SSMS với tư cách Quản trị viên là một công việc xoay quanh câu trả lời này. Microsoft báo cáo đây là "hành vi dự kiến" tại đây: link
FreeText

Đây không giống như câu trả lời của MandoMando sao?
mortb

10

Cơ sở dữ liệu SQL2005 có thể được đính kèm theo cách này trong Windows 7:

start menu >
 all program >
  Microsoft sql server 2005 >
   sql server management studio >
    right click >
     run as administrator >
      click ok

Và sau đó đính kèm cơ sở dữ liệu hoàn thành.


Điều này đã hoạt động với SQL Server 2016 với Management Studio 2008 R2 trên Windows 10 :)
par

9

Khi bạn đăng nhập với tư cách sa(hoặc bất kỳ tài khoản Máy chủ Sql nào), bạn đang hoạt động như tài khoản dịch vụ SQL Server, khi bạn đăng nhập với tư cách là bạn, bạn có quyền của tài khoản của mình. Vì một số lý do, bạn không có quyền truy cập tệp thích hợp nhưng tài khoản dịch vụ thì có.


Vấn đề NTFS là điều đầu tiên tôi nghĩ cũng vậy, nhưng dường như đó không phải là vấn đề: Tôi là thành viên của nhóm quản trị viên địa phương và tôi đã xác minh rằng quản trị viên có quyền "kiểm soát hoàn toàn" trên các tệp mdf và ldf . Ngoài ra, tôi là chủ sở hữu của các tệp - Tôi vừa tạo một thư mục và sao chép các tệp mdf / ldf vào vị trí của chúng.
JMarsch

@JMarsch: @Nick đang nói rằng 'sa' có một bộ QUYỀN SQLSERVER - không phải quyền NTFS - mà tài khoản của bạn không có.
Trevoke

@Trevoke: Tôi với bạn. Nếu đó là trường hợp, thì tôi cần những quyền gì để gán cho tài khoản người dùng của mình? (Tôi đã được gán cho vai trò sysadmin)
JMarsch

1
Câu trả lời cũ, nhưng đối với những người như tôi năm phút trước: bạn có thể tìm thấy tên người dùng dịch vụ chính xác bằng cách chạySELECT servicename, service_account FROM sys.dm_server_services
Arve Systad

6

Tôi đã tìm thấy giải pháp này: Nhấp chuột phải vào thư mục nơi bạn lưu trữ tệp .mdf của bạn -> nhấp vào Thuộc tính -> chọn tab Bảo mật, nhấp vào Chỉnh sửa ... và cung cấp cho nó toàn quyền kiểm soát. Hi vọng điêu nay co ich!


5

Người sadùng sử dụng tài khoản NTFS SQLServerMSSQLUser$<computer_name>$<instance_name>SQLServerSQLAgentUser$<computer_name>$<instance_name>để truy cập các tệp cơ sở dữ liệu. Bạn có thể muốn thử thêm quyền cho một hoặc cả hai người dùng này.

Tôi không biết nếu giải quyết vấn đề của bạn vì bạn nói rằng bạn không có vấn đề gì với sangười dùng, nhưng tôi hy vọng nó có ích.


5

Với tôi - Chạy trên cửa sổ 8 - RIght nhấp vào SQL Server Manager Studio -> Chạy với quản trị viên. -> đính kèm không có vấn đề


5

nó có thể được sửa một cách dễ dàng nhưng triệt để, chỉ cần vào thư mục mà bạn đã lưu tập tin mdf . chọn tệp-> Nhấp chuột phải -> nhấp vào thuộc tính và cấp toàn quyền cho tệp để đăng nhập Bảo mật người dùng .


3

Mỗi lần tôi gặp phải vấn đề này là khi cố gắng đính kèm một cơ sở dữ liệu nằm trong một thư mục khác với thư mục cơ sở dữ liệu mặc định được thiết lập trong máy chủ SQL.

Tôi đặc biệt khuyên bạn thay vì xử lý các quyền trên các thư mục và tài khoản khác nhau mà bạn chỉ cần di chuyển tệp dữ liệu của mình vào thư mục mà máy chủ sql mong muốn tìm thấy nó.


Trong nhiều tình huống, tôi đồng ý với quan điểm của bạn, nhưng với máy chủ SQL, bạn thường muốn có thể định vị cơ sở dữ liệu của mình trên các trục hoặc khối lượng khác nhau để có thể mở rộng. Trên thực tế, đó là một thực tế phổ biến để đặt nhật ký giao dịch trên một trục chính riêng biệt khỏi cơ sở dữ liệu để cải thiện thông lượng giao dịch.
JMarsch

@JMarsch: Có .. các thư mục thực sự có thể định cấu hình được, thuộc tính Máy chủ> tab Cài đặt cơ sở dữ liệu cho dữ liệu mặc định và vị trí nhật ký ...
NotMe

Điều đó bao gồm các mặc định, nhưng đó chỉ là mặc định. Việc đặt dbs ở nơi khác là hoàn toàn chấp nhận được và thực sự không có gì lạ nếu bạn có máy chủ của mình quản lý nhiều hơn 1 cơ sở dữ liệu được sử dụng tích cực.
JMarsch

Tôi gặp vấn đề tương tự ngay cả với thư mục máy chủ sql mặc định: c: \ Program Files \ Microsoft SQL Server \ MSSQL10_50.SPATIAL_IM \ MSSQL \ DATA \ mydb.mdf trên win7.
goku_da_master

3

Tôi chỉ muốn thêm thông tin này là tốt.

http://www.mssqltips.com/sqlservertip/2528/database-attach-failure-in-sql-server-2008-r2/

Giải pháp

Bạn gặp lỗi này vì hai thông tin đăng nhập khác nhau đã thực hiện thao tác tách và đính kèm. Vì vậy, các tệp khi được tách ra đã được sở hữu bởi lần đăng nhập đầu tiên, nhưng tệp đính kèm không thành công vì thông tin đăng nhập được sử dụng không phải là chủ sở hữu của tệp mdf và ldf.

Khi chúng tôi tách tệp cơ sở dữ liệu, chủ sở hữu trở thành người thực hiện lệnh tách, vì vậy để giải quyết vấn đề, chúng tôi cần thay đổi hoặc thêm thông tin đăng nhập khác với tư cách là chủ sở hữu của tệp mdf và ldf.

Nhấp chuột phải vào tệp "filename.mdf" và chọn thuộc tính để kiểm tra quyền của tệp mdf. Ở đây chúng ta có thể thấy rằng chỉ có một tài khoản có quyền đối với tệp "filename.mdf" vì đó là tài khoản được sử dụng để tách cơ sở dữ liệu.

Để giải quyết vấn đề này, nhấp vào nút Thêm ... để thêm thông tin đăng nhập khác hoặc bất kỳ thông tin đăng nhập nào khác cần thiết và cung cấp cho toàn quyền đăng nhập. Bạn cũng nên làm điều này cho tệp "ldf". Một khi bạn đã hoàn thành nhiệm vụ này, nhấp vào nút OK. (Lưu ý đối với các phiên bản HĐH khác, bạn có thể có tùy chọn Chỉnh sửa, nhấp vào tùy chọn này trước và sau đó bạn sẽ thấy tùy chọn Thêm ....)


Tôi đã thay đổi kết nối của mình trong SSMS để phù hợp với người dùng đã thực hiện tách và tôi có thể thực hiện đính kèm.
glitzsfa

2

Đối với những gì nó có giá trị cho bất cứ ai có biến thể cụ thể của vấn đề này mà tôi đã có:

  • SQL Express 2008
  • Visual Studio 2010 Premium

Thông qua menu ngữ cảnh của thư mục App_data, tôi đã tạo cơ sở dữ liệu SQL Express cho mục đích gỡ lỗi. Chuỗi kết nối (được sử dụng bởi NHibernate) như sau:

Server=.\SQLExpress;
AttachDbFilename=|DataDirectory|DebugDatabase.mdf;
Database=DebugDatabase;
Trusted_Connection=Yes;

Điều này mang lại cho tôi lỗi "Truy cập bị từ chối" tương tự trên tệp cơ sở dữ liệu. Tôi đã thử cung cấp cho nhiều người dùng toàn quyền kiểm soát thư mục và tệp, tại một thời điểm thậm chí là "Mọi người". Không có gì giúp được, vì vậy tôi loại bỏ các quyền được thêm một lần nữa.

Điều cuối cùng đã giải quyết nó là mở Server Explorer trong Visual Studio, sau đó kết nối với MDF và tách ra một lần nữa. Sau khi hoàn thành, ứng dụng web của tôi có thể truy cập cơ sở dữ liệu tốt.

Tái bút Tín dụng vào bài đăng trên blog này tôi đã tìm thấy trong khi giải quyết vấn đề cụ thể này, kích hoạt ý tưởng để đính kèm / tách cơ sở dữ liệu để giải quyết vấn đề.


2

Tôi đã chuyển một mdf cơ sở dữ liệu từ thư mục Dữ liệu mặc định sang thư mục asp_d app_data của tôi và gặp vấn đề này khi cố gắng thiết lập lại cơ sở dữ liệu trực tuyến.

Tôi đã so sánh các cài đặt bảo mật của các cơ sở dữ liệu tệp khác ở vị trí ban đầu với các tệp đã di chuyển và nhận thấy rằng MSSQL $ SQLEXPRESS không được gán quyền cho các tệp ở vị trí mới của chúng. Tôi đã thêm Kiểm soát hoàn toàn cho "NT DỊCH VỤ \ MSSQL $ SQLEXPRESS" (phải bao gồm DỊCH VỤ NT đó) và nó được đính kèm tốt.

Dường như thư mục Dữ liệu gốc có các quyền này và các tệp thừa hưởng nó. Di chuyển các tập tin và tất nhiên phá vỡ thừa kế.

Tôi đã kiểm tra tệp mdf của dự án khác mà tôi đã tạo trực tiếp vào thư mục app_data của nó. nó không có quyền MSSQL $ SQLEXPRESS. Hừm. Tôi tự hỏi tại sao SQL Express thích cái này mà không phải cái kia?


Giải pháp này hiệu quả với tôi trên Windows 10 và SQL Server 2017 khi di chuyển tệp nhật ký sang một đĩa riêng. Trong trường hợp của tôi, tên người dùng là "NT DỊCH VỤ \ MSSQLSERVER"
John Hanley

1

Điều này nghe có vẻ như quyền NTFS. Điều này thường có nghĩa là tài khoản dịch vụ SQL Server của bạn chỉ có quyền truy cập vào tệp (lưu ý rằng SQL Server sử dụng cùng một tài khoản dịch vụ để truy cập các tệp cơ sở dữ liệu bất kể bạn đăng nhập như thế nào). Bạn có chắc chắn rằng bạn đã không thay đổi quyền truy cập thư mục trong khi đăng nhập như chính mình và đăng nhập như sa? Nếu bạn tách ra và thử lại, nó vẫn có cùng một vấn đề?


Trong trường hợp của tôi, không - tôi đã làm lại lần đó để đảm bảo. Vấn đề là tài khoản của tôi chỉ có quyền truy cập vào các tệp thông qua một mức độ không xác định - Tôi là thành viên của nhóm Quản trị viên tên miền. Quản trị viên tên miền là thành viên của nhóm Quản trị viên cục bộ trên máy và Quản trị viên cục bộ (và hệ thống) có toàn quyền kiểm soát thư mục. (vì vậy có 2 cấp độ của nhóm theo yêu cầu). Nếu tôi trực tiếp gán quyền cho chính mình, nó đã hoạt động, nếu tôi xóa chúng, tôi vẫn có thể sao chép / xóa các tệp khỏi Explorere, v.v., nhưng SQL Server không thể tải chúng.
JMarsch

Khi cố gắng đính kèm cơ sở dữ liệu. Đăng nhập như Windows authenticated usersẽ giúp chúng tôi vượt qua sự cho phép trên các tệp cơ sở dữ liệu. (Trường hợp này, ví dụ MS SQLServer trong đĩa có hệ điều hành Windows).
Đỗ Như Vy

1

Tôi đã có cùng một vấn đề khi đính kèm một cơ sở dữ liệu. Đó không phải là vấn đề SQL, đây là sự cố tài khoản. Chuyển đến điều khiển bảng điều khiển / Cài đặt kiểm soát tài khoản người dùng / Đặt thành "không bao giờ thông báo". Cuối cùng, khởi động lại máy tính và nó làm việc cho tôi.


1

Tôi đã đính kèm tệp mdf bằng cách nhấp chuột phải vào cơ sở dữ liệu và xóa tệp nhật ký AdventureWorks2012_Data_log.ldf trong trình hướng dẫn. Tệp mdf được đặt ở vị trí sau

    C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA

Phương pháp trên đã giúp tôi giải quyết vấn đề.


1

Tôi đã đọc trang này và họ có một câu thú vị ở đó:

Thận trọng: Hãy rất chọn lọc khi thêm người dùng vào các vai trò này. Ví dụ: sysadmin ánh xạ tới dbo trong mọi cơ sở dữ liệu và tương đương với việc đăng nhập bằng tài khoản sa.

Tất nhiên, họ cũng có điều này:

Quyền được cấp cho người dùng và vai trò và là cơ sở dữ liệu cụ thể. Tất cả các quyền đều được tích lũy ngoại trừ DENY. Quyền bị từ chối ở cấp độ người dùng hoặc ở cấp độ vai trò sẽ ghi đè quyền tương tự được cấp thông qua tư cách thành viên vai trò khác ngoại trừ vai trò máy chủ cố định sysadmin. (Một sysadmin giữ lại tất cả các quyền, ngay cả khi vai trò mà họ là thành viên có quyền DENY.)

Vì vậy, nếu bạn là quản trị viên tên miền và trong nhóm 'sysadmin' của SQL, thế giới sẽ là nơi giáp xác của bạn.

Tất nhiên, theo Microsoft, bạn nên xem nhanh hai trang sau:
Liên kết đến các điều kiện tiên quyết về cơ sở dữ liệu

Liên kết để cài đặt cơ sở dữ liệu

Bạn đang nghịch ngợm và cố gắng đính kèm chúng một cách thủ công :) Nghiêm túc mà nói, bạn có tất cả các điều kiện tiên quyết cho cơ sở dữ liệu AdventureWorks2008 không?
Tôi nghi ngờ đây chỉ là một trường hợp kỳ quặc / cạnh khác của Microsoft, nhưng tôi có thể sai.


+1 vì nhận xét của bạn đã giúp tôi tìm câu trả lời. Tôi sẽ đăng những phát hiện của tôi cho chủ đề này. BTW (Tôi đã "nghịch ngợm" do chính sách rất lạ nơi tôi làm việc - cơ sở dữ liệu phiêu lưu được phân phối dưới dạng exe. Tôi không thể tải xuống exe. (Tôi có thể tải xuống tệp zip và tệp MSI, vì vậy tôi không thấy . cách exe lọc thực sự anythign khác hơn get trong đường đi, nhưng đó là những quy tắc) Dù sao, tôi có thể nhận được các tập tin MDF liệu như kéo khóa từ CodePlex, và đó là khi tôi chạy lên sự tò mò này rất ít.
JMarsch

1

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

USE [master]
GO
CREATE DATABASE [DataBasename] ON 
( FILENAME = N'C:\data\DataBasename.mdf' )
 FOR ATTACH
GO

thay đổi thành FOR ATTACH -> FOR ATTACH_FORCE_REBUILD_LOG

USE [master]
GO
CREATE DATABASE [DataBasename] ON 
( FILENAME = N'C:\data\DataBasename.mdf' )
 FOR ATTACH_FORCE_REBUILD_LOG
GO

Cảm ơn, bạn đã cứu ngày của tôi
Shahrokhian

1

Tôi nhận được lỗi này là sa. Trong trường hợp của tôi, bảo mật cơ sở dữ liệu không thành vấn đề. Tôi đã thêm tất cả mọi người quyền kiểm soát vào các tệp mdf và ldf, và đính kèm đã ổn.


1

Tôi đã phải đối mặt với vấn đề tương tự trong VS 2019. nếu bất cứ ai vẫn gặp phải vấn đề tương tự thì vui lòng đảm bảo rằng bạn có / thực hiện những điều sau:

  1. Bạn nên cài đặt SQL Express trên m / c của mình
  2. Nên cài đặt SSDT trong VS (trong VS 2019- đảm bảo kiểm tra thành phần này trong khi cài đặt) cho các phiên bản trước - bạn phải thêm thành phần này bên ngoài
  3. Thêm 'User Instance = True' vào chuỗi kết nối của bạn
  4. Tôi nghĩ tùy chọn của nó - mở VS và SQL Express ở chế độ quản trị và đăng nhập với tư cách quản trị viên vào SQL Express

0

Trên thực tế, đó là quyền NTFS và một lỗi lạ trong SQL Server. Tôi không chắc báo cáo lỗi trên là chính xác hoặc có thể đề cập đến một lỗi bổ sung.

Để giải quyết vấn đề này trên Windows 7, tôi đã chạy SQL Server Management Studio bình thường (không phải là Quản trị viên). Sau đó, tôi đã cố gắng để đính kèm các tập tin MDF. Trong quá trình này, tôi đã sử dụng UI thay vì dán vào đường dẫn. Tôi nhận thấy rằng con đường đã bị cắt khỏi tôi. Điều này là do người dùng MS SQL Server (SQLServerMSQueryUser $ machinename $ SQLEXPRESS) mà phần mềm thêm cho bạn không có quyền truy cập vào thư mục (trong trường hợp này là một thư mục nằm sâu trong các thư mục người dùng của riêng tôi).

Dán đường dẫn và tiến hành kết quả trong lỗi trên. Vì vậy - Tôi đã cấp cho người dùng MS SQL Server quyền đọc bắt đầu từ thư mục đầu tiên bị từ chối (thư mục người dùng của tôi). Sau đó tôi đã ngay lập tức hủy bỏ hoạt động lan truyền vì nó có thể mất một thời gian vĩnh cửu và một lần nữa áp dụng các quyền đọc cho thư mục con tiếp theo cần thiết và để cho việc truyền bá đó hoàn toàn.

Cuối cùng, tôi đã cấp cho người dùng MS SQL Server Sửa đổi quyền đối với các tệp .mdf và .ldf cho db.

Bây giờ tôi có thể Đính kèm vào các tập tin cơ sở dữ liệu.


0

Nếu bạn chạy máy chủ sql 2012, bạn có thể gặp lỗi này bằng cách đính kèm phiên bản cũ hơn của tệp mdf. ex một tập tin mdf từ máy chủ sql 2008.


Tôi nghĩ rằng phần đó là tương đối tự giải thích. nó sẽ là tốt để biết làm thế nào để sắp xếp nó ra.
dansan

0

Tôi đã giải quyết vấn đề bằng cách di chuyển tệp .mdf mà bạn muốn đính kèm vào thư mục công cộng, trong trường hợp của tôi, tôi đã chuyển nó sang thư mục người dùng / công khai. Sau đó tôi gắn nó từ đó mà không có vấn đề gì. Hi vọng điêu nay co ich.


0

Đối với những người không thể khắc phục sự cố với các giải pháp khác ở đây, cách khắc phục sau đây có hiệu quả với tôi:

Chuyển đến thư mục "DATA" trong cài đặt Máy chủ SQL của bạn, nhấp chuột phải, thuộc tính, tab bảo mật và thêm quyền kiểm soát đầy đủ cho người dùng "DỊCH VỤ MẠNG".

http://decoding.wordpress.com/2008/08/25/sql-server-2005-Exess-how-to-fix-error-3417/

(Liên kết trên dành cho SQL 2005, nhưng điều này đã sửa lỗi cài đặt SQL 2008 R2 cho tôi).

Một số thông tin bổ sung: Sự cố này xuất hiện cho tôi sau khi thay thế ổ đĩa cứng thứ cấp (đã cài đặt SQL). Tôi đã sao chép tất cả các tệp và khôi phục ký tự ổ đĩa gốc vào đĩa cứng mới. Tuy nhiên, các quyền bảo mật đã không được sao chép qua. Tôi nghĩ lần sau tôi sẽ sử dụng một phương pháp sao chép dữ liệu tốt hơn.


0

Trong trường hợp của tôi, những gì đã giải quyết vấn đề là folowing:

USE [master]
GO
CREATE DATABASE [AdventureWorks2008R2] ON
( FILENAME = 'C:\Program Files\Microsfot SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\AdventureWors2008R2_Data.mdf')
FOR ATTACH_REBUILD_LOG

0

Sao chép cơ sở dữ liệu sang một thư mục khác và đính kèm hoặc Đăng nhập SQLServer bằng "Xác thực Windows"

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


0

Tôi đã gặp vấn đề tương tự khi đính kèm lại cơ sở dữ liệu sau khi tách nó ra và di chuyển các tệp ldf và mdf từ ổ C sang F.

Để khắc phục, tôi đã phải thêm hiệu trưởng OWNER RIGHTS cho cả hai tệp và cho nó toàn quyền kiểm soát chúng trong tab Bảo mật của hộp thoại Thuộc tính.

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.