Java 2 보안에 대한 액세스 제어 예외

Java™ 2 보안 동작은 해당 보안 정책으로 지정됩니다. 보안 정책은 액세스 가능한 시스템 자원 특정 코드 베이스 및 이를 서명해야 하는 사용자를 지정하는 액세스 제어 매트릭스입니다. Java 2 보안 정책은 선언 가능하며 java.security.AccessController.checkPermission 메소드로 적용됩니다.

다음 예는 java.security.AccessController.checkPermission 메소드 알고리즘을 보여줍니다. 전체 알고리즘에 대해서는 보안: Java 2 보안 검사 권한 알고리즘에서 학습 관련 기사를 참조하십시오.

i = m;
while (i > 0) {
if (caller i's domain does not have the permission)
throw AccessControlException;
else if (caller i is marked as privileged)
return;
i = i - 1;
};

알고리즘에서는 호출 스택의 모든 클래스 또는 호출자가 java.security.AccessController.checkPermission 메소드 수행 시에 권한이 있어야 하며 그렇지 않으면 요청이 거부되고 java.security.AccessControlException 예외가 작성됩니다. 그렇지만 호출자가 권한 있음으로 표시되고 클래스(호출자)에게 해당 권한이 있는 경우 알고리즘은 호출 스택을 리턴하고 전체 호출 스택을 순회할 필요가 없습니다. 후속 클래스(호출자)에게는 필요한 권한이 부여될 필요가 없습니다.

호출 스택의 특정 클래스가 java.security.AccessController.checkPermission 메소드 중에 필수 권한이 누락된 경우 java.security.AccessControlException 예외가 작성됩니다. java.security.AccessControlException 예외에 대해 두 개의 가능한 해결책은 다음과 같습니다.
  • 애플리케이션이 Java 2 보안 보호 API(Application Programming Interface)를 호출 중인 경우 필요한 권한을 Java 2 보안 정책에 부여하십시오. 애플리케이션이 Java 2 보안 보호 API를 직접 호출하지 않는 경우 필요한 권한은 Java 2 보안 보호 자원에 액세스 중인 써드파티 API의 부작용으로 인해 발생됩니다.
  • 애플리케이션에 필요한 권한이 부여되면 필요한 이상의 액세스를 확보합니다. 이런 경우 Java 2 보안 보호 자원에 액세스하는 써드파티 코드가 권한 있음으로 올바르게 표시되지 않을 수도 있습니다.

호출 스택 예

이 호출 스택 예는 애플리케이션 코드가 비밀번호 업데이트를 위해 써드파티 API 유틸리티 라이브러리를 사용하는 위치를 표시합니다. 다음 예는 위치를 표시하기 위해 있습니다. 권한 있음으로 코드를 표시하는 위치 의사결정은 애플리케이션에 따라 다르며 모든 상황에서 고유합니다. 이 의사결정 시에는 올바른 판단을 위해 많은 도메인 지식과 보안에 대한 전문지식이 필요합니다. 이 주제에 대해 올바른 정보를 제공하는 몇 개의 서적이 있습니다. 자세한 정보는 이런 자료를 참조하도록 권장됩니다.
이 호출 스택 예는 애플리케이션 코드가 비밀번호 업데이트를 위해 써드파티 API 유틸리티 라이브러리를 사용하는 위치를 표시합니다. 다음 예는 위치를 표시하기 위해 있습니다. 권한 있음으로 코드를 표시하는 위치 의사결정은 애플리케이션에 따라 다르며 모든 상황에서 고유합니다. 이 의사결정 시에는 올바른 판단을 위해 많은 도메인 지식과 보안에 대한 전문지식이 필요합니다.

PasswordUtil 유틸리티를 사용하여 사용자의 비밀번호를 변경할 수 있습니다. 유틸리티는 이전 비밀번호와 새 비밀번호를 두 번 입력하여 올바른 비밀번호가 입력되도록 확인합니다. 이전 비밀번호가 비밀번호 파일에 저장된 비밀번호와 일치하면 새 비밀번호는 저장되고 비밀번호 파일이 업데이트됩니다. 스팩 프레임 중 하나도 권한 있음으로 표시되지 않는 경우를 가정해 보십시오. java.security.AccessController.checkPermission 알고리즘에 따라 호출 스택의 모든 클래스에게 비밀번호 파일에 대해 쓰기 권한이 부여되지 않으면 애플리케이션이 실패합니다. 클라이언트 애플리케이션은 비밀번호 파일을 직접 쓰고 임의로 비밀번호를 업데이트하는 권한이 없습니다.

그렇지만 PasswordUtil.updatePasswordFile 메소드가 권한 있음으로 비밀번호에 액세스하는 코드를 표시하면 권한 검사 알고리즘은 PasswordUtil 클래스에 권한이 부여된 경우 필수 권한에 대해 PasswordUtil.updatePasswordFile 메소드를 호출하는 클래스에서 필수 권한을 검사하지 않습니다. 클라이언트 애플리케이션은 비밀번호 파일에 쓰기 위한 권한을 부여하지 않고도 비밀번호를 성공적으로 업데이트할 수 있습니다.

코드를 권한 있음으로 표시하는 기능은 매우 융통성있는 강력한 기능입니다. 이 기능이 잘못 사용되면 시스템의 전체 보안이 위험하고 보안 구멍이 생길 수 있습니다. 권한 있음으로 코드를 표시하는 기능은 주의해서 사용하십시오.

java.security.AccessControlException 예외에 대한 해결책

이전에 설명한 것처럼 java.security.AccessControlException 예외를 해결하는 두 가지의 접근 방식이 있습니다. 다음 해결책 중 가장 적합한 것을 판별하기 위해 개별적으로 이 예외를 판단하십시오.
  1. 애플리케이션에 누락된 권한 부여.
  2. 문제 및 위험을 고려한 후 일부 코드에 권한 있음으로 표시.

주제 유형을 표시하는 아이콘 개념 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=csec_access
파일 이름:csec_access.html