Đăng nhập không thành công cho người dùng 'DOMAIN \ MACHINENAME $'


120

Tôi biết đây gần như là bản sao của: Lỗi "Đăng nhập không thành công cho người dùng 'NT AUTHORITY \ IUSR'" trong ASP.NET và SQL Server 2008Đăng nhập không thành công cho 'tên người dùng' của người dùng - System.Data.SqlClient.SqlException với LINQ trong thư viện dự án / lớp bên ngoài nhưng một số thứ không bổ sung so với các thiết bị khác trên máy chủ của tôi và tôi không chắc tại sao.

Hộp đang được sử dụng:

Hộp kiểm tra SQL Hộp Web Hộp
SQL

Ứng dụng của tôi:

Tôi có một Ứng dụng Web ASP.NET, tham chiếu đến một thư viện lớp sử dụng LINQ-to-SQL. Chuỗi kết nối được thiết lập đúng cách trong thư viện lớp. Theo Đăng nhập không thành công đối với 'tên người dùng' của người dùng - System.Data.SqlClient.SqlException với LINQ trong thư viện lớp / dự án bên ngoài Tôi cũng đã thêm chuỗi kết nối này vào Ứng dụng web.

Chuỗi kết nối sử dụng thông tin xác thực SQL như vậy (trong cả ứng dụng web và thư viện lớp):

 <add name="Namespace.My.MySettings.ConnectionStringProduction"
        connectionString="Data Source=(SQL Test Box);Initial Catalog=(db name);Persist Security Info=True;User ID=ID;Password=Password"
        providerName="System.Data.SqlClient" />

Kết nối này được xác nhận là đang hoạt động thông qua việc thêm nó vào Server Explorer. Đây là chuỗi kết nối mà tệp .dbml của tôi đang sử dụng.

Vấn đề:

Tôi nhận được lỗi sau đây:

System.Data.SqlClient.SqlException: Login failed for user 'DOMAIN\MACHINENAME$'.

Bây giờ tham chiếu đến lỗi này . Lỗi "Đăng nhập không thành công cho người dùng 'NT AUTHORITY \ IUSR'" trong ASP.NET và SQL Server 2008, nó cho biết đó thực sự là dịch vụ mạng cục bộ và việc sử dụng bất kỳ tên miền nào khác sẽ không hoạt động.

Nhưng tôi bối rối vì tôi đã kiểm tra cả Hộp SQL và Hộp kiểm tra SQL SQL Management Studio và cả hai đều có NT AUTHORITY/NETWORK SERVICEtrong Bảo mật -> Đăng nhập, ở cấp cơ sở dữ liệu, không được liệt kê trong Bảo mật -> Người dùng, nhưng ở cấp cơ sở dữ liệu Bảo mật. -> Người dùng Tôi có người dùng được hiển thị trong chuỗi kết nối.

Ở cấp độ NTFS trên máy chủ web, các quyền có DỊCH VỤ MẠNG có toàn quyền kiểm soát.

Lý do khiến tôi bối rối là vì tôi có nhiều ứng dụng web khác trên Máy chủ Web của mình, cơ sở dữ liệu tham chiếu trên cả SQL Box và SQL Test Box, và tất cả chúng đều hoạt động. Nhưng tôi không thể tìm thấy sự khác biệt giữa chúng và ứng dụng hiện tại của mình, ngoài việc tôi đang sử dụng thư viện lớp. Điều đó sẽ quan trọng? Kiểm tra quyền NTFS, thiết lập Đăng nhập bảo mật ở cấp máy chủ và cơ sở dữ liệu, chuỗi kết nối và phương thức kết nối (thông tin xác thực SQL Server), nhóm ứng dụng IIS và các tùy chọn thư mục khác, tất cả đều giống nhau.

Tại sao các ứng dụng này hoạt động mà không thêm tên máy $ vào quyền của một trong các hộp SQL của tôi? Nhưng đó là những gì mà một liên kết đang yêu cầu tôi làm để khắc phục sự cố này.


Vì vậy, tóm lại, bạn không sử dụng một người dùng cơ sở dữ liệu? Chúng tôi tạo một cái và có thể chuyển đổi giữa nó và SA tùy thuộc vào những gì chúng tôi cần làm ...
jcolebrand

