2015년 3월 18일 수요일

오라클의 개념_10

  ㅇ ㅂㅇ

롤 관리


룰이란 ?
 Oracle에서는 롤을 통해 권한 관리를 쉽게 제어할 수 있습니다. 롤이란 사용자나 다른 롤에 부여된 관련 권한의 명명된 그룹이며 데이터베이스의 권한 관리를 용이하게 하기 위해 고안되었습니다.

롤특성
  • 시스템 권한을 부여하고 취소할 때와 동일한 명령을 사용하여 사용자에게 권한을 부여하고 취소할 수 있습니다.
  • 롤을 임의의 사용자 또는 롤에 부여할 수 있지만 롤 자체에 부여하거나 순환적으로 부여할 수는 없습니다.
  • 시스템 및 객체 권한으로 구성될 수 있습니다.
  • 롤을 부여받은 각 사용자에 대해 활성화 및 비활성화될 수 있습니다.
  • 활성화하려면 암호가 필요할 수 있습니다.
  • 각 롤 이름은 기존 사용자 이름 및 롤 이름과 다른 고유한 이름이어야 합니다.
  • 롤은 사용자가 소유하지 않으며 스키마에 존재하지 않습니다.
  • 설명은 데이터 딕셔너리에 저장됩니다.

> 사용자가 보는 롤 : 롤(=System privilege 시스템 권한 )
> 권한이 보는 롤 : 롤(=사용자와 동일한 것)
> 순환 부여는 불가능 하다 ( A롤 -> B롤, B롤 -> C롤 까진 가능 / C롤 -> A롤 은 불가)


룰의 이점
권한 관리 용이성
 롤을 사용하여 권한 관리를 단순화합니다. 동일한 권한 집합을 여러 사용자에게 부여하는 것이 아니라 권한을 롤에 부여한 다음 그 롤을 각 사용자에게 부여할 수 있습니다.
동적 권한 관리
 롤과 연관된 권한을 수정하면 그 롤을 부여받은 모든 사용자는 자동으로 즉시 수정된 권한을 얻게 됩니다.
권한의 선택적 가용성
 롤을 활성화 및 비활성화하여 권한을 일시적으로 활성화 및 비활성화할 수 있습니다. 롤의 활성화는 사용자가 해당 롤을 부여받았는지 확인하는 데도 사용할 수 있습니다.
운영 체제를 통한 부여
 운영 체제 명령이나 유틸리티를 사용하여 데이터베이스에서 사용자에게 롤을 할당할 수 있습니다.


룰 생성
 CREATE ROLE 문을 사용하여 롤을 생성합니다. 롤을 생성하려면 CREATE ROLE 시스템
권한이 있어야 합니다. NOT IDENTIFIED, IDENTIFIED EXTERNALLY 또는 BY password인 롤을 생성하려면 ADMIN 옵션으로 부여해야 합니다.
다음 명령을 사용하여 롤을 생성합니다.
CREATE ROLE role [NOT IDENTIFIED | IDENTIFIED
{BY password | EXTERNALLY | GLOBALLY | USING package}]
설명:
role: 롤 이름입니다.
NOT IDENTIFIED: 롤을 활성화할 때 확인이 필요하지 않음을 나타냅니다.
IDENTIFIED: 롤을 활성화할 때 확인이 필요함을 나타냅니다.
BY password: 롤을 활성화할 때 사용자가 지정해야 하는 암호를 제공합니다.
USING package: 인증된 패키지를 사용하는 응용 프로그램에 의해서만 활성화될 수 있
는 응용 프로그램 롤을 생성합니다.
EXTERNALLY: 롤을 활성화하기 전에 운영 체제나 협력업체 서비스 등의 외부 서비스에서
사용자를 인증해야 함을 나타냅니다.
GLOBALLY: SET ROLE 문을 사용하여 롤을 활성화하기 전이나 로그인할 때 기업 디렉토리
서비스에서 롤을 사용할 수 있도록 사용자를 인증해야 함을 나타냅니다.

> password를 통해 롤을 활성화/비활성화 시키는 이유는?
 - 과거 한개의 유저 계정을 통해서 다수의 사용자가 이용을 하여 각 역할을 담당하는 사용자가 사용하는 롤을 해당 사용자가 사용시 활성화 시키고 그 밖에 다른 롤은 비활성화 시켜 두어 사용했기 때문이다.


