23ai NF(New Feature) 스키마 레벨의 권한 부여 기능
오라클 23ai 버전에서 쓸만한 새로운 기능이 생겨 테스트를 진행해 보았다.
스키마 레벨의 권한 부여 기능이다.
운영 업무 중 권한 부여에 대한 요청이 올 수 있다.
Grant를 통한 권한 부여는 보안 관점에서 사고 방지를 위해 최소로 부여될 필요가 있다.
오라클의 이전 버전에서는 object 단위나 system 레벨로 권한을 부여할 수 있었다.
그러나 현실적으로 필드에서는 ROLE을 생성해 부여하곤 한다.
하지만 이 부분도 현실과 괴리가 있을 수 있다.
비즈니스의 단위가 대개의 경우 schema(스키마) 단위로 이루어지며
운영자, 담당자, 뷰 계정이 이에 걸맞는 권한을 부여 받을 필요가 있을 때가 있다.
이럴 경우 스키마 단위의 권한 부여가 있으면 어떨까라고 현장의 DBA들은 생각했을 수 있다.
본인도 그런 경우가 허다했었다.
그러던 기능이 23ai에 생긴 것이다.
아래 테스트를 진행해 보겠습니다.
스키마 단위의 권한을 부여하기 위해서는 다음의 권한을 가지고 있어야 한다.
GRANT ANY SCHEMA PRIVILEGE / GRANT ANY PRIVILEGE 시스템 권한 필요
테스트 계정으로 HR_TEST / KOREAOUG 계정을 생성하도록 합니다.
1
2
3
4
5
6
7
8
9
10
11
|
SQL> create user koreaoug identified by koreaoug;
사용자가 생성되었습니다.
SQL> grant connect, resource to hr;
권한이 부여되었습니다.
SQL> grant connect, resource to koreaoug;
권한이 부여되었습니다.
|
테스트용 테이블을 생성합니다.
1
2
3
|
SQL> create table hr.HR_TEST1 (col1 varchar2(10));
테이블이 생성되었습니다.
|
이제 KOREAOUG 계정으로 접속해 HR 계정의 HR_TEST1 테이블을 조회해 봅니다.
권한이 없으므로 조회가 되지 않을 것입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
[oracle@kwan23c ~]$ sqlplus koreaoug@kwan23c:1521/FREEPDB1
SQL*Plus: Release 23.0.0.0.0 - Production on 화 7월 9 18:38:54 2024
Version 23.4.0.24.05
Copyright (c) 1982, 2024, Oracle. All rights reserved.
비밀번호 입력:
다음에 접속됨:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.4.0.24.05
SQL> show user
USER은 "KOREAOUG"입니다
SQL> show con_name
CON_NAME
------------------------------
FREEPDB1
SQL> select * from hr.hr_test1;
select * from hr.hr_test1
*
1행에 오류:
ORA-00942: 테이블 또는 뷰 "HR"."HR_TEST1"이(가) 존재하지 않습니다. 도움말:
https://docs.oracle.com/error-help/db/ora-00942/
|
조회가 되지 않습니다.
SYSTEM 계정으로 접속해 스키마 레벨로 권한을 부여합니다.
1
2
3
4
5
|
SQL> show user
USER은 "SYSTEM"입니다
SQL> grant select any table on schema hr to koreaoug;
권한이 부여되었습니다.
|
이제 KOREAOUG 계정으로 다시 조회를 해 봅니다.
1
2
3
|
SQL> select * from hr.hr_test1;
선택된 레코드가 없습니다.
|
데이터는 없지만 조회에 에러가 없습니다.
딕셔너리 뷰를 조회해서 내용을 확인해 봅니다.
1
2
3
4
5
6
7
8
|
SQL> col grantee for a10
SQL> col privilege for a30
SQL> col schema for a10
SQL> select grantee, privilege, schema from dba_schema_privs;
GRANTEE PRIVILEGE SCHEMA
---------- ------------------------------ ----------
KOREAOUG SELECT ANY TABLE HR
|
dba_schema_privs 란 뷰가 추가되었습니다.
스키마 레벨의 권한과 관련해 추가된 뷰는 아래와 같습니다.
1
2
3
4
5
|
DBA_SCHEMA_PRIVS
ROLE_SCHEMA_PRIVS
USER_SCHEMA_PRIVS
SESSION_SCHEMA_PRIVS
V$ENABLEDSCHEMAPRIVS
|
이제 HR 계정에 신규테이블을 생성하고 새로 생성한 테이블이 KOREAOUG 계정에 자동으로 권한이 부여되었는지 확인해 보겠습니다.
1
2
3
|
SQL> create table hr.HR_TEST2 (col1 varchar2(10));
테이블이 생성되었습니다.
|
KOREAOUG 계정에서 신규 생성한 테이블이 조회되는지 확인해 봅니다.
1
2
3
|
SQL> select * from hr.hr_test2;
선택된 레코드가 없습니다.
|
권한을 추가로 부여하지 않아도 신규로 생성된 테이블이 조회가 되는 것을 확인할 수 있습니다.
이제 권한을 회수하고 정상적으로 회수되었는지 체크해 보도록 하겠습니다.
1
2
3
|
SQL> revoke select any table on schema hr from koreaoug;
권한이 취소되었습니다.
|
KOREAOUG 계정에서 회수되었는지 확인해 봅니다.
1
2
3
4
5
6
|
SQL> select * from hr.hr_test1;
select * from hr.hr_test1
*
1행에 오류:
ORA-00942: 테이블 또는 뷰 "HR"."HR_TEST1"이(가) 존재하지 않습니다. 도움말:
https://docs.oracle.com/error-help/db/ora-00942/
|
딕셔너리 뷰를 다시 확인해 보겠습니다.
1
2
3
4
5
6
|
SQL> col grantee for a10
SQL> col privilege for a30
SQL> col schema for a10
SQL> select grantee, privilege, schema from dba_schema_privs;
선택된 레코드가 없습니다.
|
정상적으로 회수된 것을 확인할 수 있습니다.
결론
DBA가 권한 관리를 할 때 스키마 단위로 권한을 부여하는 상황에서,
ROLE로 관리하고, 신규 object 추가 시 권한 부여를 해야 하는 번거로움이 사라지게 되었다.
비즈니스 단위로 한 문장으로 편하게 권한 부여와 회수를 할 수 있게 되었다.
진작에 있어야할 권한 부여 레벨이였던 것 같다.
※ 스키마 권한 부여에서 제외되는 권한
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
» | 23ai NF(New Feature) 스키마 레벨의 권한 부여 기능 | 명품관 | 2024.07.10 | 220 |
2 | Oracle Database 23ai Free Install with Oracle Linux 8.2(리눅스 8.2 버전에서 오라클 23ai 설치) | 명품관 | 2024.06.28 | 354 |
1 | Oracle Database 23ai : Where to find information | 명품관 | 2024.05.08 | 215 |