'DOMAIN\MACHINE$' 사용자에 대한 로그인 실패
다음 오류가 거의 중복된다는 것을 알고 있습니다: "사용자 'NT AUTHORITY'에 대한 로그인 실패\"ASP의 IUSR'.사용자 'username' - 시스템에 대해 NET 및 SQL Server 2008 및 로그인에 실패했습니다.Data.SqlClient.외부 프로젝트/클래스 라이브러리에서 LINQ를 사용하는 SqlException을 사용하지만 서버의 다른 애플리케이션과 비교하여 일부 사항이 중복되지 않아 이유를 알 수 없습니다.
사용 중인 상자:
박스
BoxSQL 문서
상자SQL 파일
내 응용 프로그램:
ASP를 가지고 있습니다.LINQ-to-SQL을 사용하는 클래스 라이브러리를 참조하는 NET 웹 응용 프로그램입니다.클래스 라이브러리에 연결 문자열이 올바르게 설정되었습니다.사용자 'username' - 시스템에 대해 로그인하지 못했습니다.Data.SqlClient.외부 프로젝트/클래스 라이브러리에서 LINQ를 사용하는 SqlException 또한 웹 응용 프로그램에 이 연결 문자열을 추가했습니다.
연결 문자열은 다음과 같이 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$'.
이 항목을 참조하는 중 "사용자 'NT AUTHORITY'에 대한 로그인 실패\" 오류가 발생했습니다.ASP의 IUSR'.NET 및 SQL Server 2008은 로컬 네트워크 서비스이며 다른 도메인이 아닌 이름은 사용할 수 없습니다.
SQL Studio를 했는데 둘 다 <SQL Box> SQL Test Box <SQL Management Studio>, <SQL Management Studio>를 가지고 .NT AUTHORITY/NETWORK SERVICE보안 -> 로그인 아래 데이터베이스 수준에서 보안 -> 사용자 아래에 나열되지 않지만 데이터베이스 수준에서 보안 -> 사용자 연결 문자열에 표시된 사용자가 있습니다.
웹 서버의 NTFS 수준에서는 네트워크 서비스 권한이 전체 제어 권한을 가집니다.
제가 혼란스러운 이유는 제 웹 서버에 SQL Box와 SQL Test Box 모두에 데이터베이스를 참조하는 다른 웹 응용 프로그램이 많이 있고 모두 작동하기 때문입니다.하지만 클래스 라이브러리를 사용하는 것 외에는 현재 응용 프로그램과 다른 점을 찾을 수 없습니다.그게 중요할까요?NTFS 권한 확인, 서버 및 데이터베이스 수준에서의 보안 로그인 설정, 연결 문자열 및 연결 방법(SQL Server 자격 증명), IIS 응용 프로그램 풀 및 기타 폴더 옵션은 모두 동일합니다.
SQL 상자 중 하나의 사용 권한에 machinename$을(를) 추가하지 않고 이러한 응용 프로그램이 작동하는 이유는 무엇입니까?하지만 이것이 바로 이 문제를 해결하기 위해 제게 지시하는 하나의 링크입니다.
NETWORK SERVICE와 LocalSystem은 항상 로컬에서 해당 계정(Builtin\network service 및 builtin\system)으로 인증하지만 둘 다 원격으로 기계 계정으로 인증됩니다.
와 같은 ,Login failed for user 'DOMAIN\MACHINENAME$', 중인 리소스에 합니다.
일반적인 예로는 NETWORK SERVICE 자격 증명을 사용하기 위해 앱 풀 세트에서 실행되고 원격 SQL 서버에 연결되는 ASP 애플리케이션이 있습니다. 앱 풀은 앱 풀을 실행하는 시스템으로 인증되며 이 시스템 계정은 액세스 권한을 부여해야 합니다.
컴퓨터 계정에 대한 액세스가 거부되면 컴퓨터 계정에 대한 액세스 권한을 부여해야 합니다.서버가 'DOMAIN\MACHINE$' 로그인을 거부할 경우 NETWORK SERVICE가 아닌 'DOMAIN\MACHINE$'에 대한 로그인 권한을 부여해야 합니다.NETWORK SERVICE에 대한 액세스 권한을 부여하면 원격 프로세스가 아닌 NETWORK SERVICE로 실행 중인 로컬 프로세스가 연결될 수 있습니다. 이는 원격 프로세스가 DOMAIN\MACHINE$로 인증되기 때문입니다.
ASP 애플리케이션이 SQL 로그인으로 원격 SQL Server에 연결될 것으로 예상되는 경우 DOMAIN\MACHINE$에 대한 예외가 발생하면 연결 문자열에 통합 보안을 사용한다는 의미입니다.예상치 못한 경우 사용하는 연결 문자열을 잘못 사용한 것입니다.
이 오류는 IIS로 응용 프로그램을 구성하고 IIS가 SQL Server로 이동하여 적절한 사용 권한이 없는 인증 정보로 로그인하려고 할 때 발생합니다.이 오류는 복제 또는 미러링을 설정할 때도 발생할 수 있습니다.항상 작동하고 매우 간단한 솔루션을 검토해 보겠습니다.SQL Server >> Security >> 로그인 후 NT AUTHORITY\NETWORK SERVICE를 마우스 오른쪽 버튼으로 클릭하여 Properties를 선택합니다.
새로 연 로그인 정보 화면에서 "사용자 매핑" 탭으로 이동합니다.그런 다음 "사용자 매핑" 탭에서 원하는 데이터베이스(특히 이 오류 메시지가 표시되는 데이터베이스)를 선택합니다.아래 화면에서 db_owner 역할을 선택합니다.확인을 클릭합니다.
기본적으로 이 문제를 해결하려면 다음과 같은 설정이 필요합니다.
- ApplicationPoolIdentity에서 실행 중인 웹 앱
- ADO를 통해 데이터베이스에 연결하는 웹 응용프로그램입니다.연결 문자열에서 Windows 인증을 사용하는 네트
인증사연문결은다음포다함하합니중이 포함됩니다.Trusted_Connection=Yes속성 또는 동등한 속성Integrated Security=SSPIWeb.config
데이터베이스 연결이 Windows 인증 모드에 있습니다.따라서 Application Pool Identity를 Application Pool Identity에서 도메인 로그인 자격 증명 DomainName\으로 변경하여 문제를 해결했습니다.내 로그인 ID
단계:
- 애플리케이션 풀 클릭
응용프로그램 이름을 선택
고급 설정으로 이동
- 프로세스 모델을 확장하고 ID를 클릭합니다.오른쪽 끝에 있는 세 개의 점을 클릭합니다.
- 설정... 버튼을 클릭하고 도메인 로그인 자격 증명 제공
저에게는 해결되었습니다.
참고: 운영 또는 IT 환경에서는 애플리케이션 풀 ID에 대해 동일한 도메인 아래에 서비스 계정이 있을 수 있습니다.그렇다면 로그인 대신 서비스 계정을 사용하십시오.
나의 경우에는.Identity="ApplicationPoolIdentity"IIS 응용 프로그램 풀에 대해 설명합니다.
가 후한가를 추가한 에.IIS APPPOOL\ApplicationNameSQL Server에 사용할 수 있습니다.
제게 효과가 있었던 비결은 그들을 제거하는 것이었습니다.Integrated Security 열문서정규를추가에연자결을 합니다.User ID=userName; Password=password에 있는 App.config당신의 도서관의 2월은 통합 보안을 사용하지 않을 수 있지만 에 생성된 보안.Web.configsumbers!
동료에게 동일한 오류가 발생했으며 IIS의 약간의 구성 오류로 인해 발생했습니다.
웹 응용 프로그램에 잘못된 응용 프로그램 풀이 할당되었습니다.
실제로 특정 ID를 가진 맞춤형 애플리케이션 풀을 사용하여 요구사항을 충족합니다.
로컬 IIS 관리자 -> 사이트 -> 기본 웹 사이트 -> 웹 앱 이름 -> 기본 설정...애플리케이션 풀은 맞춤형 애플리케이션 풀 대신 "DefaultAppPool"이었습니다.
올바른 응용 프로그램 풀을 설정하면 문제가 해결되었습니다.
추가했습니다.<identity impersonate="true" />web.config에 연결하면 정상적으로 작동합니다.
이 문제는 기본 내장 계정 'ApplicationPoolIdentity'를 데이터베이스에 액세스할 수 있는 네트워크 계정으로 바꾸면서 해결되었습니다.
인터넷 정보 서버(IIS 7+) > 애플리케이션 풀 > 고급 설정 > 프로세스 모델 > 아이덴티티에서 설정 가능
는 'DOMAIN\MACHINNAME\MACHINNAME를 해결했습니다.DefaultApplicationPool에 대한 아이덴티티NetworkService.
Analysis Services 데이터베이스를 처리하는 동안 유사한 오류 메시지가 표시되었습니다.Analysis Services 인스턴스를 실행하는 데 사용된 사용자 이름이 SQL Server의 보안 로그인에 추가되지 않은 것으로 확인되었습니다.
SQL Server 2012에서는 SQL Server 및 Analysis 서비스가 기본적으로 서로 다른 사용자로 실행되도록 구성됩니다.기본값으로 설정한 경우 항상 AS 사용자가 데이터 소스에 액세스할 수 있는지 확인하십시오!
네트워크 서비스 또는 인증된 사용자를 사용할 수 있습니다.
다음 Roles => 및 에게 public => public을 합니다.
Mapping => 를 선택하고 "User Mapping => 매핑"을 합니다.
및 public "db_owner"를 합니다.
있는지 확인합니다.
User Instance=true
연결 문자열로문제를 해결할 수 있도록 제거해 보십시오.
SQL Server 인증된 사용자에게도 이 오류가 발생했습니다.
몇 가지 수정 사항을 시도해 보았지만 작동하지 않았습니다.
이 경우 해결책은 Management Studio에서 SQL Server 인증을 허용하도록 "서버 인증 모드"를 구성하는 것이었습니다.속성/보안.
모두가 간과한 것처럼 보이는 유일한 점은 통합 보안을 원할 수 있다는 것입니다. = true.풀 계정으로 사이트를 실행할 수 있습니다.문제가 없기 때문에 풀의 자격 증명이 아닌 원래 사용자 자격 증명으로 SQL 서버를 히트시킬 수 있습니다.그것은 제한된 위임이라고 불립니다.이를 활성화하고 SPN 창을 설정하면 풀의 자격 증명이 최종 서비스로 전송되는 사용자의 요청과 함께 변환됩니다(SQL은 이러한 서비스 중 하나에 불과함).웹 서버에서 SQL 요청을 처리하는 SQL 서버를 하나만 등록해야 합니다.이 모든 것을 설정하는 것은 제가 여기서 정확하게 설명하기에는 너무 벅찹니다.제가 직접 작업하는 데 시간이 꽤 걸렸습니다.
이전 답변이 제가 가지고 있던 문제를 설명하지 않았기 때문에 여기에 새 답변을 참조하십시오.문제는 SQL에 필요한 사용자 이름이 ID가 아닌 앱 풀의 이름이라는 것입니다.
이 AppPool로 된 상태에서 되었습니다.ApplicationPoolIdentity신원.
권한이 내 Security 사용자 이름입니다.IIS APPPOOL\DefaultAppPoolASP에서도 잘 작동했습니다.NET 전체 프레임워크 .net 응용 프로그램입니다.
ASP를 시작할 때. Core이름을 새은 생성되지 한 NET Core 버전을 하고 있습니다.ApplicationPoolIdentity신원.
하만사용사된용이후확름인에한을자지후▁via를 통해 사용되는 을 본 System.Security.Principal.WindowsIdentity.GetCurrent().NameDefaultAppPool을 사용하는 것이 아니라 새로운 AppPool 이름을 사용하는 것이라는 것을 알게 되었습니다.그래서 새로운 사용자를 추가해야 했습니다.IIS APPPOOL\ApplicationName기본값이 아닌 SQL 보안 탭에 있습니다.
Visual Studio의 게시 설정에서 문제가 발생했습니다.appsettings.json 연결 문자열은 올바르지만 게시 설정의 데이터베이스 연결 문자열에 통합 보안 = true가 있습니다.
몇 시간 동안 문제를 해결하려고 노력했지만 결국 해결되었습니다. SQL Server Browser가 "중지"되었습니다.수정 사항은 "자동" 모드로 변경하는 것입니다.
비활성화된 경우 제어판->관리 도구->서비스로 이동하여 SQL 서버 에이전트를 찾습니다.마우스 오른쪽 단추를 누른 후 "속성"을 선택합니다."시작 유형" 드롭다운에서 "사용 안 함"에서 "자동"으로 변경합니다.
이전에도 같은 문제가 있었습니다. 제거했습니다.Persist Security Info=True연결 문자열이 제게 효과가 있었습니다.
클라이언트가 SQL Server 이름을 변경할 때 이 문제가 발생했습니다.SQL Reporting Service가 이전 서버 이름에 연결하도록 구성되었으며, 새 서버 이름의 IP로 리디렉션된 서버에 대한 별칭도 생성했습니다.
모든 이전 IIS 앱이 작동하여 별칭을 통해 새 서버 이름으로 리디렉션되었습니다.직감적으로 SSRS를 실행하고 있는지 확인했습니다.SSRS 사이트에 연결하는 중 오류가 발생했습니다.
"서비스를 이용할 수 없습니다.시스템 관리자에게 문의하여 문제를 해결합니다.시스템 관리자:보고서 서버가 데이터베이스에 연결할 수 없습니다.데이터베이스가 실행 중이고 액세스할 수 있는지 확인합니다.자세한 내용은 리포트 서버 추적 로그를 확인할 수도 있습니다."
서버에서 실행되고 있지만 이전 서버 이름의 별칭을 사용하고 있기 때문에 연결하지 못했습니다.새 서버 이름을 이전/ 별칭으로 수정하지 않고 사용하도록 SSRS를 재구성합니다.
- 앱 풀 ID를 로컬 시스템으로 변경
- SQL 관리 > 보안 > 로그인에서
- NT AUTHORITY 찾기\SYSTEM 두 번 클릭
- 사용자 매핑 > 데이터베이스를 확인하고 아래에 역할을 지정합니다.
- 또한 올바른 암호를 사용하여 보안 로그인에 대한 사용자 데이터베이스를 만들어야 합니다.
다음을 사용하여 솔루션을 테스트하는 중에 이 오류가 발생했습니다.
string cn = "Data Source=[servername];Integrated Security=true;Initial Catalog=[dbname];";
제가 해결한 방법은 Visual Studio를 열고 다른 계정으로 운영해야 했습니다. 제가 개설하는 데 사용한 계정이 관리자 계정이 아니기 때문입니다.
문제가 내 문제와 비슷하다면 VS를 작업 표시줄에 고정한 다음 Shift 및 Right Click을 사용하여 메뉴를 열어 다른 사용자로 VS를 열 수 있습니다.
여기에 몇 가지 좋은 답변이 있는 것은 감사하지만, 제가 이 문제를 해결하는 데 시간을 낭비했기 때문에, 이것이 누군가에게 도움이 될 수 있기를 바랍니다.
저의 경우, 모든 것이 정상적으로 작동하다가 질문에 표시된 오류로 인해 뚜렷한 이유 없이 중단되었습니다.
IIS는 네트워크 서비스 및 네트워크 서비스가 이전에 SQL Server에 설정된 상태로 실행되고 있습니다(이 게시물에 대한 다른 답변 참조).서버 역할 및 사용자 매핑이 올바른 것 같습니다.
문제는 명백한 이유 없이 네트워크 서비스가 데이터베이스에서 '로그인 거부' 권한으로 전환되었기 때문입니다.
수정 방법:
- SSMS > 보안 > 로그인을 엽니다.
- 'NT AUTHORITY\NETWORK SERVICE'를 마우스 오른쪽 단추로 클릭하고 속성을 클릭합니다.
- '하여 '상태'를 합니다.
Permission to Connect To Database Engine'Grant's 게에.
SQL 서버의 sysadmin 역할의 일부로 \MACHINE$ 계정을 사용했지만 도움이 되지 않았습니다.서버가 동일한 컴퓨터와 IIS에 있었습니다.앱 풀 ID가 네트워크 서비스로 설정되었습니다.
앱 풀을 통합 모드에서 클래식 모드로 변경하는 것이 도움이 되었습니다.
사용하고 있습니다.데이터베이스에 연결하기 위한 별도의 서비스 ID(AD)가 있는 NET Core 3.1은 Visual Studio 2019에서 작동했지만 테스트 또는 프로덕션 서버에서는 작동하지 않았습니다.
나에게 잘 해결된 아래의 변경 사항, 연결 세부 정보도 확인하십시오.
"Server=ServerName;Database=dBName;Integrated Security=True;Trusted_Connection=True;User Id=DOMAIN\\ServiceId;Password=**********;MultipleActiveResultSets=True"
그런 다음 서비스 ID에서 실행되는 ID로 애플리케이션 풀을 변경합니다.
등할 때 (AppPool ID, AppPool on website, AppPool)을.-GrantConnectSql.)(기본적으로 비활성화되어 있습니다.
Add-SqlLogin -ServerInstance "." -LoginName $AppPoolUser -LoginType "WindowsUser" -Enable -GrantConnectSql
수동으로 이 문제를 해결하려면 다음을 수행합니다.
- SSMS 열기
- 서버에 연결
- 보안 > 로그인으로 이동합니다.
- AppPool 사용자의 속성 열기
- "상태" 탭 아래
- 데이터베이스 엔진에 연결할 수 있는 권한을 "허락"으로 설정합니다.
언급URL : https://stackoverflow.com/questions/2806438/login-failed-for-user-domain-machinename
'codememo' 카테고리의 다른 글
| Xcode 4: .xarchive 대신 IPA 파일 생성 (0) | 2023.05.03 |
|---|---|
| HTML 표의 단어 모음 (0) | 2023.05.03 |
| 자동 배치 - 절반의 수퍼뷰 높이를 기준으로 높이 설정 (0) | 2023.05.03 |
| 매우 큰 테이블에서 정확한 행 수를 계산하는 가장 빠른 방법은 무엇입니까? (0) | 2023.05.03 |
| PostgreSQL에서 보기에 대한 CREATE VIEW 코드를 보는 방법은 무엇입니까? (0) | 2023.05.03 |


