서버 개체 오류 ASP 0177:80040154

이 문서는 ActiveX 구성 요소를 인스턴스화하는 데 사용하는 Server.CreateObject 활성 서버 페이지를 실행하려고 할 때 발생하는 오류를 resolve 데 도움이 됩니다.

원래 제품 버전: Microsoft Active Server Pages
원본 KB 번호: 175804

증상

ActiveX 구성 요소를 인스턴스화하는 데 사용하는 Server.CreateObject ASP(Active Server Pages) 페이지를 실행하려고 하면 다음 오류 메시지가 나타납니다.

Server object error 'ASP 0177:80040154'
Server.CreateObject Failed
/<path>/<yourasp.asp><line #>
The call to Server.CreateObject failed. The request object instance Cannot be created.

원인

이 오류의 일반적인 원인은 다음과 같습니다.

  • 컨트롤이 올바르게 등록되지 않았습니다.

  • 로그온한 사용자( 일반적으로 익명 계정에는 컨트롤을 실행할 수 있는 적절한 권한이 없습니다.) 대부분의 경우 익명 로그인 계정(IUSR_<machine>)에는 특정 Directories/Files 또는 특정 구성 요소 및 해당 종속성에 대한 적절한 권한이 없습니다. 빈도가 낮지만 특정 키에 대한 레지스트리 권한이 올바르게 설정되지 않으면 컨트롤이 초기화되지 않습니다.

  • 모든 사람 그룹은 모든 사람이 ANYONE를 의미한다는 잘못된 개념으로 인해 특정 레지스트리 키에 대한 READ 권한을 갖지 못하도록 제거되었습니다. 실제로 는 단순히 의 Domain/machine유효성이 검사된 모든 사용자를 의미합니다.

  • Access 또는 FoxPro와 같은 파일 데이터베이스의 경우 데이터베이스 파일이 포함된 디렉터리가 인증된 사용자에게 충분한 권한을 제공하지 않습니다.

해결 방법

경고

다음은 인터넷 정보 서버 및 레지스트리 편집에 대해 잘 알고 있다고 가정합니다. 변경하기 전에 레지스트리를 백업하는 것이 좋습니다.

이 오류는 파일 또는 레지스트리 설정에 대한 잘못된 권한 설정과 연결되어 있으므로 다음 단계를 완료해야 합니다.

  1. 인증된 사용자가 누구인지 알아보세요. 인증할 사용자를 확인하려면 ASP 페이지 맨 위에 다음 코드를 추가합니다.

     <%
     Response.Write("LOGON_USER: " & _
     Request.ServerVariables("LOGON_USER"))
     %>
    

    LOGON_USER 비어 있으면 로 인증 IUSR_machine됩니다. 그렇지 않으면 는 LOGON_USER 개체를 <domain\user> 만들려고 하는 인증된 사용자의 이름을 표시합니다.

  2. 인증된 사용자(또는 그룹)에 필요한 디렉터리, 파일 및 레지스트리 키에 대한 권한이 있어야 합니다. 이렇게 하려면 컨트롤과 관련된 디렉터리, 파일 및 레지스트리 키에 대한 지식이 필요합니다. 다음은 ActiveX 데이터 개체에 대한 요구 사항 목록입니다.

ADO 관련 사례에 대한 디렉터리/파일 권한

\InetPub - IUSR_<machine> READ
\InetPub\wwwroot - IUSR_<machine> READ
\Program Files\Common Files\System\ADO - IUSR_<machine> READ
\Program Files\Common Files\System\OLE DB - IUSR_<machine> READ
\Program Files\Common Files\ODBC\Data Sources -IUSR_<machine> READ
\WinNT - IUSR_<machine> CHANGE
\WinNT\System32 - IUSR_<machine> READ
\WinNT\System32\Inetsrv\Asp - IUSR_<machine> READ
\WinNT\System32\Inetsrv\Asp\Cmpnts - IUSR_<machine> READ
\WinNT\Temp - IUSR_<machine> CHANGE

ADO 관련 사례에 대한 레지스트리 권한

아래 나열된 키에 다음 권한이 설정되어 있는지 확인합니다.

권한:

<machine>\Administrator      - Full Control  
Creator Owner                - Full Control  
Everyone                     - READ  
INTERACTIVE                  - Special Access (Query Value, Set Value, Create Subkey,
                                               Enumerate Subkeys, Notify, Delete)  
SYSTEM                       - Full Control

키:

HKEY_CLASSES_ROOT
\LICENCES
\CEDD4F80-B43C-11cf-837C-00AA00573EDE
HKEY_CLASSES_ROOT
\ADODB.Command
\ADODB.Connection
\ADODB.Parameter
\ADODB.Recordset

데이터베이스 사례에 대한 파일 및 폴더 권한

데이터베이스 파일과 데이터베이스 파일이 포함된 폴더가 인증된 사용자 또는 그룹에 대한 읽기, 쓰기실행 권한을 제공하는지 확인합니다.

