'DOMAIN \ MACHINENAME $'사용자가 로그인하지 못했습니다.


120

:이 약의 중복 알고 ASP.NET 및 SQL Server 2008의 "로그인 사용자 'NT AUTHORITY \ IUSR을'실패 '오류LINQ와 System.Data.SqlClient.SqlException에 - 사용자 이름'실패 로그인 외부 프로젝트 / 클래스 라이브러리 이지만 내 서버의 다른 응용 프로그램과 비교하여 일부가 합산되지 않으며 그 이유를 모르겠습니다.

사용중인 상자 :

웹 박스
SQL 박스
SQL 테스트 박스

내 응용 프로그램:

LINQ-to-SQL을 사용하는 클래스 라이브러리를 참조하는 ASP.NET 웹 응용 프로그램이 있습니다. 클래스 라이브러리에서 연결 문자열이 올바르게 설정되었습니다. 사용자 'username'-System.Data.SqlClient.SqlException에 대한 로그인 실패에 따라 외부 프로젝트 / 클래스 라이브러리의 LINQ와 함께이 연결 문자열도 웹 응용 프로그램에 추가했습니다.

연결 문자열은 다음과 같이 SQL 자격 증명을 사용합니다 (웹 앱 및 클래스 라이브러리 모두에서).

 <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" />

이 연결은 서버 탐색기에 추가하여 작동하는 것으로 확인되었습니다. 이것은 내 .dbml 파일이 사용하는 연결 문자열입니다.

문제 :

다음과 같은 오류가 발생합니다.

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

이제 ASP.NET 및 SQL Server 2008에서 " 'NT AUTHORITY \ IUSR'사용자에 대한 로그인 실패"오류를 참조하면 이것이 실제로 로컬 네트워크 서비스이며 다른 비 도메인 이름을 사용하면 작동하지 않는다고 말합니다.

하지만 SQL Box와 SQL Test Box SQL Management Studio를 모두 확인했고 둘 다 NT AUTHORITY/NETWORK SERVICE보안-> 로그인, 데이터베이스 수준에서 보안-> 사용자에 나열되지 않고 데이터베이스 수준 보안에 있기 때문에 혼란 스럽 습니다. -> 사용자 사용자가 연결 문자열에 표시됩니다.

웹 서버의 NTFS 수준에서 권한은 NETWORK SERVICE가 모든 권한을 갖습니다.

내가 혼란스러워하는 이유는 웹 서버에 다른 많은 웹 응용 프로그램이 있고 SQL Box와 SQL Test Box 모두에서 데이터베이스를 참조하고 모두 작동하기 때문입니다. 그러나 클래스 라이브러리를 사용하는 것 외에는 현재 응용 프로그램과 차이점을 찾을 수 없습니다. 그게 중요할까요? NTFS 권한 확인, 서버 및 데이터베이스 수준에서 보안 로그인 설정, 연결 문자열 및 연결 방법 (SQL Server 자격 증명), IIS 응용 프로그램 풀 및 기타 폴더 옵션은 모두 동일합니다.

내 SQL 상자 중 하나의 권한에 machinename $을 추가하지 않고 이러한 응용 프로그램이 작동하는 이유는 무엇입니까? 그러나 그것이 하나의 링크 가이 문제를 해결하기 위해 나에게 지시하는 것입니다.


요약하자면, 데이터베이스 사용자를 사용하고 있지 않습니까? 우리는 하나를 만들고 우리가해야 할 일에 따라 그것과 SA 사이를 토글 할 수 있습니다 ...
jcolebrand

연결 문자열에서 보안-> 로그인 영역에서 생성 한 데이터베이스 사용자를 사용하고 있으며이를 데이터베이스의 보안-> 사용자에 추가하고 dbo 권한을 부여했습니다. 다른 모든 앱도 그렇게 했어요.
SventoryMang

다음은 기본 컴퓨터 이름을 사용하는 MSDN의 명확한 설명입니다. 기본적으로 검색을 누르지 않고 도메인 / 컴퓨터 $를 SQL에 추가하기 만하면됩니다. blogs.msdn.microsoft.com/ericparvin/2015/04/14/…
Brett Maiwald

답변:


156

NETWORK SERVICE 및 LocalSystem은 항상 로컬에서 해당 계정 (builtin \ network service 및 builtin \ system)으로 자신을 인증하지만 둘 다 원격으로 컴퓨터 계정으로 인증합니다.