미리 정의된 룰
 위에 나열한 롤은 데이터베이스 생성 스크립트를 실행할 때 오라클 데이터베이스에 대해
자동으로 정의됩니다. CONNECT, RESOURCE 및 DBA 롤은 이전 버전의 Oracle 서버에 대한
역호환성을 위해 제공됩니다.
EXP_FULL_DATABASE 및 IMP_FULL_DATABASE 롤은 Import 및 Export 유틸리티를 편리하게 사용하기 위해 제공됩니다.
DELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE 및 SELECT_CATALOG_ROLE 롤은 데이터 딕셔너리 뷰 및 패키지를 액세스하기 위해 제공됩니다. 이러한 롤은 DBA 롤을 가지고 있지 않지만 데이터 딕셔너리의 뷰와 테이블을 액세스해야 하는 사용자에게 부여될 수 있습니다.
기타특수롤
 Oracle 서버에서는 데이터베이스를 관리할 수 있도록 권한을 부여하는 기타 롤도 생성합니
다. 여러 운영 체제에서는 이러한 롤을 OSOPER 및 OSDBA라고 하며 운영 체제에 따라 그 이름이 다를 수도 있습니다.
기타 롤은 데이터베이스와 함께 제공되는 SQL 스크립트로 정의됩니다. 예를 들어,
AQ_ADMINISTRATOR_ROLE은 고급 대기열을 관리할 수 있는 권한을 제공합니다.
AQ_USER_ROLE은 이제 사용되지 않으나 주로 릴리스 8.0과의 호환성을 위해 유지됩니다.


룰 수정
 룰은 인증 방식을 변경할 때만 수정할 수 있습니다. ADMIN 옵션으로 롤을 부여받거나 ALTER ANY ROLE 시스템 권한이 있어야 합니다.
다음 명령을 사용하여 롤을 수정합니다.
ALTER ROLE role {NOT IDENTIFIED | IDENTIFIED
 {BY password |USING package| EXTERNALLY | GLOBALLY }};
설명:
   role: 롤 이름입니다.
   NOT IDENTIFIED: 롤을 활성화할 때 확인이 필요하지 않음을 나타냅니다.
   IDENTIFIED: 롤을 활성화할 때 확인이 필요함을 나타냅니다.
   BY password: 롤을 활성화할 때 사용하는 암호를 제공합니다.
   EXTERNALLY: 롤을 활성화하기 전에 운영 체제나 협력업체 서비스 등의 외부 서비스에서 사용자를 인증해야 함을 나타냅니다.
   GLOBALLY: SET ROLE 문을 사용하여 롤을 활성화하기 전이나 로그인할 때 기업 디렉토리 서비스에서 롤을 사용할 수 있도록 사용자를 인증해야 함을 나타냅니다.


룰 할당
 사용자에게 롤을 부여하려면 사용자에게 시스템 권한을 부여할 때와 동일한 구문 명령을사용합니다.
  GRANT role [, role ]...
  TO {user|role|PUBLIC}
  [, {user|role|PUBLIC} ]...
  [WITH ADMIN OPTION]
설명:
 role: 부여받을 롤의 모음입니다.
 PUBLIC: 롤을 모든 사용자에게 부여합니다.
 WITH ADMIN OPTION: 롤을 부여받은 사람이 그 롤을 다른 사용자나 롤에 부여할 수 있도록 합니다. (이 옵션을 사용하여 롤을 부여한 경우 롤을 부여받은 사람은 다른 사용자에게 롤을 부여 및 취소할 수 있고 롤을 변경하거나 삭제할 수 있습니다.)
 롤을 생성한 사용자에게는 ADMIN OPTION을 통해 롤이 암시적으로 할당되며 ADMIN OPTION을 통해 롤을 부여받지 않은 사용자가 다른 사용자에게 롤을 부여하고 취소하려면GRANT ANY ROLE 시스템 권한이 필요합니다.

> 순환 부여는 불가능 하다 ( A롤 -> B롤, B롤 -> C롤 까진 가능 / C롤 -> A롤 은 불가)


응용 프로그램 롤(단위업무, 기능, 업무 롤)
 CREATE ROLE 문에 있는 USING 패키지 절은 응용 프로그램 롤을 생성합니다. 응용 프로그램 롤은 인증된 PL/SQL 패키지를 사용하는 응용 프로그램에 의해서만 활성화됩니다. 응용 프로그램 개발자는 응용 프로그램 내부에 암호를 포함하여 롤을 보호할 필요가 없습니다. 그 대신 응용 프로그램 롤을 생성하고 롤을 활성화하도록 인증될 PL/SQL 패키지를 지정합니다.
   SQL> CREATE ROLE admin_role IDENTIFIED USING hr.employees;