Trong chuỗi kết nối, tôi đang sử dụng người dùng cơ sở dữ liệu mà tôi đã tạo trong vùng Bảo mật -> Đăng nhập, đã thêm người đó vào Bảo mật -> người dùng của cơ sở dữ liệu và cấp cho nó quyền dbo. Đó là cách tôi đã làm tất cả các ứng dụng khác của mình.
SventoryMang

Đây là lời giải thích rõ ràng từ MSDN sử dụng tên máy mặc định, về cơ bản bạn chỉ cần thêm miền / máy $ vào sql mà không cần nhấn tìm kiếm. blogs.msdn.microsoft.com/ericparvin/2015/04/14/...
Brett Maiwald

Câu trả lời:


156

NETWORK SERVICE và LocalSystem sẽ luôn tự xác thực là tài khoản tương quan cục bộ (nội trang \ dịch vụ mạng và hệ thống nội trang \) nhưng cả hai sẽ xác thực là tài khoản máy từ xa.

Nếu bạn gặp lỗi như Login failed for user 'DOMAIN\MACHINENAME$'vậy có nghĩa là quá trình đang chạy dưới dạng DỊCH VỤ MẠNG hoặc như LocalSystem đã truy cập vào tài nguyên từ xa, đã tự xác thực là tài khoản máy và bị từ chối cấp quyền.

Ví dụ điển hình sẽ là một ứng dụng ASP chạy trong nhóm ứng dụng được đặt để sử dụng thông tin đăng nhập DỊCH VỤ MẠNG và kết nối với máy chủ SQL từ xa: nhóm ứng dụng sẽ xác thực là máy chạy nhóm ứng dụng và tài khoản máy này có cần được cấp quyền truy cập không .

Khi quyền truy cập bị từ chối vào tài khoản máy, thì quyền truy cập phải được cấp cho tài khoản máy. Nếu máy chủ từ chối đăng nhập 'DOMAIN \ MACHINE $', thì bạn phải cấp quyền đăng nhập cho 'DOMAIN \ MACHINE $' chứ không phải cho DỊCH VỤ MẠNG. Việc cấp quyền truy cập vào NETWORK SERVICE sẽ cho phép một quy trình cục bộ chạy dưới dạng NETWORK SERVICE kết nối, không phải một quy trình từ xa, vì quy trình từ xa sẽ xác thực như bạn đoán, DOMAIN \ MACHINE $.

Nếu bạn mong đợi ứng dụng asp kết nối với SQL Server từ xa dưới dạng thông tin đăng nhập SQL và bạn nhận được ngoại lệ về DOMAIN \ MACHINE $, điều đó có nghĩa là bạn sử dụng Bảo mật tích hợp trong chuỗi kết nối. Nếu điều này không mong muốn, điều đó có nghĩa là bạn đã vặn các dây kết nối mà bạn sử dụng.


2
Đúng rằng những gì tôi đã thu thập được, cảm ơn bạn đã giải thích. Tuy nhiên, câu hỏi vẫn còn đó, tất cả các ứng dụng của tôi được lưu trữ trên Máy chủ Web của tôi nhưng lại truy cập cơ sở dữ liệu trên hộp Kiểm tra SQL hoặc SQL, đó sẽ là truy cập từ xa đúng không? Tuy nhiên, chúng đang hoạt động ... nhưng cả hai hộp SQL của tôi đều không cấp quyền truy cập DOMAIN \ MACHINENAME $.
SventoryMang

1
Ồ Ngoài ra, tôi muốn kết nối với máy chủ SQL dưới dạng Đăng nhập SQL nhưng tôi đã đăng các chuỗi kết nối của mình, tôi không sử dụng tùy chọn Tích hợp Bảo mật = True, nó có thể là gì nữa ??
SventoryMang