Login failed for user 'DOMAIN\MACHINENAME$'NETWORK SERVICE 또는 LocalSystem으로 실행되는 프로세스가 원격 리소스에 액세스하고 자신을 컴퓨터 계정으로 인증했으며 권한 부여가 거부되었음을 의미하는 것과 같은 오류가 표시 됩니다.

일반적인 예는 NETWORK SERVICE 자격 증명을 사용하도록 설정된 앱 풀에서 실행되고 원격 SQL Server에 연결하는 ASP 응용 프로그램입니다. 앱 풀은 앱 풀을 실행하는 컴퓨터 로 인증되며이 컴퓨터 계정은 액세스 권한을 부여 받아야합니다. .

컴퓨터 계정에 대한 액세스가 거부되면 컴퓨터 계정에 대한 액세스 권한이 부여되어야합니다. 서버가 'DOMAIN \ MACHINE $'로그인을 거부하는 경우 NETWORK SERVICE가 아닌 'DOMAIN \ MACHINE $'에 로그인 권한을 부여해야합니다. NETWORK SERVICE에 대한 액세스 권한을 부여하면 원격 프로세스가 아닌 NETWORK SERVICE로 실행 되는 로컬 프로세스가 연결할 수 있습니다. 원격 프로세스는 예상대로 DOMAIN \ MACHINE $로 인증되기 때문입니다.

ASP 응용 프로그램이 원격 SQL Server에 SQL 로그인으로 연결될 것으로 예상하고 DOMAIN \ MACHINE $에 대한 예외가 발생하면 연결 문자열에 통합 보안을 사용한다는 의미입니다. 이것이 예상치 못한 일이라면 사용하는 연결 문자열을 망쳤다는 의미입니다.


2
제가 모은 것은 바로 설명 감사합니다. 그러나 질문은 여전히 ​​남아 있습니다. 내 모든 앱은 내 웹 서버에서 호스팅되지만 SQL 또는 SQL 테스트 상자의 데이터베이스에 액세스합니다. 원격 액세스가 가능합니까? 그러나 그들은 작동하고 있지만 내 SQL 상자 중 어느 것도 DOMAIN \ MACHINENAME $ 액세스 권한을 부여하지 않습니다.
SventoryMang

1
오 또한 SQL 로그인으로 SQL 서버에 연결할 것으로 예상하지만 연결 문자열을 게시했습니다. Integrated Security = True 옵션을 사용하고 있지 않습니다. 그 밖의 무엇 일 수 있습니까 ??
SventoryMang

2
가능한 설명은 세 가지가 있습니다. 1) 통합 인증 대신 SQL 인증을 사용합니다 (예를 들어 conn 문자열에 사용자 ID와 비밀번호가 있기 때문에 가장 그럴듯한 것 같습니다). 2) 통합 인증을 사용하고 앱 투표에서 실행됩니다. 다른 자격 증명을 사용하거나 3) 통합 인증을 사용하지만 ASP 앱은 호출자를 가장하여 제한된 위임을 트리거합니다 : technet.microsoft.com/en-us/library/cc739587%28WS.10%29.aspx .
Remus Rusanu

2
웹앱 프로젝트는 dll이 아닌 클래스 라이브러리 프로젝트를 참조해야합니다 . 웹앱 솔루션에 클래스 라이브러리 프로젝트를 추가 한 다음 dll에 대한 참조를 제거하고 프로젝트에 대한 참조를 추가합니다. 이렇게하면 배포 또는 테스트 할 때 소매 웹 앱이 소매 클래스 dll을 참조하고 디버그가 자동으로 디버그를 참조합니다.
Remus Rusanu

1
이 모든 것이 좋고 좋지만 머신 로그인을 SQL에 어떻게 추가합니까? -둘 다 동일한 도메인에 있으며 통합 보안을 사용하는 것을 선호합니다. 그러나 "Domain \ MachineName $"이라는 계정을 추가하는 것만으로는 완전히 실패합니다 (예를 들어, 존재하지 않고 개체 탐색기가 질식하여 이와 유사한 것을 찾지 못함).
BrainSlugs83

33

