Không thể mở cơ sở dữ liệu "kiểm tra" được yêu cầu bởi đăng nhập. Đăng nhập không thành công. Đăng nhập không thành công cho người dùng 'xyz \ ASPNET'


97

Tôi đã tạo một dịch vụ web đang lưu một số dữ liệu vào db. Nhưng tôi gặp lỗi này:

Không thể mở "kiểm tra" cơ sở dữ liệu được yêu cầu bởi đăng nhập. Đăng nhập không thành công. Đăng nhập không thành công cho người dùng 'xyz \ ASPNET'.

Chuỗi kết nối của tôi là

Data Source=.\SQLExpress;Initial Catalog=IFItest;Integrated Security=True

Chúng tôi cần thêm rất nhiều thông tin trước khi có thể giúp chẩn đoán điều này.
sblom

Tôi gặp sự cố này và đã đóng cửa studio trực quan rồi mở lại và nó bắt đầu hoạt động ..
tree_are_great 31/10/18

Câu trả lời:


47

Vâng, lỗi là khá rõ ràng, không? Bạn đang cố gắng kết nối với Máy chủ SQL của mình bằng người dùng "xyz / ASPNET" - đó là tài khoản mà ứng dụng ASP.NET của bạn đang chạy.

Tài khoản này không được phép kết nối với SQL Server - tạo thông tin đăng nhập trên SQL Server cho tài khoản đó hoặc sau đó chỉ định tài khoản SQL Server hợp lệ khác trong chuỗi kết nối của bạn.

Bạn có thể cho chúng tôi xem chuỗi kết nối của bạn (bằng cách cập nhật câu hỏi ban đầu của bạn) không?

CẬP NHẬT: Được rồi, bạn đang sử dụng xác thực Windows tích hợp -> bạn cần tạo thông tin đăng nhập Máy chủ SQL cho "xyz \ ASPNET" trên Máy chủ SQL của mình - hoặc thay đổi chuỗi kết nối của bạn thành một cái gì đó như:

connectionString="Server=.\SQLExpress;Database=IFItest;User ID=xyz;pwd=top$secret"

Nếu bạn có người dùng "xyz" với mật khẩu là "top $ secret" trong cơ sở dữ liệu của bạn.


11
Không phải "không được phép kết nối với SQL Server", nhưng "không được phép sử dụng cơ sở dữ liệu" kiểm tra "".
wRAR

@wRAR: true - nhưng tôi đoán cơ hội đăng nhập của người dùng tồn tại trên máy chủ, nhưng không được bật trong cơ sở dữ liệu cụ thể này, có lẽ là mỏng (ít nhất là tôi nghĩ vậy)
marc_s

Xem thêm "Cơ sở dữ liệu = IFItest" so với "thử nghiệm", mặc dù đó có thể là một bản in sai.
wRAR

2
Một điểm mà bạn chưa bao giờ đề cập đến là Tên DB cũng có thể sai. Tôi đã nhận được một thông báo ngoại lệ trông ditto từ Azure SQL Server của mình và hóa ra tôi đã đặt sai tên cho DB của mình trong một trong các chuỗi kết nối trong mã C # trong dự án ASP.NET của tôi.
Ron 16

Ron, đó là vấn đề của tôi. Tôi thậm chí đã kiểm tra lại chính tả nhưng thậm chí còn bỏ sót nó.
Darrell Lloyd Harvey

32
  • Một trong hai: "xyz \ ASPNET" không phải là thông tin đăng nhập (trong sys.server_principals)
  • Hoặc: "xyz \ ASPNET" được thiết lập nhưng không được ánh xạ tới người dùng trong kiểm tra cơ sở dữ liệu (sys.database_principals)

Tôi muốn chọn tùy chọn thứ 2: thông báo lỗi ngụ ý rằng cơ sở dữ liệu mặc định không có hoặc không có quyền trong đó, thay vì không được thiết lập làm thông tin đăng nhập.

Để kiểm tra xem nó có được thiết lập làm thông tin đăng nhập không