위 예에서 admin_role은 응용 프로그램 롤이며 hr.employee PL/SQL 패키지 내부에 정의된 모듈에 의해서만 활성화될 수 있습니다.


룰 활성화 및 비활성화
 롤과 연관된 권한을 일시적으로 활성화 및 비활성화하려면 롤을 활성화 및 비활성화합니다. 롤을 활성화하려면 먼저 해당 롤을 사용자에게 부여해야 합니다.
 롤을 활성화하면 해당 롤에 부여된 권한을 사용할 수 있습니다. 롤을 비활성화하면 사용자또는 그 사용자에게 활성화된 다른 롤에 직접 권한을 부여하지 않는 한 이 롤과 연관된 권한을 사용할 수 없습니다. 롤은 세션 동안 활성화되며 다음 세션에서 사용자의 활성 롤은 기본 롤로 복귀됩니다.
 활성화될롤지정
 SET ROLE 명령과 DBMS_SESSION.SET_ROLE 프로시저를 사용하면 이 명령에 포함되는 롤은 모두 활성화되고 그 밖의 다른 롤은 모두 비활성화됩니다. PL/SQL 명령을 허용하는 모든 도구나 프로그램에서는 롤을 활성화할 수 있지만 내장 프로시저에서는 롤을 활성화 할 수 없습니다.
 ALTER USER...DEFAULT ROLE 명령을 사용하여 로그인 시 활성화될 롤을 지정할 수 있습니다. 다른 모든 롤은 비활성화됩니다.
 롤을 활성화하려면 암호가 필요할 수 있습니다. 롤을 활성화하려면 SET ROLE 명령에 암호가 포함되어야 합니다. 사용자에게 할당된 기본 롤에는 암호가 필요하지 않으며 암호가 없는 롤과 동일하게 로그인 시 활성화됩니다.

제한사항:
 처음으로 프로시저를 호출하도록 허용하는 보안 도메인(권한 집합)이 변경될 수 있으므로내장 프로시저에서는 롤을 활성화할 수 없습니다. 따라서 PL/SQL에서 익명 블록 및 응용프로그램 프로시저(예를 들어, Oracle Forms 프로시저)에서는 롤을 활성화 및 비활성화할 수 있지만 내장 프로시저에서는 이렇게 할 수 없습니다.
 내장 프로시저에 SET ROLE 명령이 포함될 경우 실행 시 다음 오류가 발생합니다.
  ORA-06565: cannot execute SET ROLE from within stored procedure


룰 활성화 및 비활성화
 SET ROLE 명령은 사용자에게 부여된 모든 롤을 비활성화합니다.
  SET ROLE {role [ IDENTIFIED BY password ]
   [, role [ IDENTIFIED BY password ]]...
   | ALL [ EXCEPT role [, role ] ...]
   | NONE }
설명:
role: 롤 이름입니다.
IDENTIFIED BY password: 롤을 활성화할 때 필요한 암호를 제공합니다.
ALL: EXCEPT 절에 나열된 것을 제외하고 현재 사용자에게 부여된 모든 롤을 활성화합니다. (암호가 있는 롤을 활성화하려면 이 옵션을 사용할 수 없습니다.)
EXCEPT role: 이러한 롤을 활성화하지 않습니다.
NONE: 현재 세션 동안 모든 롤을 비활성화합니다. (사용자에게 직접 부여된 권한만 활성화
됩니다.)
EXCEPT 절이 없는 ALL 옵션은 활성화된 모든 롤에 암호가 없을 때만 작동합니다.


사용자로부터 룰 제거
 사용자의 롤을 취소하려면 SQL 문 REVOKE를 사용합니다. 롤에 대한 ADMIN 옵션을 가진사용자는 다른 모든 데이터베이스 사용자나 롤에서 롤을 취소할 수 있습니다. GRANT ANY ROLE 권한을 가진 사용자도 모든 롤을 취소할 수 있습니다.
REVOKE role [, role ]
      FROM {user|role|PUBLIC}
      [, {user|role|PUBLIC} ]
