2010-07-20 3 views
1

서비스 수준 계정으로 실행되는 사용자 지정 응용 프로그램 풀에서 실행되는 asp.net 응용 프로그램이 있습니다. web.config에서 익명 액세스를 해제했습니다. 웹 서버는 도메인의 일부입니다. 응용 프로그램은 동일한 시스템에서 실행되는 SQL Server에 액세스합니다.Asp.net 응용 프로그램 풀 및 SQL 서버 데이터 연결

현재 모든 사용자에 대해 서비스 수준 계정을 가장하여 데이터베이스에 액세스합니다. 많은 사용자가 사이트에 액세스 할 때 lsass 프로세스가 cpu를 사용하기 시작하면 사이트 속도가 느려집니다.

SQL 서버 계정을 만들 수 없으므로 가지고있는 것들을 사용해야합니다. 각 개별 사용자를 데이터베이스에 추가하고 특정 액세스 권한을 부여 할 수도 없습니다.

제 질문은 웹 사이트 사용량이 많을 때 서비스 수준 계정의 가장을 수행하지 않아도 CPU 스 래싱을 피할 수 있도록 내 응용 프로그램과 데이터베이스의 레전션을 어떻게 설정할 수 있습니까?

답변

1

서비스 계정을 가장해서는 안됩니다. 서비스 계정은 데이터베이스에 액세스해야하는 계정이며 이미 있다고 가정합니다. 데이터베이스에 액세스 할 때 서비스 계정을 가장하지 않고 응용 프로그램을 실행 해 보았습니까? 이것은 효과가있다.

간단한 테스트를 수행하려면 WindowsIdentity.GetCurrent() (예 : Page_Load 내부)에서 반환 된 신원을 확인하십시오. 이것은 응용 프로그램 풀 ID를 반환해야하며 이것은 데이터베이스에 액세스하는 데 사용되는 ID입니다.

물론 이것은 client impersonation이 Web.config 파일에 구성되어 있지 않은 경우에만 작동합니다. 그러나 이것은 몇몇 모서리의 경우를 제외하고는 일반적인 관행이 아니기 때문에 나는 이것을 사용하지 않을 것이라고 생각합니다. 클라이언트 가장은 현재 사용자를 확인하는 데 필요하지 않으므로 현재 로그온 한 사용자의 ID를 사용하여 타사 시스템 (데이터베이스, 파일 공유, 대기열 등)에 액세스하려는 경우에만 사용해야합니다. 매우 확장 성있는 접근 방식은 아닙니다.)

+0

실제로 클라이언트 가장이 web.config 파일에 구성됩니다. impersonate = true, 사용자 이름 및 암호 없음. 이렇게하면 처음부터 웹 사이트에 액세스 할 수 있는지 확인해야 할 때 사용자가 누구인지 파악할 수 있습니다. – user397065

+0

이를 위해 클라이언트 가장은 필요하지 않습니다. 인트라넷 사이트와 Windows 인증이 있다고 가정합니까? 그런 다음 현재 사용자를 확인하려면 Thread.CurrentPrincipal 또는 HttpContext.Current.User를 호출하십시오. 나는 또한 나의 대답에 몇 가지 더 많은 정보를 추가했다. –

+0

web.config 파일에서 가장을 사용하여 문제가 해결되었습니다. 이제 프로그래밍 방식으로 가장해야하지 않습니다. – user397065

관련 문제