권한

권한은 사용자 또는 그룹 계정과 같은 계정의 권한으로 시스템 종료, 디바이스 드라이버 로드 또는 시스템 시간 변경과 같은 로컬 컴퓨터에서 다양한 시스템 관련 작업을 수행할 수 있습니다. 권한은 두 가지 방법으로 액세스 권한과 다릅니다.

  • 권한은 시스템 리소스 및 시스템 관련 작업에 대한 액세스를 제어하는 반면 액세스 권한은 보안 개체에 대한 액세스를 제어합니다.
  • 시스템 관리자는 사용자 및 그룹 계정에 권한을 할당하는 반면, 시스템은 개체의 DACL에서 ACE에 부여된 액세스 권한에 따라 보안 개체에 대한 액세스를 부여하거나 거부합니다.

각 시스템에는 사용자 및 그룹 계정에서 보유한 권한을 저장하는 계정 데이터베이스가 있습니다. 사용자가 로그온하면 시스템에서 사용자 또는 사용자가 속한 그룹에 부여된 권한 목록을 포함하여 사용자의 권한 목록이 포함된 액세스 토큰 을 생성합니다. 권한은 로컬 컴퓨터에만 적용됩니다. 도메인 계정은 다른 컴퓨터에서 서로 다른 권한을 가질 수 있습니다.

사용자가 권한 있는 작업을 수행하려고 할 때 시스템은 사용자의 액세스 토큰을 확인하여 사용자가 필요한 권한을 보유하는지 여부를 확인하고, 필요한 경우 권한이 활성화되어 있는지 확인합니다. 사용자가 이러한 테스트에 실패하면 시스템에서 작업을 수행하지 않습니다.

액세스 토큰에 보관된 권한을 확인하려면 사용하도록 설정된 권한도 나타내는 GetTokenInformation 함수를 호출합니다. 대부분의 권한은 기본적으로 사용하지 않도록 설정됩니다.

Windows API는 다양한 권한을 식별하기 위해 SE_ASSIGNPRIMARYTOKEN_NAME 같은 문자열 상수 집합을 정의합니다. 이러한 상수는 모든 시스템에서 동일하며 Winnt.h에 정의됩니다. Windows 정의한 권한의 표는 권한 상수(Privilege Constants)를 참조하세요. 그러나 액세스 토큰의 권한을 가져오고 조정하는 함수는 LUID 유형을 사용하여 권한을 식별합니다. 권한에 대한 LUID 값은 한 컴퓨터에서 다른 컴퓨터로, 동일한 컴퓨터에서 부팅 간에 다를 수 있습니다. 문자열 상수 중 하나에 해당하는 현재 LUID 를 얻으려면 LookupPrivilegeValue 함수를 사용합니다. LookupPrivilegeName 함수를 사용하여 LUID를 해당 문자열 상수로 변환합니다.

시스템은 각 권한을 설명하는 표시 이름 집합을 제공합니다. 이는 사용자에게 권한에 대한 설명을 표시해야 하는 경우에 유용합니다. LookupPrivilegeDisplayName 함수를 사용하여 권한에 대한 문자열 상수에 해당하는 설명 문자열을 검색합니다. 예를 들어 미국 영어를 사용하는 시스템에서 SE_SYSTEMTIME_NAME 권한의 표시 이름은 "시스템 시간 변경"입니다.

PrivilegeCheck 함수를 사용하여 액세스 토큰에 지정된 권한 집합이 있는지 여부를 확인할 수 있습니다. 이는 주로 클라이언트를 가장하는 서버 애플리케이션에 유용합니다.

시스템 관리자는 사용자 관리자와 같은 관리 도구를 사용하여 사용자 및 그룹 계정에 대한 권한을 추가하거나 제거할 수 있습니다. 관리자는 프로그래밍 방식으로 LSA( 로컬 보안 기관 ) 함수를 사용하여 권한을 사용할 수 있습니다. LsaAddAccountRightsLsaRemoveAccountRights 함수는 계정에서 권한을 추가하거나 제거합니다. LsaEnumerateAccountRights 함수는 지정된 계정에서 보유한 권한을 열거합니다. LsaEnumerateAccountsWithUserRight 함수는 지정된 권한을 보유하는 계정을 열거합니다.

권한 부여 상수

C++에서 권한 사용 및 사용 안 함