SELECT SUSER_ID('xyz\ASPNET') -- (**not** SUSER_SID)

Nếu NULL

CREATE LOGIN [xyz\ASPNET] FROM WINDOWS

Nếu không NULL

USE test
GO
SELECT USER_ID('xyz\ASPNET')

Nếu NULL

USE test
GO
CREATE USER [xyz\ASPNET] FROM LOGIN [xyz\ASPNET]

1
Điều này thật tuyệt !, một quy trình làm việc đơn giản để phát hiện và giải quyết vấn đề.
Mazen el Senih

12

Tôi đã gặp sự cố này và những gì đã giải quyết nó cho tôi là:

  • Đi tới nhóm Ứng dụng trong IIS
  • Nhấp chuột phải vào nhóm ứng dụng dự án của tôi
  • Trong phần Process Model mở Identity
  • Chọn tùy chọn tài khoản tùy chỉnh
  • Nhập tên người dùng và mật khẩu máy tính của bạn.

Làm việc cho tôi quá!
Mazen el Senih

8

Giải pháp tốt nhất cho vấn đề đăng nhập là tạo người dùng đăng nhập trong sqlServer. Dưới đây là các bước để tạo thông tin đăng nhập SQL Server sử dụng Xác thực Windows (SQL Server Management Studio):

  1. Trong SQL Server Management Studio, mở Object Explorer và mở rộng thư mục của phiên bản máy chủ để tạo thông tin đăng nhập mới.
  2. Bấm chuột phải vào thư mục Bảo mật, trỏ chuột vào Mới, sau đó bấm Đăng nhập.
  3. Trên trang Chung, nhập tên của người dùng Windows vào hộp Tên đăng nhập.
  4. Chọn Xác thực Windows.
  5. Bấm OK.

Ví dụ: nếu tên người dùng là xyz\ASPNET, sau đó nhập tên này vào Hộp tên đăng nhập.

Ngoài ra, bạn cần thay đổi ánh xạ người dùng để cho phép truy cập vào Cơ sở dữ liệu mà bạn muốn truy cập.


8

Hầu hết, đó không phải là vấn đề đăng nhập mà là vấn đề với việc tạo cơ sở dữ liệu. Vì vậy, nếu có lỗi khi tạo cơ sở dữ liệu của bạn, nó sẽ không được tạo ngay từ đầu. Trong trường hợp này, nếu bạn cố gắng đăng nhập, bất kể người dùng là gì, đăng nhập sẽ không thành công. Điều này thường xảy ra do sự hiểu sai lôgic của ngữ cảnh db.

Truy cập trang web trong trình duyệt và THỰC SỰ đọc các nhật ký lỗi đó, điều này có thể giúp bạn phát hiện ra vấn đề với mã của bạn (thường là các vấn đề logic xung đột với mô hình).

Trong trường hợp của tôi, mã được biên dịch tốt, cùng một vấn đề đăng nhập, trong khi tôi vẫn đang tải xuống quản lý studio, tôi đã xem lại nhật ký lỗi, sửa các ràng buộc ngữ cảnh db của mình và trang web bắt đầu chạy tốt .... trong khi đó quản lý studio vẫn đang tải xuống


6

Đối với tôi, cơ sở dữ liệu không được tạo và mã EF trước tiên nên tạo nó nhưng luôn xuất hiện lỗi này. Chuỗi kết nối tương tự đã hoạt động trong dự án web mặc định lõi aspnet. Giải pháp là thêm

_dbContext.Database.EnsureCreated()

trước liên hệ cơ sở dữ liệu đầu tiên (trước khi gieo hạt DB).


4

Vấn đề

Lỗi tự hiển thị dưới dạng một thông báo tương tự như sau:

Không thể mở cơ sở dữ liệu "TÊN CƠ SỞ DỮ LIỆU" do đăng nhập yêu cầu. Đăng nhập không thành công. Đăng nhập không thành công cho người dùng XYZ.

  • Lỗi này thường không thể được khắc phục bằng Visual Studio đơn giản hoặc khởi động lại toàn bộ máy tính.
  • Lỗi cũng có thể được tìm thấy dưới dạng tệp cơ sở dữ liệu dường như bị khóa.

