2020. 7. 1.

[Oracle] 16장 권한 관리


목표

단원을 마치면 다음을 수행할 있습니다.
  • 시스템 객체 권한 식별
  • 권한 부여 취소

*권한 관리

Oracle 사용자 권한의 유형:
  • 시스템 권한 : 사용자가 데이터베이스에서 특정 작업을 수행할 있도록 합니다.
  • 객체 권한 : 사용자가 특정 객체를 액세스 조작할 있도록 합니다.

권한
권한은 특정 유형의 SQL 문을 실행하거나 다른 사용자의 객체를 액세스할 수 있는 권한입니다. 이 권한으로 다음 작업을 수행할 수 있습니다.
  • 데이터베이스 접속
  • 테이블 생성
  • 다른 사용자의 테이블에서 행 선택
  • 다른 사용자의 내장 프로시저 실행
시스템 권한
사용자는 각 시스템 권한을 사용하여 특정 데이터베이스 작업이나 데이터베이스 작업 클래스를 수행할 수 있습니다. 예를 들어, 테이블스페이스 생성 권한은 시스템 권한입니다.
객체권한
사용자는 각 객체 권한을 사용하여 테이블, , 시퀀스, 프로시저, 함수 또는 패키지 등의 특정 객체에 특정 작업을 수행할 수 있습니다.
DBA는 다음과 같이 권한을 제어합니다.
  • 사용자에게 한 유형의 작업을 수행할 권한 제공
  • 시스템 기능을 수행할 수 있는 액세스 부여 및 취소
  • 사용자나 롤에 직접 권한 부여
  • 모든 사용자(PUBLIC)에게 권한 부여

*시스템 권한

100 이상의 구분 시스템 권한이 있습니다.
권한의 ANY 키워드는 사용자가 임의의 스키마에서 권한을 가짐을 의미합니다.
GRANT 명령은 사용자 또는 사용자 그룹에 권한을 추가합니다.
REVOKE 명령은 권한을 삭제합니다.

시스템 권한
권한은 다음과 같이 분류할 수 있습니다.
  • CREATE SESSION CREATE TABLESPACE와 같이 시스템 작업을 가능하게 하는 권한
  • CREATE TABLE과 같이 사용자가 소유한 스키마에 있는 객체의 관리를 가능하게하는 권한
  • CREATE ANY TABLE과 같이 임의의 스키마에 있는 객체의 관리를 가능하게 하는권한
권한은 사용자나 롤에 시스템 권한을 추가 및 취소하는 DDL 명령인 GRANT REVOKE 사용하여 제어할 수 있습니다. 롤에 대한 자세한 내용은 "롤 관리" 단원을 참조하십시오.

*시스템 권한: 예제

범위
예제
INDEX
CREATE ANY INDEX
ALTER ANY INDEX
DROP ANY INDEX
TABLE
CREATE TABLE
CREATE ANY TABLE
ALTER ANY TABLE
DROP ANY TABLE
SELECT ANY TABLE
UPDATE ANY TABLE
DELETE ANY TABLE
SESSION
CREATE SESSION
ALTER SESSION
RESTRICTED SESSION
TABLESPACE
CREATE TABLESPACE
ALTER TABLESPACE
DROP TABLESPACE
UNLIMITED TABLESPACE

// 일반사용자에게 any 주면 안된다. 모든 사용자에 DB 접근이 가능해진다.
시스템 권한 : 예제
  • CREATE INDEX라는 권한은 없습니다.
  • CREATE TABLE CREATE INDEX ANALYZE 명령을 포함합니다. 사용자는 테이블스페이스에 대한 할당량을 소유해야 하거나 UNLIMITED TABLESPACE 권한을 부여받았어야 합니다.
  • CREATE TABLE, CREATE PROCEDURE 또는 CREATE CLUSTER 등의 권한은 이러한 객체의 삭제 권한을 포함합니다.
  • UNLIMITED TABLESPACE는 롤에 부여될 수 없습니다.
  • 다른 스키마에서 테이블을 자르기 위해서는 DROP ANY TABLE 권한이 필요합니다.

*시스템 권한 부여

  • GRANT 명령을 사용하여 시스템 권한을 부여하빈다.
  • 권한을 부여받은 사용자는 ADMIN 옵션을 사용하여 시스템 권한을 부여할 습니다.
GRANT CREATE SESSION TO emi;
GRANT CREATE SESSION TO emi WITH ADMIN OPTION;