2
Có ba giải thích khả thi: 1) họ sử dụng SQL auth thay vì auth tích hợp (có vẻ là cách hợp lý nhất, vì ví dụ của bạn có userrid và mật khẩu trong chuỗi conn) 2) họ sử dụng auth tích hợp và chạy trong một cuộc thăm dò ứng dụng sử dụng thông tin xác thực khác hoặc 3) họ sử dụng xác thực tích hợp nhưng ứng dụng ASP mạo danh người gọi, do đó kích hoạt ủy quyền bị ràng buộc: technet.microsoft.com/en-us/library/cc739587%28WS.10%29.aspx .
Remus Rusanu

2
Dự án ứng dụng web của bạn phải tham chiếu đến dự án thư viện lớp , không phải dll. Thêm dự án thư viện lớp vào giải pháp ứng dụng web, sau đó xóa tham chiếu đến dll và thêm tham chiếu vào dự án. Bằng cách này, khi triển khai hoặc thử nghiệm, ứng dụng web bán lẻ sẽ tham chiếu dll lớp bán lẻ và gỡ lỗi sẽ tham chiếu gỡ lỗi, tự động.
Remus Rusanu

1
Mặc dù điều này là tốt và tốt, làm thế nào để bạn thêm đăng nhập máy vào SQL? - Cả hai đều trên cùng một miền và tôi muốn sử dụng bảo mật tích hợp. Nhưng chỉ thêm một tài khoản có tên "Domain \ MachineName $" hoàn toàn không thành công (chẳng hạn như, nó không tồn tại và trình khám phá đối tượng bị nghẹt và không tìm thấy bất kỳ thứ gì tương tự).
BrainSlugs83

33

Lỗi này xảy ra khi bạn đã định cấu hình ứng dụng của mình bằng IIS và IIS đi đến SQL Server và cố gắng đăng nhập bằng thông tin xác thực không có quyền thích hợp. Lỗi này cũng có thể xảy ra khi sao chép hoặc sao chép được thiết lập. Tôi sẽ xem xét một giải pháp luôn hoạt động và rất đơn giản. Đi tới SQL Server >> Security >> Logins và nhấp chuột phải vào NT AUTHORITY \ NETWORK SERVICE và chọn Properties

Trong màn hình mới mở của Thuộc tính đăng nhập, hãy chuyển đến tab “Bản đồ người dùng”. 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ị. Trên màn hình dưới, hãy kiểm tra vai trò db_owner. Bấm OK.


7
Đây là giải pháp cho tôi vì ứng dụng web và cơ sở dữ liệu nằm trên cùng một máy. Tôi vẫn gặp lỗi "Đăng nhập không thành công cho người dùng 'DOMAIN \ MACHINENAME $" nhưng việc thêm máy vào thông tin đăng nhập SQL không giúp được gì, nhưng việc thêm "NT AUTHORITY \ NETWORK SERVICE" thì không. Mặc dù bạn không nên sử dụng role db_owner trừ khi nó cần, nhưng db_datareader và db_datawriter bình thường là đủ.
JimiSweden

18

Trong trường hợp của tôi, tôi đã có Identity="ApplicationPoolIdentity"cho Nhóm ứng dụng IIS của mình.

Sau khi tôi thêm IIS APPPOOL\ApplicationNamengười dùng vào SQL Server, nó hoạt động.


5
Tôi tin rằng điều này sẽ chỉ hoạt động nếu IIS và máy chủ SQL trên cùng một máy.
Rob Davis

1
Điều này đã làm việc cho tôi! Tôi có một thiết lập máy chủ IIS-SQL cục bộ.
Vin Shahrdar

1
Cảm ơn rât nhiều. Vấn đề này bắt đầu xảy ra với tôi sau khi nâng cấp môi trường nhà phát triển cục bộ của tôi từ SQL Server 2014 lên 2017. Đề xuất của bạn là viên đạn bạc trong tình huống này.
MFry

Cảm ơn, đã làm việc cho tôi. Điều tôi muốn làm nổi bật là thông báo lỗi vẫn là 'Đăng nhập không thành công cho người dùng' DOMAIN \ MACHINENAME $ 'mặc dù nhóm ứng dụng được đặt để chạy dưới danh tính nhóm và đăng nhập không thành công ngay cả khi thực sự là' DOMAIN \ MACHINENAME $ ' được cấp quyền để kết nối. Có vẻ như thông báo lỗi gây hiểu lầm cho tôi.
mivra