설명
role: 취소할 롤 또는 롤을 취소할 롤입니다.
user: 시스템 권한 또는 롤이 취소될 사용자입니다.
PUBLIC: 모든 사용자의 권한이나 롤을 취소합니다.

>PUBLIC 옵션은 PUBLIC 옵션으로 권한을 받은 사용자의 권한을 제거함


룰 제거
 데이터베이스의 롤을 제거하려면 다음 구문을 사용합니다.
   DROP ROLE role
 롤이 삭제될 때 Oracle 서버에서는 롤을 부여받은 모든 사용자와 롤에서 이 롤을 취소하고데이터베이스에서도 제거합니다.
 롤을 삭제하려면 ADMIN OPTION을 사용하여 롤을 부여받았거나 DROP ANY ROLE 시스템 권한을 갖고 있어야 합니다.


룰 생성 지침
 롤에는 작업 수행에 필요한 권한이 포함되므로 롤 이름은 대개 응용 프로그램 작업이나 작업 제목입니다. 슬라이드의 예는 롤 이름에 응용 프로그램 작업과 작업 제목을 모두 사용하고 있습니다. 다음 단계를 사용하여 사용자 롤을 생성, 할당 및 부여합니다.
  1. 각 응용 프로그램 작업에 대해 롤을 생성하십시오. 응용 프로그램 롤의 이름은 PAYROLL과 같이 응용 프로그램 내의 작업에 대응합니다.
  2. 작업 수행에 필요한 권한을 응용 프로그램 롤에 할당하십시오.
  3. 각 사용자 유형에 대해 롤을 생성하십시오. 사용자 롤의 이름은 PAY_CLERK과 같이 작업 제목에 대응합니다.
  4. 사용자 롤에 응용 프로그램 롤을 부여하십시오.
  5. 사용자에게 사용자 롤을 부여하십시오.
 응용 프로그램 수정 시 급여 작업을 수행하기 위해 새 권한이 필요할 경우 DBA만 응용 프로그램 롤인 PAYROLL에 새 권한을 할당해야 합니다. 현재 이 작업을 수행 중인 모든 사용자가 새 권한을 받게 됩니다.

> 사용자 롤 -> [직무, 직위 롤] , 응용 프로그램 롤 -> [단위 업무 롤, 기능 롤, 업무 롤]


암호 및 기본 룰 사용 지침
 암호는 롤을 활성화할 때 추가 보안 레벨을 제공합니다. 예를 들어, PAY_CLERK 롤을 사용
하여 수표를 발행할 수 있으므로 이 롤을 활성화할 때 사용자는 응용 프로그램에서 암호를
입력해야 합니다.
암호는 응용 프로그램을 통해서만 롤을 활성화할 수 있습니다. 이 기법은 위의 예제에 나와
있습니다.
  • DBA는 사용자에게 PAY_CLERK 및 PAY_CLERK_RO 롤을 부여했습니다.
  • PAY_CLERK에는 급여 담당자 기능 수행에 필요한 모든 권한을 부여했습니다.
  • PAY_CLERK_RO(RO는 읽기 전용을 나타냄)에는 급여 담당자 기능 수행에 필요한 테이블의 SELECT 권한만 부여했습니다.
  • PAY_CLERK이 기본 롤이 아니고 사용자가 PAY_CLERK에 대한 암호를 모르기 때문에 사용자는 SQL*Plus에 로그인하여 질의를 수행할 수는 있지만 데이터를 수정할 수는 없습니다.
  • 사용자가 급여 응용 프로그램에 로그인할 때 암호를 제공하여 PAY_CLERK 롤을 활성화할 수 있습니다. 이 롤은 프로그램에 암호화되어 프롬프트가 표시되지 않습니다.


룰 정보 질의
사용자에게 부여한 권한 정보를 포함하는 여러 데이터 딕셔너리 뷰에는 롤에 암호가 필요
한지 여부에 대한 정보도 포함됩니다.

SQL> SELECT role, password_required
  2     FROM dba_roles;

ROLE                               PASSWORD
------------------------------ ---------------
CONNECT                               NO
RESOURCE                              NO
DBA                                        NO
SELECT_CATALOG_ROLE          NO
EXECUTE_CATALOG_ROLE        NO
DELETE_CATALOG_ROLE          NO
IMP_FULL_DATABASE              NO
EXP_FULL_DATABASE              NO
SALES_CLERK                         YES
HR_CLERK                        EXTERNAL






댓글 없음:

댓글 쓰기