Khắc phục

Giải pháp được đặt trong các bước sau. Bạn sẽ không mất bất kỳ dữ liệu nào trong cơ sở dữ liệu của mình và bạn không nên xóa tệp cơ sở dữ liệu của mình!

Điều kiện tiên quyết: Bạn phải cài đặt SQL Server Management Studio (Full hoặc Express)

  1. Mở SQL Server Management Studio
  2. Trong cửa sổ "Connect to Server" (File-> Connect object explorer) nhập như sau:
    • Loại máy chủ: Công cụ cơ sở dữ liệu
    • Tên máy chủ: (localdb) \ v11.0
    • Xác thực: [Bất cứ thứ gì bạn đã sử dụng khi tạo db cục bộ. Có lẽ là Xác thực Windows).
  3. Nhấp vào "Kết nối"
  4. Mở rộng thư mục "Cơ sở dữ liệu" trong Object Explorer (View-> Object Explorer, F8)
  5. Tìm cơ sở dữ liệu của bạn. Nó phải được đặt tên là đường dẫn đầy đủ đến tệp cơ sở dữ liệu (.mdf) của bạn
    • Bạn sẽ thấy thông báo "(Đang chờ khôi phục)" ở cuối tên cơ sở dữ liệu hoặc khi bạn cố gắng mở rộng cơ sở dữ liệu, nó sẽ không thể và có thể có hoặc không cho bạn thông báo lỗi.
    • Đây là vấn đề! Cơ sở dữ liệu của bạn đã bị lỗi về cơ bản ..
  6. Nhấp chuột phải vào cơ sở dữ liệu rồi chọn "Tasks -> Detach ...".
  7. Trong cửa sổ tách, chọn cơ sở dữ liệu của bạn trong danh sách và kiểm tra cột có nội dung "Thả kết nối"
  8. Bấm OK.
  9. Bạn sẽ thấy cơ sở dữ liệu biến mất khỏi danh sách cơ sở dữ liệu. Sự cố của bạn bây giờ sẽ được khắc phục. Đi và chạy ứng dụng sử dụng localdb của bạn.
  10. Sau khi chạy ứng dụng của bạn, cơ sở dữ liệu của bạn sẽ xuất hiện lại trong danh sách các cơ sở dữ liệu - điều này chính xác. Nó sẽ không nói "Đang chờ khôi phục" nữa vì nó sẽ hoạt động bình thường.

Nguồn của giải pháp: https://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed


Vấn đề là tôi thậm chí không thể tìm thấy DB đó.
Shimmy Weitzhandler

3

Nó cũng xảy ra khi bạn gõ sai tên của DB

ex : xxx-db-dev to xxx-dev-db