일반적인 문제 촬영 단계

  1. Active Server Pages 로드맵\기타 샘플 폴더에서 샘플을 사용하여 ADO를 Server.CreateObject 실행하여 ASP가 올바르게 설치되었는지 확인합니다.
  2. 모든 DLL이 에 등록되어 Regsvr32있는지 확인합니다.
  3. 등록된 DLL 버전이 여러 개 없고 레지스트리 진입점이 올바른 버전인지 확인합니다.
  4. DLL이 아파트 스레딩 모델을 사용하고 있고 단일 스레드가 아닌지 확인합니다(아래 참고 2 참조).
  5. PDC(기본 도메인 컨트롤러)가 모든 사용자에게 네트워크 권한에서 이 컴퓨터에 액세스 권한을 부여했는지 확인합니다. IIS가 PDC인 경우 는 IUSR_<machine> 로컬 권한뿐만 아니라 로그온 권한도 갖습니다.

빠른 권한 검사 단계

  1. IIS Service Manager 기본 및 NTCR(챌린지 및 응답)을 지워 익명을 강제 적용합니다.
  2. 관리자 그룹에 를 일시적으로 추가하여 IUSR_<machine> 차이점이 있는지 확인합니다. 이 경우 문제는 권한 문제입니다.
  3. 아래에 설명된 대로 NT 감사를 켜고 다시 시도합니다.

너무 빠른 권한 검사 단계

  1. IIS Service Manager 기본 및 NTCR(챌린지 및 응답)을 지워 익명을 강제 적용합니다.
  2. IUSR_Test 라는 새 NT 사용자 계정을 만듭니다.
  3. IUSR_Test 루트 드라이브에 대한 모든 권한을 부여하고 이러한 권한을 끝까지 계단식으로 연결합니다. 나중에 IUSR_Test 삭제하여 디렉터리 또는 파일에서 제거할 수 있습니다.
  4. 아래에 설명된 대로 NT 감사를 켜고 다시 시도합니다.

NT 감사를 사용하도록 설정:

감사를 사용하도록 설정하려면 사용자 관리자를 열고 정책 메뉴에서 감사를 선택합니다. 파일 및 개체 액세스 실패를 선택합니다. Windows NT Explorer 열고 하드 드라이브의 루트를 선택합니다. 마우스 오른쪽 단추를 클릭하고 속성을 선택합니다. 보안 탭을 선택하고 감사 단추를 누릅니다. 관심 있는 사용자(ASP 페이지 또는 IUSR_machine에서 반환된 사용자)를 추가하고 모든 실패 검사 상자를 선택합니다. 이러한 설정을 모든 폴더에 적용해야 합니다. 이벤트 뷰어 사용하여 액세스 실패를 확인합니다(로그 메뉴에서 보안 선택). 변경이 완료되면 감사를 해제해야 합니다.

참고 1: Jet는 SYSTEM TEMPTMP 환경 변수를 사용하여 JET 작업 중에 만들어진 임시 파일의 위치를 지정합니다. 기본적으로 이러한 환경 변수는 사용자에 대해 정의되며 시스템 전체 설정이 아닙니다. 이러한 작업을 설정하려면 다음 두 작업 중 하나를 수행할 수 있습니다.

  • 옵션 1. autoexec.bat에서 다음 두 줄과 비슷한 항목을 추가합니다.

    Set TEMP=C:\Temp
    Set TMP =C:\Temp
    
  • 옵션 2. 내 컴퓨터를 마우스 오른쪽 단추로 클릭합니다.

    1. 속성을 클릭하고 환경 탭을 선택합니다.

    2. 시스템 변수 목록 상자(맨 위에 있는 항목)에서 항목을 클릭합니다.

    3. 변수 및 값 편집 컨트롤에 다음을 입력합니다.

      Variable = Temp
      Value = C:\Temp
      
    4. 설정을 클릭합니다. 이제 시스템 변수 목록에 추가된 것을 볼 TEMP 수 있습니다.

    5. 변수에 대한 프로세스를 반복합니다 TMP .

    6. 변경 내용이 적용되도록 컴퓨터를 다시 부팅합니다. 또한 Access 데이터베이스 드라이버를 사용할 때 임시 파일을 만들려면 WinNT 디렉터리에 대한 CHANGE 권한이 필요한 것으로 확인되었습니다IUSR_<machine>.

참고 2: 기본적으로 ASP는 단일 스레드 아파트 클라이언트를 만듭니다. 즉, 단일 스레드 아파트 인프로크 서버만 IIS에 의해 전달되는 원하는 보안 컨텍스트가 제공됩니다. 다른 모든 스레딩 모델은 SYSTEM 컨텍스트에서 실행됩니다. 즉, 단일 스레딩 모델을 사용하는 DLL은 인증된 사용자처럼 의도한 것이 아니라 SYSTEM의 보안 컨텍스트에서 시작됩니다.