시스템 권한 : 예제
  • CREATE INDEX라는 권한은 없습니다.
  • CREATE TABLE CREATE INDEX ANALYZE 명령을 포함합니다. 사용자는 테이블스페이스에 대한 할당량을 소유해야 하거나 UNLIMITED TABLESPACE 권한을 부여받았어야 합니다.
  • CREATE TABLE, CREATE PROCEDURE 또는 CREATE CLUSTER 등의 권한은 이러한 객체의 삭제 권한을 포함합니다.
  • UNLIMITED TABLESPACE는 롤에 부여될 수 없습니다.
  • 다른 스키마에서 테이블을 자르기 위해서는 DROP ANY TABLE 권한이 필요합니다.

*시스템 권한 부여
  • GRANT 명령을 사용하여 시스템 권한을 부여합니다.
  • 권한을 부여받은 사용자는 ADMIN 옵션을 사용하여 시스템 권한을 부여할 있습니다.

// 권한을 있지만 사용하지 못한다.

시스템 권한 부여
SQL GRANT를 사용하여 사용자에게 시스템 권한을 부여합니다.
권한을 부여받은 사용자는 ADMIN 옵션을 사용하여 시스템 권한을 다른 사용자에게 부여 할 수 있습니다. ADMIN 옵션을 사용하여 시스템 권한을 부여할 경우에는 주의하십시오. 이러한 권한은 일반적으로 보안 관리자가 가지며 다른 사용자들에게는 거의 부여되지 않습니다.
GRANT {system_privilege|role}
[, {system_privilege|role} ]...
TO {user|role|PUBLIC}
[, {user|role|PUBLIC} ]...
[WITH ADMIN OPTION]
설명:
system_privilege: 부여할 시스템 권한을 지정합니다.
role: 부여할 롤 이름을 지정합니다.
PUBLIC: 모든 사용자에게 시스템 권한을 부여합니다.
WITH ADMIN OPTION: 권한을 부여받은 사람이 그 권한이나 롤을 다른 사용자나 롤에 부여할 수 있게 합니다.

시스템 권한 부여
Oracle Enterprise Manager를사용하여시스템권한부여
OEM Console에서 다음 작업을 수행합니다.
1. Databases > Security > Users로 이동합니다.
2. 권한을 부여받을 사용자를 선택합니다.
3. 콘솔의 세부 사항쪽에서 System Privileges 탭을 누릅니다.
4. 부여하려는 시스템 권한을 선택합니다. 선택 사항으로 Admin Option 상자를 선택합니다.
5. Apply를 누릅니다.


*SYSDBA SYSOPER 권한


// SYSDBA SYSOPER 권한을 포함하여 가지고 있다.

SYSDBA SYSOPER 권한
데이터베이스 관리자만이 관리자 권한으로 데이터베이스에 연결할 수 있어야 합니다. SYSDBA로 연결하면 데이터베이스나 데이터베이스 내의 객체에 작업을 수행할 수 있는 제한되지 않은 권한이 사용자에게 부여됩니다.

*시스템 권한 제한 사항

  • 07_DICTIONARY_ACCESSIBILITY 매개변수
  • SYSTEM 권한의 제한 사항 제어
  • TRUE 설정한 경우 SYS 스키마에 있는 객체에 액세스 가능
  • 기본값은 FALSE이며 경우 임의의 스키마를 액세스할 있는 시스템 권한으로 SYS 스키마에 액세스할 없습니다.

시스템 권한 제한 사항        
Oracle9i의 딕셔너리 보호 방식은 승인되지 않은 사용자가 딕셔너리 객체를 액세스하는 것을 방지합니다. SYSDBA SYSOPER 롤만이 딕셔너리 객체를 액세스할 수 있습니다. 다른 스키마에 있는 객체를 액세스할 수 있는 시스템 권한으로 딕셔너리 객체를 액세스할 수 없습니다. 예를 들어, SELECT ANY TABLE 권한을 가진 사용자는 다른 스키마에 있는 뷰와 테이블을 액세스 할 수 있지만 딕셔너리 객체(기본 테이블, , 패키지 및 동의어)는 선택할 수 없습니다. 매개변수가 TRUE로 설정되어 있으면 SYS 스키마에 있는 객체를 액세스할 수 있습니다. (Oracle7 작업 방식) 이 매개변수가 FALSE로 설정되어 있으면 다른 스키마에 있는 객체를 액세스할 수 있는 시스템 권한으로 딕셔너리 스키마에 있는 객체를 액세스할 수 없습니다. 예를 들어, O7_DICTIONARY_ACCESSIBILITY=FALSE인 경우 SELECT ANY TABLE 문으로 SYS 스키마를 제외한 스키마에 있는 뷰나 테이블을 액세스할 수 있습니다. (딕셔너리는액세스할 수 없습니다.) 시스템 권한 EXECUTE ANY PROCEDURE SYS 스키마를 제외한다른 스키마에 있는 프로시저를 액세스할 수 있습니다.