이 오류는 IIS로 응용 프로그램을 구성하고 IIS가 SQL Server로 이동하여 적절한 권한이없는 자격 증명으로 로그인하려고 할 때 발생합니다. 이 오류는 복제 또는 미러링이 설정된 경우에도 발생할 수 있습니다. 항상 작동하고 매우 간단한 솔루션을 살펴 보겠습니다. SQL Server >> 보안 >> 로그인으로 이동하고 NT AUTHORITY \ NETWORK SERVICE를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다.

로그인 속성의 새로 열린 화면에서 "사용자 매핑"탭으로 이동합니다. 그런 다음 "사용자 매핑"탭에서 원하는 데이터베이스, 특히이 오류 메시지가 표시되는 데이터베이스를 선택합니다. 하단 화면에서 db_owner 역할을 확인합니다. 확인을 클릭하십시오.


7
웹 응용 프로그램과 데이터베이스가 동일한 컴퓨터에 있기 때문에 이것은 저에게 해결책이었습니다. "DOMAIN \ MACHINENAME $ 사용자에 대한 로그인 실패"오류가 계속 발생하지만 SQL 로그인에 시스템을 추가해도 도움이되지 않았지만 "NT AUTHORITY \ NETWORK SERVICE"를 추가하면 도움이됩니다. 필요한 경우가 아니면 db_owner 역할을 사용해서는 안되지만 일반적으로 db_datareader 및 db_datawriter이면 충분합니다.
JimiSweden

18

제 경우에는 Identity="ApplicationPoolIdentity"IIS 응용 프로그램 풀을 사용했습니다.

IIS APPPOOL\ApplicationNameSQL Server 에 사용자를 추가 하면 작동합니다.


5
IIS와 SQL 서버가 동일한 컴퓨터에있는 경우에만 이것이 작동 할 것이라고 생각합니다.
롭 데이비스

1
이것은 나를 위해 일했습니다! 로컬 IIS-SQL 서버 설정이 있습니다.
Vin Shahrdar

1
대단히 감사합니다. 이 문제는 내 로컬 개발 환경을 SQL Server 2014에서 2017로 업그레이드 한 후에 시작되었습니다. 귀하의 제안은이 상황에서 은색 총알이었습니다.
MFry

고마워, 나에게도 일했다. 내가 강조하고 싶은 것은 응용 프로그램 풀이 풀 ID로 실행되도록 설정되어 있고 'DOMAIN \ MACHINENAME $'이 실제로 있어도 로그인이 실패하더라도 오류 메시지가 여전히 '사용자'DOMAIN \ MACHINENAME $ '에 대한 로그인 실패라는 것입니다. 연결 권한이 부여됩니다. 오해의 소지가있는 오류 메시지처럼 보입니다.
mivra

16

기본적으로이 문제를 해결하려면 다음과 같은 설정이 필요합니다.

  • ApplicationPoolIdentity에서 실행되는 웹 앱
  • 연결 문자열에서 Windows 인증을 사용하여 ADO.Net을 통해 데이터베이스에 연결하는 웹 응용 프로그램

Windows 인증에 사용되는 연결 문자열에는 Trusted_Connection=Yes특성 또는 파일 의 동등한 특성 Integrated Security=SSPI이 포함 Web.config됩니다.

내 데이터베이스 연결이 Windows 인증 모드입니다. 그래서 간단히 Application Pools Identity를 ApplicationPoolIdentity 에서 내 도메인 로그인 자격 증명 DomainName \ MyloginId로 변경하여 문제를 해결했습니다.

단계:

  1. 응용 프로그램 풀을 클릭하십시오.
  2. 애플리케이션 이름 선택

  3. 고급 설정으로 이동

  4. 프로세스 모델을 확장 하고 ID를 클릭 합니다. 오른쪽 끝에 점 세 개를 클릭합니다.
  5. 클릭 설정 ... 버튼을 및 자격 증명에 도메인 로그를 제공합니다

나를 위해 그것은 해결되었습니다.

참고 : 프로덕션 또는 IT 환경에서는 앱 풀 ID에 대해 동일한 도메인에 서비스 계정이있을 수 있습니다. 그렇다면 로그인 대신 서비스 계정을 사용하십시오.


위의 질문에 대해 이것이 허용되는 대답이어야합니다.
makil

14

나를 위해 일한 트릭 제거하는 것이었다 Integrated Security내 연결 문자열에서와 정기적으로 추가 User ID=userName; Password=password에 연결 문자열을 App.config통합 보안 만에서 만든 하나를 사용하지 않을 당신의 libruary 힘의 Web.config입니다!