Đôi khi, đó chỉ là một sai lầm ngu ngốc. Tôi mất khoảng hơn 1 giờ để tìm ra điều này :( vì tôi chỉ thử rất nhiều điều khó trước


2

Tôi đã cố gắng cập nhật người dùng và nó hoạt động. Xem lệnh bên dưới.

USE ComparisonData// databaseName
EXEC  sp_change_users_login @Action='update_one', @UserNamePattern='ftool',@LoginName='ftool';

Chỉ cần thay thế cho user('ftool')phù hợp.


2

Điều này làm việc cho tôi.

  1. Đi tới SQL Server >> Security >> Logins và nhấp chuột phải vào NT AUTHORITY \ NETWORK SERVICE và chọn Properties
  2. Trong màn hình mới mở của Thuộc tính đăng nhập, chuyển đến tab “Bản đồ người dùng”.
  3. Sau đó, trên tab “Bản đồ người dùng”, chọn cơ sở dữ liệu mong muốn - đặc biệt là cơ sở dữ liệu mà thông báo lỗi này được hiển thị.
  4. Bấm OK.

Đọc blog này.

http://blog.sqlauthority.com/2009/08/20/sql-server-fix-error-cannot-open-database-requested-by-the-login-the-login-failed-login-failed-for- user-nt-Authoritynetwork-service /


cảm ơn, việc sử dụng "NT AUTHORITY \ SYSTEM" đã giải quyết được vấn đề của tôi.
Farzad Karimi

2

Tôi đã sử dụng xác thực Windows để kết nối với tệp .mdf cơ sở dữ liệu cục bộ và máy chủ cục bộ của tôi là máy chủ sql 2014. Sự cố của tôi đã được giải quyết bằng cách sử dụng chuỗi kết nối này:

string sqlString = " Data Source = (LocalDB)\\MSSQLLocalDB;" + "AttachDbFilename = F:\\.........\\myDatabase.mdf; Integrated Security = True; Connect Timeout = 30";

Tôi đã phải xóa phần này "User Instance = True" để làm cho DB cục bộ của tôi hoạt động
Anonymous

2

Trong trường hợp của tôi, đó là một vấn đề khác. Cơ sở dữ liệu chuyển sang chế độ người dùng duy nhất và kết nối thứ hai với cơ sở dữ liệu hiển thị ngoại lệ này. Để giải quyết vấn đề này, hãy làm theo các bước dưới đây.

  1. Đảm bảo rằng trình khám phá đối tượng được trỏ đến một cơ sở dữ liệu hệ thống như chính.
  2. Thực thi a exec sp_who2và tìm tất cả các kết nối đến cơ sở dữ liệu 'my_db'. Hủy tất cả các kết nối bằng cách thực hiện KILL { session id }trong đó id phiên là SPID được liệt kê bởi sp_who2.
USE MASTER;
EXEC sp_who2
  1. Thay đổi cơ sở dữ liệu
USE MASTER;
ALTER DATABASE [my_db] SET MULTI_USER
GO

1

Tôi đã không thấy điều này được đề cập trong các số báo trước, vì vậy hãy để tôi đưa ra một khả năng khác. Nó có thể IFItestlà không thể truy cập được hoặc đơn giản là không tồn tại. Ví dụ, nếu một cấu hình có một số cấu hình, mỗi cấu hình có cơ sở dữ liệu riêng, thì có thể tên cơ sở dữ liệu không được thay đổi thành tên chính xác cho cấu hình hiện tại.


1

NB: Nếu sử dụng dịch vụ windows để lưu trữ dịch vụ web.

Bạn phải đảm bảo rằng dịch vụ web của bạn đang sử dụng đúng tài khoản Đăng nhập để kết nối với SQL Server.

  • Mở dịch vụ (tôi cho rằng dịch vụ windows đã được cài đặt)
  • Nhấp chuột phải vào dịch vụ và thuộc tính goto.
  • Nhấp vào tab "Đăng nhập"
  • Nhấp vào nút radio "Tài khoản này"
  • Nhấp vào "Duyệt qua"
  • Nhập tên người dùng Pc vào Trường Văn bản và nhấp vào Nút "Kiểm tra Tên" ở bên phải.
  • Nhấp vào văn bản trong Trường Văn bản, nhấn nút "OK"
  • nhập mật khẩu đăng nhập và Áp dụng

1

Lấy cảm hứng từ câu trả lời của cyptus mà tôi đã sử dụng

_dbContext.Database.CreateIfNotExists();

trên EF6 trước liên hệ cơ sở dữ liệu đầu tiên (trước khi gieo hạt DB).


1

Nếu bạn chưa tạo cơ sở dữ liệu trong máy chủ của mình, bạn sẽ gặp phải lỗi đăng nhập tương tự. Hãy đảm bảo rằng cơ sở dữ liệu tồn tại trước khi bạn đăng nhập.


1

Tôi đã gặp sự cố này khi cố gắng ghi vào cơ sở dữ liệu mặc định được cung cấp trong mẫu mvc asp.net. Điều này là do cơ sở dữ liệu chưa được tạo.

Để tạo cơ sở dữ liệu và đảm bảo rằng nó có thể truy cập được, hãy làm theo các bước sau:

  1. Mở bảng điều khiển trình quản lý gói trong Visual Studio
  2. Chạy lệnh "update-database"

Điều này sẽ tạo cơ sở dữ liệu chạy tất cả các di chuyển cần thiết trên đó.


0

Tùy chọn tốt nhất sẽ là sử dụng xác thực tích hợp Windows vì nó an toàn hơn xác thực sql. Tạo người dùng windows mới trong máy chủ sql với các quyền cần thiết và thay đổi người dùng IIS trong cài đặt bảo mật nhóm ứng dụng.


0

Tôi thấy rằng tôi cũng phải đặt tùy chọn UserMapping khi tạo đăng nhập mới và điều này đã giải quyết được vấn đề cho tôi. Hy vọng điều đó sẽ giúp bất cứ ai cũng thấy mình bị mắc kẹt ở đây!

Chỉnh sửa: Đặt thông tin đăng nhập là chủ sở hữu db cũng giải quyết được vấn đề tiếp theo


0

Đôi khi, sự cố này có thể xuất hiện nếu bạn mở db này trong một máy chủ sql khác (ví dụ: bạn khởi chạy sql managment studio (SMS) và thêm db này) và quên dừng máy chủ này. Kết quả là - ứng dụng của bạn cố gắng kết nối với người dùng đã được kết nối trong db này dưới máy chủ khác. Để khắc phục điều đó, hãy thử dừng máy chủ này bằng Cấu hình. máy chủ sql điều phối.

Lời xin lỗi của tôi về tiếng Anh kém. Trân trọng, Ignat.


0

Trong trường hợp của tôi, ứng dụng asp.net thường có thể kết nối với cơ sở dữ liệu mà không gặp bất kỳ sự cố nào. Tôi nhận thấy thông báo như vậy trong nhật ký. Tôi bật nhật ký máy chủ SQL và tôi phát hiện ra thông báo này:

2016-10-28 10:27:10.86 Logon       Login failed for user '****'. Reason: Failed to open the explicitly specified database '****'. [CLIENT: <local machine>]
2016-10-28 10:27:13.22 Server      SQL Server is terminating because of a system shutdown. This is an informational message only. No user action is required.

Vì vậy, có vẻ như máy chủ đang khởi động lại và máy chủ SQL đó đã tắt một chút trước đó, sau đó ứng dụng ASP.NET và cơ sở dữ liệu không khả dụng trong vài giây trước khi máy chủ khởi động lại.


0

Ngay cả khi bạn đã đặt thông tin đăng nhập là chủ sở hữu DB và đặt ánh xạ người dùng cho cơ sở dữ liệu sẽ sử dụng thông tin đăng nhập, hãy kiểm tra xem người dùng DB thực sự (không chỉ thông tin đăng nhập) có vai trò 'chủ sở hữu' hay không.


0

Trong trường hợp của tôi, tôi đang chạy Dịch vụ Windows dưới danh tính "Hệ thống". Lỗi là:

System.Data.SqlClient.SqlException (0x80131904): 
Cannot open database "MyDbName" requested by the login. The login failed.
Login failed for user 'MYDOMAINNAME\HOSTNAME$'.

Vấn đề là lỗi rất dễ gây hiểu nhầm. Ngay cả sau khi tôi đã thêm thông tin đăng nhập 'MYDOMAINNAME \ HOSTNAME $' vào cơ sở dữ liệu, đồng thời cấp quyền truy cập sysadmin đăng nhập này và thêm người dùng cho thông tin đăng nhập đó trên cơ sở dữ liệu mục tiêu của tôi và làm cho người dùng đó dbowner, tôi vẫn gặp phải lỗi tương tự. Rõ ràng tôi cần thực hiện tương tự để đăng nhập 'NT AUTHORITY \ SYSTEM'. Sau khi làm điều đó, tôi đã có thể đăng nhập mà không gặp sự cố. Tôi không biết tại sao thông báo lỗi lại phàn nàn về 'MYDOMAINNAME \ HOSTNAME $'. Tôi đã xóa thông tin đăng nhập đó và người dùng tương ứng và mọi thứ vẫn hoạt động.

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.