*시스템 권한 취소

REVOKE 명령을 사용하여 사용자의 시스템 권한 제거
시스템 권한에 대해 ADMIN OPTION 권한이 있는 사용자는 시스템 권한을 취소할 잇음
GRANT 명령을 사용하여 부여받은 권한만 취소할 있음
REVOKE CREATE TABLE FROM emi;

시스템 권한 취소
REVOKE SQL 문을 사용하여 시스템 권한을 취소할 수 있습니다. 시스템 권한에 대해 ADMIN OPTION 권한이 있는 사용자는 다른 데이터베이스 사용자의 권한을 취소할 수 있습니다. 권한을 취소하는 사용자가 원래 권한을 부여한 사용자와 반드시 동일할 필요는 없습니다.
REVOKE {system_privilege|role}
[, {system_privilege|role} ]...
FROM {user|role|PUBLIC}
[, {user|role|PUBLIC} ]...
:
  • REVOKE 명령은 GRANT 명령을 사용하여 직접 부여받은 권한만 취소할 수 있습니다.
  • 시스템 권한 취소는 일부 종속 객체에 영향을 줄 수도 있습니다. 예를 들어, SELECT ANY TABLE 권한을 부여받은 사용자가 다른 스키마에서 테이블을 사용하는 프로시저나 뷰를 생성한 경우에 권한을 취소하면 해당 프로시저나 뷰가 무효화됩니다.

시스템 권한 취소
Oracle Enterprise Manager를사용하여시스템권한취소
OEM Console에서 다음 작업을 수행합니다.
1. Databases > Security > Users로 이동합니다.
2. 권한이 취소될 사용자를 선택합니다.
3. 콘솔의 세부 사항쪽에서 System Privileges 페이지를 누릅니다.
4. 취소될 시스템 권한을 선택한 다음 위쪽 화살표를 누릅니다.
5. Apply를 누릅니다.


*ADMIN OPTION 사용하여 시스템 권한 취소


시스템 권한 취소(계속)
ADMIN OPTION을 사용하여 시스템 권한을 부여했는지 여부와 무관하게 시스템 권한을취소할 때는 연쇄적으로 취소되지 않습니다.
다음 시나리오는 이에 대해 설명합니다.
시나리오
1. DBA ADMIN OPTION을 사용하여 Jeff에게 CREATE TABLE 시스템 권한을 부여합니다.
2. Jeff가 테이블을 생성합니다.
3. Jeff CREATE TABLE 시스템 권한을 Emi에게 부여합니다.
4. Emi가 테이블을 생성합니다.
5. DBA Jeff에게 부여된 CREATE TABLE 시스템 권한을 취소합니다.
결과
Jeff의 테이블은 여전히 존재하지만 새 테이블을 생성할 수 없습니다.
Emi는 여전히 테이블과 CREATE TABLE 시스템 권한을 갖습니다.

*객체 권한


객체 권한
객체 권한이란 특정 테이블, , 시퀀스, 프로시저, 함수 또는 패키지에서 특정 작업을 수행할 수 있는 권한 또는 권리입니다. 각 객체에는 부여 가능한 권한의 특정 집합이 있습니다. 위의 테이블에는 다양한 객체의 권한을 나열합니다. 시퀀스에 적용할 수 있는 권한은 SELECT ALTER밖에 없습니다. UPDATE, REFERENCES INSERT는 갱신 가능한 열의 부분 집합을 지정하여 제한할 수 있습니다. SELECT는 열의 부분 집합이 있는 뷰를 생성하거나 뷰에 SELECT 권한을 부여함으로써 제한할 수 있습니다. 동의어에 대한 부여는 동의어가 참조하는 기본 테이블에 대한 부여로 변환됩니다.
: 이 슬라이드는 전체 객체 권한 목록을 제공하지 않습니다.