3
10 억 감사합니다. 엄청난 도움이됩니다. 고마워요 고마워요 고마워요 이것은 매우 분명하지만 미래의 사람들에게는 User Id = something입니다. 암호 = 무언가;
shubniggurath

2
게시물 제목에 동일한 오류가 발생했습니다. 데이터베이스 연결 문자열에 " 'trusted connection = true'"가있는 경우 'User Id = yourUserid Password = yourPassword'가 무시되는 것을 발견했습니다. 내 문자열에서 " 'trusted connection = true'"를 제거하고 문제를 해결했습니다. 이것은 VS 2012의 디버깅에서 iis 8로 응용 프로그램을 옮길 때까지 발생하지 않았습니다.
T3.0

12

동료에게도 동일한 오류가 발생했는데 이는 IIS의 약간의 구성 오류 때문이었습니다.
웹 응용 프로그램에 잘못된 응용 프로그램 풀이 할당되었습니다.

실제로 우리는 요구 사항을 충족하기 위해 특정 ID가있는 사용자 지정 응용 프로그램 풀을 사용합니다.

그의 로컬 IIS 관리자-> 사이트-> 기본 웹 사이트-> 웹 앱 이름-> 기본 설정 ... 응용 프로그램 풀은 사용자 지정 응용 프로그램 풀 대신 "DefaultAppPool"이었습니다.

올바른 응용 프로그램 풀을 설정하면 문제가 해결되었습니다.


11

<identity impersonate="true" />내 web.config에 추가 했는데 제대로 작동했습니다.


7
이것이 ASP.NET 응용 프로그램이 전체적으로 실행되는 컨텍스트를 변경한다는 것을 이해하십시오. 기본 'NETWORK SERVICE'컨텍스트에서 실행하는 대신 이제 애플리케이션을 사용하는 사용자 컨텍스트 (예 : Domain \ someUser)에서 실행됩니다. 이것은 때때로 괜찮습니다. 그러나이 변경은 단지 OP에 대한 빠른 수정이 아니며 원하지 않을 수도 있고 원하지 않을 수도있는 다른 다운 스트림 영향을 가지고 있음을 이해하십시오.
atconway


6

나를 위해 기본 기본 제공 계정 'ApplicationPoolIdentity'를 데이터베이스에 대한 액세스가 허용 된 네트워크 계정으로 바꾸면 문제가 해결되었습니다.

Internet Information Server (IIS 7+)> 애플리케이션 풀> 고급 설정> 프로세스 모델> ID에서 설정할 수 있습니다.



3

Analysis Services 데이터베이스를 처리하는 동안 유사한 오류 메시지가 표시되었습니다. Analysis Services 인스턴스를 실행하는 데 사용 된 사용자 이름이 SQL Server의 보안 로그인에 추가되지 않은 것으로 나타났습니다.

SQL Server 2012에서 SQL Server 및 Analysis 서비스는 기본적으로 다른 사용자로 실행되도록 구성됩니다. 기본값을 사용했다면 항상 AS 사용자가 데이터 소스에 액세스 할 수 있는지 확인하십시오!


1
나는 같은 문제가 있었다. SSAS의 오류는 동일하지만 계정이 네트워크 서비스가 아닙니다. 계정은 실제로 다음과 같습니다. NT Service \ MSOLAP $ INSTANCENAME
cdonner 2014


2

SQL Server 인증 사용자에게도이 오류가 발생했습니다.

일부 수정 사항을 시도했지만 작동하지 않았습니다.

필자의 경우 솔루션은 Management Studio : 속성 / 보안에서 SQL Server 인증을 허용하도록 "서버 인증 모드"를 구성하는 것이 었습니다.


1

모두가 간과 한 것처럼 보이는 유일한 점은 통합 보안 = 사실을 원할 수 있다는 것입니다. 풀 계정으로 사이트를 실행할 수 있습니다. 괜찮습니다. 풀이 아닌 원래 사용자 자격 증명으로 SQL 서버에 접속하는 것은 여전히 ​​가능합니다. 이를 제한 위임이라고합니다. 이를 활성화하고 SPN 창을 설정하면 최종 서비스로 이동하는 사용자의 요청에 따라 풀의 자격 증명이 변환됩니다 (SQL은 이러한 서비스 중 하나 일뿐입니다). 웹 서버에서 SQL 요청을 처리하는 유일한 SQL 서버를 등록해야합니다. 이 모든 것을 설정하는 것은 여기에서 정확하게 설명하기에는 너무 많은 것입니다. 직접 작업하는 데 꽤 오랜 시간이 걸렸습니다.


