다음을 통해 공유


관리자 권한으로 실행

애플리케이션에서 실행해야 하는 계정 유형을 설정하는 첫 번째 단계는 애플리케이션에서 사용할 리소스와 호출할 권한 있는 API를 검사하는 것입니다. 애플리케이션 또는 애플리케이션의 상당 부분이 관리자 권한이 필요하지 않다는 것을 알게 될 수 있습니다. 마이클 하워드와 데이비드 르블랑의 보안 코드 작성은 이 평가를 수행하는 방법에 대한 훌륭한 설명을 제공하며 매우 권장됩니다. (일부 언어 및 국가에서는 이 리소스를 사용할 수 없습니다.)

다음 방법 중 하나를 사용하여 악의적인 공격에 덜 노출되는 애플리케이션에 필요한 권한을 제공할 수 있습니다.

  • 권한이 적은 계정으로 실행합니다. 이 작업을 수행하는 한 가지 방법은 PrivilegeCheck 를 사용하여 토큰에서 사용할 수 있는 권한을 확인하는 것입니다. 사용 가능한 권한이 현재 작업에 적합하지 않은 경우 해당 코드를 사용하지 않도록 설정하고 사용자에게 관리자 권한이 있는 계정에 로그온하도록 요청할 수 있습니다.
  • 관리자 권한이 필요한 별도의 애플리케이션 함수로 분리합니다. 사용자에게 RunAs 명령을 실행하는 바로 가기를 제공할 수 있습니다. 바로 가기를 설정하는 방법에 대한 자세한 지침은 도움말에서 "runas"를 검색합니다. 프로그래밍 방식으로 애플리케이션의 AppId 키 레지스트리 키에서 RunAs 명령을 구성할 수 있습니다.
  • CredUIPromptForCredentials(GUI) 또는 CredUICmdLinePromptForCredentials(명령줄)를 호출하여 사용자를 인증하여 사용자 이름과 암호를 가져옵니다. 예를 들어 사용자에게 자격 증명 요청 을 참조하세요.
  • 사용자를 가장합니다. System과 같은 권한이 높은 계정에서 시작하는 프로세스는 ImpersonateLoggedOnUser 또는 유사한 Impersonate 함수를 호출하여 사용자 계정을 가장하여 권한 수준을 줄일 수 있습니다. 그러나 RevertToSelf에 대한 호출이 스레드에 삽입되면 프로세스는 원래 시스템 권한으로 돌아갑니다.

애플리케이션이 관리자 권한이 있는 계정으로 실행되어야 하고 관리자 암호가 소프트웨어 시스템에 저장되어야 한다고 결정한 경우 이 작업을 안전하게 수행하는 방법은 암호 처리를 참조하세요.