*객체 권한 부여

  • GRANT 명령을 사용하여 객체 권한을 부여합니다.
  • 객체가 권한을 부여할 사용자의 스키마에 있어야 하거나 권한을 부여한 사용자가 GRANT OPTION 권한을 가져야합니다.

GRANT EXECUTE ON dbms_output TO jeff;
GRANT UPDATE ON emi.customers TO jeff WITH
GRANT OPTION;

객체 권한 부여
GRANT { object_privilege [(column_list)]
[, object_privilege [(column_list)] ]...
|ALL [PRIVILEGES]}
ON [schema.]object
TO {user|role|PUBLIC}[, {user|role|PUBLIC} ]...
[WITH GRANT OPTION]
설명:
object_privilege: 부여될 객체 권한을 지정합니다.
column_list: 테이블이나 뷰 열을 지정합니다. (INSERT, REFERENCES 또는 UPDATE
권한을 부여할 때만 이것을 지정할 수 있습니다.)
ALL: WITH GRANT OPTION을 부여한 객체에 모든 권한을 부여합니다.
ON object: 권한이 부여될 객체를 식별합니다.
WITH GRANT OPTION: 권한을 부여받은 사람이 객체 권한을 다른 사용자나 롤에 부여할수 있게 합니다.

객체 권한 부여(계속)
GRANT 문을 사용하여 객체 권한을 부여합니다.
권한을 부여하려면 객체가 사용자의 스키마에 있어야 하거나 GRANT OPTION 권한
을 부여받았어야 합니다.
기본적으로 객체를 소유하는 경우 해당 객체의 모든 권한은 자동으로 획득됩니다.
보안 문제가 발생할 수 있을 경우에는 객체 권한을 다른 사용자에게 부여할 때 신중해야 합니다.

객체 권한 부여
Oracle Enterprise Manager를사용하여객체권한부여
OEM Console에서 다음 작업을 수행합니다.
1. Databases > Security > Users로 이동합니다.
2. 권한을 부여받을 사용자를 선택합니다.
3. 콘솔의 세부 사항쪽에서 Object Privileges 탭을 누릅니다.
4. 객체 권한이 부여되는 스키마 및 객체 폴더를 확장합니다.
5. Available Privileges 필드에서 부여될 권한을 선택한 다음 아래 화살표를
누릅니다.
6. 선택 사항으로 Grant Option 확인란을 선택합니다.
7. Apply를 누릅니다.


*객체 권한 취소

REVOKE 명령을 사용하여 객체 권한을 취소합니다.
권한을 취소하는 사용자는 취소될 객체 권한을 부여한 사용자이여야 합니다.

REVOKE SELECT ON emi.orders FROM jeff;

객체 권한 취소
REVOKE 문을 사용하여 객체 권한을 취소합니다. 객체 권한을 취소하려면 권한을 취소하는 사용자가 취소될 객체 권한을 부여한 사용자여야 합니다.
다음 명령을 사용하여 객체 권한을 취소합니다.
REVOKE { object_privilege
[, object_privilege ]...
| ALL [PRIVILEGES] }
ON [schema.]object
FROM {user|role|PUBLIC}
[, {user|role|PUBLIC} ]...
[CASCADE CONSTRAINTS]

객체 권한 취소(계속)
설명:
object_privilege: 취소할 객체 권한을 지정합니다.
ALL: 사용자에게 부여된 모든 객체 권한을 취소합니다.
ON: 객체 권한을 취소할 객체를 식별합니다.
FROM: 객체 권한을 취소할 사용자나 롤을 식별합니다.
CASCADE CONSTRAINTS: 취소 작업이 REFERENCES 또는 ALL 권한을 사용하여 정의한
참조 무결성 제약 조건을 삭제합니다.
제한사항
권한을 부여한 사람은 자신이 권한을 부여했던 사용자의 권한만을 취소할 수 있습니다.

객체 권한 취소
Oracle Enterprise Manager를사용하여객체권한취소
OEM Console에서 다음 작업을 수행합니다.
1. Databases > Security > Users로 이동합니다.
2. 권한이 취소될 사용자를 선택합니다.
3. 콘솔의 세부 사항쪽에서 Object Privileges 탭을 누릅니다.
4. 취소될 객체 권한을 선택한 다음 위쪽 화살표를 누릅니다.
5. Apply를 누릅니다.


*WITH GRANT OPTION 사용하여 객체 권한 취소