16

Về cơ bản để giải quyết điều này, chúng ta cần thiết lập một số như

  • Ứng dụng web đang chạy trong ApplicationPoolIdentity
  • Ứng dụng Web kết nối với cơ sở dữ liệu thông qua ADO.Net bằng Xác thực Windows trong chuỗi kết nối

Chuỗi kết nối được sử dụng với xác thực Windows bao gồm Trusted_Connection=Yesthuộc tính hoặc thuộc tính tương đương Integrated Security=SSPItrong Web.configtệp

Kết nối cơ sở dữ liệu của tôi đang ở chế độ Xác thực Windows. Vì vậy, tôi giải quyết nó bằng cách đơn giản thay đổi Application Pools Sắc lấy ApplicationPoolIdentity để đăng nhập tên miền của tôi trong credentials DomainName \ MyloginId

Bươc:

  1. Nhấp vào Hồ bơi ứng dụng
  2. Chọn Tên ứng dụng của bạn

  3. Đi tới Cài đặt nâng cao

  4. Mở rộng Mô hình Quy trình và nhấp vào Danh tính . Nhấp vào ba chấm ở đầu bên phải.
  5. Nhấp vào nút Đặt ... và Cung cấp thông tin đăng nhập tên miền của bạn

Đối với tôi nó đã được giải quyết.

Lưu ý: Trong môi trường Sản xuất hoặc CNTT, bạn có thể có tài khoản dịch vụ trong cùng một miền để nhận dạng nhóm ứng dụng. Nếu vậy, hãy sử dụng tài khoản dịch vụ thay vì đăng nhập của bạn.


Đối với câu hỏi trên, đây phải là câu trả lời được chấp nhận.
makil

14

Mẹo hiệu quả với tôi là xóa Integrated Securitykhỏi chuỗi kết nối của tôi và thêm một User ID=userName; Password=passwordchuỗi kết nối thông thường vào tháng 2 App.configcủa bạn có thể không sử dụng bảo mật tích hợp nhưng chuỗi được tạo trong đó Web.config!


3
Một tỷ cảm ơn bạn. Sự trợ giúp rất lớn, rất lớn. Cảm ơn bạn, cảm ơn bạn, cảm ơn bạn. Điều này, tôi chắc chắn, rất rõ ràng nhưng đối với những người trong tương lai, đó là User Id = cái gì đó; Mật khẩu = cái gì đó;
shubniggurath

2
Tôi đã nhận được cùng một lỗi trong tiêu đề của bài đăng. Tôi nhận thấy rằng 'User Id = yourUserid Password = yourPassword' bị bỏ qua khi "'trust connection = true'" nằm trong chuỗi kết nối cơ sở dữ liệu. Tôi đã xóa "'kết nối đáng tin cậy = true'" khỏi chuỗi của mình và điều đó đã khắc phục được sự cố của tôi. Điều này đã không xảy ra cho đến khi tôi chuyển ứng dụng từ gỡ lỗi trong VS 2012 sang iis 8.
T3.0

12

Một đồng nghiệp đã gặp lỗi tương tự và đó là do một chút lỗi cấu hình trong IIS.
Nhóm ứng dụng sai đã được chỉ định cho ứng dụng web.

Thật vậy, chúng tôi sử dụng Nhóm ứng dụng tùy chỉnh với Danh tính cụ thể để đáp ứng nhu cầu của chúng tôi.

Trong Trình quản lý IIS cục bộ của anh ấy -> Trang web -> Trang web mặc định -> Tên ứng dụng web của chúng tôi -> Cài đặt cơ bản ... Nhóm ứng dụng là "DefaultAppPool" thay vì Nhóm ứng dụng tùy chỉnh của chúng tôi.

Đặt đúng nhóm ứng dụng đã giải quyết được vấn đề.


11

Tôi đã thêm vào <identity impersonate="true" />web.config của mình và nó hoạt động tốt.


