DB2 패키지에 대한 EXECUTE 권한 부여

SQL을 동적으로 실행하려면 사용자에게는 특정 데이터베이스 오브젝트에 대한 특권이 필요합니다. SQL을 정적으로 실행하려면 사용자에게는 DB2® 패키지에 대한 EXECUTE 특권이 필요합니다. 필요한 특권 범위에 존재하는 이러한 차이점을 사용자는 잘 알아둬야 합니다.

사용자가 인증해야 하는 응용프로그램

응용프로그램에서 사용자가 DriverManager.getConnection(String username, String password) 또는 DataSource.getConnection()을 인증하도록 요청하고 응용프로그램이 SQL문을 동적으로 실행하는 경우, 사용자는 명령문이 참조하는 데이터베이스 오브젝트에 대한 필수 특권을 갖고 있어야 합니다. 그렇지 않으면 사용자는 해당 오브젝트에 대해 SQL문을 실행할 수 없습니다.

응용프로그램이 해당 메소드를 사용하고 SQL문을 정적으로 실행하는 경우, 사용자는 SQL문을 포함하는 패키지에 대한 EXECUTE 특권을 갖고 있어야 합니다. 패키지에 대한 EXECUTE 특권을 갖고 있을 때, 사용자는 해당 패키지에 있는 모든 SQL문을 실행할 수 있습니다. 예를 들어, 사용자가 SQL문 그룹에서 참조되는 하나의 데이터베이스 오브젝트에 대한 특권만 갖고 있을 수 있습니다. 다른 명령문과 함께 해당 SQL문을 패키지에 바인드하고 패키지에 대한 EXECUTE 특권을 사용자에게 부여한 경우, 사용자는 이제 원래 특권을 갖고 있던 하나의 데이터베이스 오브젝트를 참조하는 명령문뿐만 아니라 패키지의 모든 명령문을 실행할 수 있습니다.

따라서 응용프로그램을 설치하는 동안 응용프로그램의 소유자 또는 DBA는 SQL문을 동적으로 실행하기 위해 필요한 특권을 이미 갖고 있는 모든 사용자에게 필요한 패키지에 대한 EXECUTE 특권을 부여할 것인지 여부를 결정해야 합니다. 소유자 또는 DBA가 현재 사용자에게 EXECUTE 권한을 부여하는 경우, 일부 사용자는 이전에 실행할 수 없었던 SQL문을 실행할 수 있게 될 수 있습니다. 소유자 또는 DBA가 사용자에게 EXECUTE 권한을 부여하지 않는 경우, 해당 사용자는 이전에 실행할 수 있었던 SQL문을 실행할 수 없게 됩니다.

여러 응용프로그램이 동일한 DataSource 오브젝트를 사용하고 사용자가 인증해야 하는 경우, 해당 응용프로그램 중 하나에 대해 SQL문을 실행할 수 있는 사용자는 해당 DataSource를 사용하는 모든 응용프로그램에서 SQL문을 실행할 수 있게 될 수 있습니다. 악의가 있는 사용자라면 해당 DataSource 오브젝트를 공유하는 모든 응용프로그램에 의해 실행되는 모든 SQL문을 정적으로 실행하기 위해 클라이언트 최적화를 사용하는 새 응용프로그램을 함께 해킹할 수 있을 것입니다. 따라서 개별 사용자가 특정 응용프로그램 또는 응용프로그램 세트 내의 특정 SQL에 대해서만 액세스할 수 있어야 하는 경우, 해당 보안 레벨은 응용프로그램 서버 또는 기타 컨테이너에 의해 처리되어야 합니다.

DataSource.getConnection()을 사용하는 응용프로그램

이러한 응용프로그램의 경우, 권한은 응용프로그램 서버 또는 기타 컨테이너에 의해 관리됩니다. 응용프로그램에 액세스할 수 있는 사용자는 응용프로그램에서 SQL문을 동적으로 실행하거나 정적으로 실행하거나 관계없이 이를 사용할 수 있습니다.

클라이언트 최적화에 대해 실행되고 SQL문을 바인드하도록 응용프로그램을 구성한 후, DataSource 오브젝트에 지정된 사용자에게서 데이터베이스 오브젝트에 대한 특권을 취소할 수 있습니다. 또한 동일한 사용자에게 응용프로그램의 DB2 패키지에 대한 EXECUTE 특권을 부여할 수도 있습니다. 따라서 응용프로그램에 액세스할 수 있는 모든 사용자는 해당 패키지에 있는 모든 SQL문을 실행할 수 있습니다.


피드백