객체 권한 취소(계속)
DML 작업과 연관된 시스템 권한을 취소할 때는 연쇄적인 효과가 발생할 수 있습니다. 예를 들어, SELECT ANY TABLE을 부여받은 사용자가 해당 테이블을 사용하는 프로시저를 생성한 경우 사용자의 스키마에 포함된 모든 프로시저는 재컴파일해야 다시 사용할 수 있습니다.
WITH GRANT OPTION을 사용하여 부여한 객체 권한을 취소하면 취소 작업이 연쇄적으로 수행됩니다.
다음 시나리오는 이에 대해 설명합니다.
시나리오
• Jeff에게 GRANT OPTION을 사용하여 EMPLOYEES에 대한 SELECT 객체 권한을 부여
합니다.
• Jeff EMPLOYEES SELECT 권한을 Emi에게 부여합니다.
나중에 SELECT 권한을 Jeff에게서 취소하면 이 취소 작업이 Emi에게도 연쇄적으로
수행됩니다.

*권한 정보 얻기

다음 뷰를 질의하여 권한에 대한 정보를 얻을 있습니다.
  • DBA_SYS_PRIVS
// 일반적으로 하나도 안나오는것이 정상이다.
  • SESSION_PRIVS
  • DBA_TAB_PRIVS
  • DBA_COL_PRIVS

권한 정보 얻기
DBA_SYS_PRIVS: 사용자와 롤에 부여된 시스템 권한을 나열합니다.
SESSION_PRIVS: 사용자가 현재 사용할 수 있는 권한을 나열합니다.
DBA_TAB_PRIVS: 데이터베이스의 모든 객체에 대한 모든 권한 부여를 나열합니다.
DBA_COL_PRIVS: 데이터베이스의 모든 객체-열 부여 권한을 설명합니다.

*요약

단원에서는 다음 항목에 대해 설명했습니다.
  • 시스템 객체 권한 식별
  • 권한 부여 호출

*연습 16 개요

연습에서는 다음 내용을 다룹니다.
  • 사용자를 생성하여 시스템 권한 부여
  • 사용자에게 객체 권한 부여

연습 16 : 권한 관리
1 SYSTEM 사용자로 Emi 사용자를 생성하고 Emi 사용자가 데이터베이스에 로그온하여 자신의 스키마에 객체를 생성할 수 있는 자격을 부여하십시오. 기본 테이블스페이스 DATA01 및 임시 테이블스페이스 TEMP를 할당하고 할당량을 DATA01 1M에 설정하십시오.
2
a lab16_02a.sql 스크립트를 실행하여 Emi로 접속하고 CUSTOMERS1 ORDERS1 테이블을 생성하십시오.
b SYSTEM 사용자로 접속하여 데이터를 SYSTEM.CUSTOMERS에서 Emi CUSTOMERS1 테이블로 복사하십시오. 레코드가 삽입되었는지 확인하십시오.
c SYSTEM 사용자로 Bob에게 Emi CUSTOMERS1 테이블에서 데이터를 선택할 수 있는 자격을 부여하십시오. 결과는?
3 Emi로 재접속하여 Bob에게 Emi CUSTOMERS1 테이블에서 데이터를 선택할 수
있는 자격을 부여하십시오.
또한 Bob이 다른 사용자에게 선택 자격을 부여할 수 있도록 활성화하십시오.
SYSTEM 사용자로 이러한 작업을 기록하는 데이터 딕셔너리 뷰를 검사하십시오.
힌트: DBA_TAB_PRIVS를 사용하여 검사합니다.
4 데이터베이스에 로그온할 수 있는 자격을 가진 diamond1$로 식별된 Trevor
사용자를 생성하십시오.
5 a Bob 사용자로 Trevor Emi CUSTOMERS1 테이블에 액세스할 수 있도록 활성화하십시오.
: 연습 15 8단계의 작업 때문에 암호 만료 메시지가 나타납니다. Bob에게 새 암호인 aaron$1을 부여하십시오.
5
b Emi 사용자로 Emi CUSTOMERS1 테이블을 읽을 수 있는 Bob의 권한을 제거하십시오.
c Trevor 사용자로 Emi CUSTOMERS1 테이블을 질의하십시오. 결과는?
6 Emi가 새 데이터베이스를 생성할 수 있는 자격 없이 데이터베이스를 시작하고 종료할 수 있도록 하십시오.


댓글 없음:

댓글 쓰기