7
Chỉ cần hiểu điều này sẽ thay đổi ngữ cảnh mà ứng dụng ASP.NET chạy toàn bộ. Thay vì chạy trong ngữ cảnh 'DỊCH VỤ MẠNG' mặc định, giờ đây nó sẽ chạy trong ngữ cảnh của người dùng sử dụng ứng dụng (tức là Tên miền \ someUser). Điều này đôi khi không sao, nhưng chỉ cần hiểu rằng sự thay đổi này không chỉ là một bản sửa lỗi nhanh chóng cho OP và có những tác động bên dưới khác có thể / không mong muốn.
atconway


6

Đối với tôi, sự cố đã được giải quyết khi tôi thay thế tài khoản tích hợp mặc định 'ApplicationPoolIdentity' bằng một tài khoản mạng được phép truy cập vào cơ sở dữ liệu.

Cài đặt có thể được thực hiện trong Máy chủ thông tin Internet (IIS 7+)> Vùng chứa ứng dụng> Cài đặt nâng cao> Mô hình quy trình> Danh tính


4

Đối với tôi, vấn đề với 'DOMAIN \ MACHINENAME $' đã được khắc phục bằng cách đặt DefaultApplicationPoolIdentity thành NetworkService.

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


3

Chúng tôi đã nhận được thông báo lỗi tương tự trong khi xử lý cơ sở dữ liệu Dịch vụ phân tích. Hóa ra tên người dùng, được sử dụng để chạy phiên bản Dịch vụ Phân tích, chưa được thêm vào Nhật ký Bảo mật của Máy chủ SQL.

Trong SQL Server 2012, dịch vụ SQL Server và phân tích được định cấu hình để chạy với tư cách người dùng khác nhau theo mặc định. Nếu bạn đã sử dụng các giá trị mặc định, hãy luôn đảm bảo rằng người dùng AS có quyền truy cập vào nguồn dữ liệu của bạn!


1
Tôi đã từng gặp vấn đề tương tự. Lỗi từ SSAS cũng vậy, nhưng tài khoản không phải là Dịch vụ mạng. Tài khoản thực sự là: NT Service \ MSOLAP $ INSTANCENAME
cdonner

2

Kiểm tra xem bạn có

User Instance=true

trong chuỗi kết nối. Hãy thử xóa nó để giải quyết vấn đề của bạn.


2

Tôi cũng gặp lỗi này với người dùng được xác thực SQL Server

Tôi đã thử một số bản sửa lỗi, nhưng chúng không hoạt động.

Giải pháp trong trường hợp của tôi là định cấu hình "Chế độ Xác thực Máy chủ" của nó để cho phép xác thực Máy chủ SQL, trong Management Studio: Thuộc tính / Bảo mật.


1

Điểm duy nhất mà mọi người dường như đã bỏ qua là bạn có thể muốn tích hợp bảo mật = true. Bạn có thể có trang web đang chạy trong một tài khoản chung. Tất cả đều tốt như vậy và vẫn có thể truy cập máy chủ SQL bằng thông tin xác thực người dùng ban đầu chứ không phải của nhóm. Nó được gọi là ủy quyền hạn chế. Nếu bạn kích hoạt nó và thiết lập một cửa sổ SPN sẽ dịch thông tin đăng nhập của nhóm với các yêu cầu của người dùng đến dịch vụ cuối cùng (SQL chỉ là một dịch vụ như vậy). Bạn phải đăng ký máy chủ SQL DUY NHẤT và DUY NHẤT phục vụ các yêu cầu SQL trên máy chủ web. Thiết lập tất cả điều này là quá nhiều đối với tôi để cố gắng mô tả chính xác ở đây. Tôi đã mất khá nhiều thời gian để tự mình vượt qua nó.


0

Tôi đã dành một vài giờ để cố gắng khắc phục sự cố và cuối cùng tôi đã nhận được nó - Trình duyệt SQL Server đã bị "Dừng". Cách khắc phục là thay đổi nó thành chế độ "Tự động":

Nếu nó bị vô hiệu hóa, hãy đi tới Bảng điều khiển-> Công cụ quản trị-> Dịch vụ và tìm SQL Server Agent. Nhấp chuột phải và chọn "Thuộc tính". Từ menu thả xuống "Loại khởi động", hãy thay đổi từ "Đã tắt" thành "Tự động".