0

문제를 해결하기 위해 몇 시간을 보냈고 마침내 문제가 발생했습니다. SQL Server Browser가 "중지"되었습니다. 해결 방법은 "자동"모드로 변경하는 것입니다.

비활성화 된 경우 제어판-> 관리 도구-> 서비스로 이동하여 SQL Server 에이전트를 찾습니다. 마우스 오른쪽 버튼을 클릭하고 "속성"을 선택합니다. "시작 유형"드롭 다운에서 "사용 안 함"에서 "자동"으로 변경합니다.

여기에서 인용


0

나는 이전에 같은 문제를 겪었고 Persist Security Info=Trueconnectionstring 에서 제거 하면 나를 위해 일했습니다.


0

클라이언트가 SQL Server의 이름을 바꿀 때이 문제가 발생했습니다. SQL Reporting Service는 새 서버 이름의 IP로 리디렉션되는 별칭을 만든 이전 서버 이름에 연결하도록 구성되었습니다.

이전 IIS 앱이 모두 작동하면서 별칭을 통해 새 서버 이름으로 리디렉션되었습니다. 직감으로 SSRS를 실행 중인지 확인했습니다. SSRS 사이트에 연결하려고하면 오류가 발생했습니다.

"서비스를 사용할 수 없습니다. 시스템 관리자에게 문의하여 문제를 해결하십시오. 시스템 관리자 : 보고서 서버가 데이터베이스에 연결할 수 없습니다. 데이터베이스가 실행 중이고 액세스 가능한지 확인하십시오. 자세한 내용은 보고서 서버 추적 로그를 확인할 수도 있습니다. . "

서버에서 실행 중이었지만 이전 서버 이름의 별명을 사용했기 때문에 연결에 실패했습니다. 이전 / 별칭 대신 새 서버 이름을 사용하도록 SSRS를 다시 구성하여 수정했습니다.


0
  1. 앱 풀 ID를 로컬 시스템으로 변경
  2. SQL Mgmt> 보안> 로그인에서
    1. NT AUTHORITY \ SYSTEM 찾기 더블 클릭
    2. 사용자 매핑> 데이터베이스를 확인하고 아래 역할을 부여합니다.
    3. 또한 올바른 암호로 보안 로그인 사용자 데이터베이스를 생성해야합니다.

0

다음을 사용하여 솔루션을 테스트하려고 시도하는 동안이 오류가 발생했습니다.

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

해결 방법은 Visual Studio를 열고 다른 계정으로 실행해야한다는 것입니다. 여는 데 사용한 계정이 내 관리자 계정이 아니기 때문입니다.

따라서 문제가 내 것과 비슷한 경우 : VS를 작업 표시 줄에 고정한 다음 Shift 및 오른쪽 클릭을 사용하여 메뉴를 열고 다른 사용자로 VS를 열 수 있습니다. 여기에 이미지 설명 입력


0

여기에 몇 가지 좋은 답변이 있습니다.하지만이 문제를 해결하는 데 시간을 잃었 기 때문에 이것이 누군가를 도울 수 있기를 바랍니다.

제 경우에는 모든 것이 잘 작동 한 다음 질문에 명시된 오류로 명백한 이유없이 중지되었습니다.

IIS는 네트워크 서비스로 실행 중이었고 네트워크 서비스는 이전에 SQL Server에 설정되었습니다 (이 게시물에 대한 다른 답변 참조). 서버 역할과 사용자 매핑이 올바로 보입니다.

문제는 다음과 같습니다. 명백한 이유가 전혀 없습니다. 네트워크 서비스가 데이터베이스에서 로그인 권한을 '거부'로 전환했습니다.

고치다:

  1. SSMS> 보안> 로그인을 엽니 다.
  2. 'NT AUTHORITY \ NETWORK SERVICE'를 마우스 오른쪽 버튼으로 클릭하고 속성을 클릭합니다.
  3. '상태'탭으로 이동하여 ' Permission to Connect To Database Engine부여'로 설정하십시오 .

네트워크 서비스 허용

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.