trích dẫn từ đây


0

Tôi đã gặp vấn đề tương tự trước đó, việc xóa Persist Security Info=Truekhỏi kết nối đã làm việc cho tôi.


0

Tôi đã gặp phải sự cố này khi một khách hàng đổi tên máy chủ SQL. Dịch vụ báo cáo SQL đã được định cấu hình để kết nối với tên máy chủ cũ, mà họ cũng đã tạo bí danh cho tên đó được chuyển hướng đến IP của tên máy chủ mới.

Tất cả các ứng dụng IIS cũ của họ đều hoạt động, chuyển hướng đến tên máy chủ mới thông qua bí danh. Theo linh cảm, tôi đã kiểm tra xem chúng có đang chạy SSRS hay không. Cố gắng kết nối với trang SSRS Đã gây ra lỗi:

"Dịch vụ không khả dụng. Hãy liên hệ với quản trị viên hệ thống của bạn để giải quyết vấn đề. Quản trị viên hệ thống: Máy chủ báo cáo không thể kết nối với cơ sở dữ liệu của nó. Đảm bảo rằng cơ sở dữ liệu đang chạy và có thể truy cập được. Bạn cũng có thể kiểm tra nhật ký theo dõi máy chủ báo cáo để biết chi tiết . "

Nó đang chạy trên máy chủ, nhưng không kết nối được vì nó đang sử dụng bí danh cho tên máy chủ cũ. Định cấu hình lại SSRS để sử dụng tên máy chủ mới thay vì bí danh / cũ đã sửa nó.


0
  1. Thay đổi danh tính nhóm ứng dụng thành hệ thống cục bộ
  2. Trên SQL Mgmt> Bảo mật> Đăng nhập
    1. Tìm NT AUTHORITY \ SYSTEM nhấp đúp chuột vào
    2. Bản đồ người dùng> Kiểm tra cơ sở dữ liệu của bạn và đóng vai trò bên dưới.
    3. Cũng hãy nhớ tạo cơ sở dữ liệu người dùng o đăng nhập bảo mật với mật khẩu chính xác.

0

Tôi gặp lỗi này khi cố gắng kiểm tra giải pháp bằng cách sử dụng cách sau

string cn = "Data Source=[servername];Integrated Security=true;Initial Catalog=[dbname];";

Cách tôi giải quyết là: Tôi phải mở Visual Studio và chạy nó bằng một tài khoản khác, vì tài khoản tôi đang sử dụng để mở không phải là tài khoản Admin của tôi.

Vì vậy, nếu vấn đề của bạn tương tự như của tôi: hãy ghim VS vào thanh tác vụ, sau đó sử dụng Shift và Nhấp chuột phải để mở menu để bạn có thể mở VS với tư cách người dùng khác. nhập mô tả hình ảnh ở đây


0

Đánh giá cao có một vài câu trả lời hay ở đây, nhưng vì tôi vừa mất thời gian tìm hiểu vấn đề này, hy vọng điều này có thể giúp ích cho ai đó.

Trong trường hợp của tôi, mọi thứ đã hoạt động tốt, sau đó dừng lại mà không có lý do rõ ràng với lỗi được nêu trong câu hỏi.

IIS đang chạy dưới dạng dịch vụ Mạng và Dịch vụ mạng đã được thiết lập trên SQL Server trước đó (xem các câu trả lời khác cho bài đăng này). Vai trò máy chủ và ánh xạ người dùng trông đúng.

Vấn đề là; hoàn toàn không có lý do rõ ràng; Dịch vụ Mạng đã chuyển sang 'Từ chối' Quyền đăng nhập trong cơ sở dữ liệu.

Sửa chữa:

  1. Mở SSMS> Bảo mật> Đăng nhập.
  2. Nhấp chuột phải vào 'NT AUTHORITY \ NETWORK SERVICE' và Nhấp vào Thuộc tính.
  3. Chuyển đến tab 'Trạng thái' và đặt Thành Permission to Connect To Database Engine'Cấp'.

Dịch vụ mạng được phép

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.