매번 사용자 권한을 주기위해 검색하는 내가 답답해서 아예 적어두었다. 해당 SQL 문은 모두 SYSDBA 계정으로 실행하였다. SYSDBA 계정 아니더라도 SYSTEM 계정으로도 아래 내용을 할 수 있다. 


사용자 권한 주기

- 현재 생성된 계정 확인

1
SQL> SELECT * FROM ALL_USERS;
cs


- 계정 생성

1
CREATE USER double IDENTIFIED BY doublepass;
cs


- 계정 삭제

1
SQL> DROP USER pasudo CASCADE;
cs


이렇게 위의 내용처럼 계정을 생성하고 이후에 SQL*PLUS 에서 생성한 계정으로 접속을 시도하면 아래와 같이 접속거부가 된다.


1
2
3
4
5
6
SQL> conn double/doublepass
ERROR:
ORA-01045: user DOUBLE lacks CREATE SESSION privilege; logon denied
 
 
Warning: You are no longer connected to ORACLE.
cs


이럴때는 다시 SYSDBA 계정으로 접속해서 CREATE SESSION 이라는 권한을 주어야한다. 

  • SYSDBA 계정 접속 방법

    • C:\Users\Daumsoft> sqlplus "/as sysdba"

    • SQL> conn/as sysdba;

- 사용자 계정에게 CREATE SESSION 권한을 부여 (SYSDBA로 접속)

1
2
3
4
5
6
SQL> GRANT create session to double;
 
Grant succeeded.
 
SQL> conn double/doublepass
Connected.
cs


- 사용자 계정에게 테이블 생성(CREATE TABLE) 권한 부여 (SYSDBA로 접속)

1
2
3
SQL> GRANT create table to double;
 
Grant succeeded.
cs


여기서,

CREATE SESSION 을 통해서 해당 사용자 계정으로 데이터베이스 접속이 가능하다. 하지만 CREATE TABLE 권한을 주었지만 여전히 테이블을 생성할 수 없다. 계속 에러가 나타날 뿐. 


원인

사용자에게 지정된 테이블 스페이스에서 범위를 할당할 수 있는 권한이 없기 때문이다. 따라서 해당 사용자에게 시스템 권한을 부여하거나 혹은 테이블 스페이스에서 사용자 스페이스 자원을 부여해야 한다.


- SYSTEM 으로 접속한 이후에 'DOUBLE' 계정의 테이블 스페이스 확인

1
2
3
4
5
SQL> SELECT username, default_tablespace FROM dba_users WHERE username in 'DOUBLE';
 
USERNAME                                                     DEFAULT_TABLESPACE
------------------------------------------------------------ ------------------------------------------------------------
DOUBLE                                                       SYSTEM
cs


사용자가 생성 당시 해당 디폴트 테이블 스페이스인 USERS 에 대한 QUOTA 를 설정해주지 않았기 때문이다. 따라서 QUOTA 절로 사용자가 사용할 테이블 스페이스의 영역을 할당한다.


- SYSTEM 으로 접속한 이후 테이블 스페이스 영역 할당하기

1
2
3
SQL> alter user double quota 2m on users;
 
User altered.
cs


그래도 여전히 생성이 안된다. 일단 사용자 권한을 주는 것에서부터 다양한 방법이 있으며 권한을 묶어놓은 ROLE 등에 대해서도 알아볼 필요가 있었다. ROLE을 알면 이후에 사용자 권한 주는게 분명 쉬울거라 생각했다. 


+) ROLE

ROLE이란,

- ROLE 을 이용하면 권한 부여와 회수를 쉽게할 수 있다.

- ROLE 은 CREATE ROLE 권한을 가진 USER 에 의해서 생성된다.

- 한 사용자가 여러 개의 ROLL을 ACCESS 할 수 있고, 여러 사용자에게 같은 ROLE을 부여할 수 있다.

- 시스템 권한을 부여하고, 취소할 때와 동일한 명령을 사용하여 사용자에게 부여하고, 취소한다. 

- 사용자는 ROLE에 ROLE을 부여할 수 있다.

- 오라클 데이터베이스를 설치하면 기본적으로 CONNECT, RESOURCE, DBA ROLE 이 제공된다.


생각을 하자, 왜 ROLE을 만들었을까?


DBA가 유저들에게 권한을 부여해주는 경우, 한명 한명 권한을 하나씩 부여하는 것이 매무 불편할 것이고, 또한 개개의 유저의 특성에 맞는 ROLE을 부여해주기 위해서 구분하기 위해서 특정한 ROLE을 만들어놓고 권한을 부여해주면 이후 DBA 측에서 관리가 수월할 것이다. 


ROLE은 생성도 가능하다. 자세한 내용은 참고링크에서 다룬다.


- SYSTEM 으로 접속한 이우에 DBA_ROLES 데이터 사전을 통한 미리 정의된 ROLE 조회


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SQL> SELECT * FROM DBA_ROLES;
 
ROLE                                                         PASSWORD_REQUIRE AUTHENTICATION_TYPE
------------------------------------------------------------ ---------------- ----------------------
CONNECT                                                      NO               NONE
RESOURCE                                                     NO               NONE
DBA                                                          NO               NONE
SELECT_CATALOG_ROLE                                          NO               NONE
EXECUTE_CATALOG_ROLE                                         NO               NONE
DELETE_CATALOG_ROLE                                          NO               NONE
EXP_FULL_DATABASE                                            NO               NONE
IMP_FULL_DATABASE                                            NO               NONE
LOGSTDBY_ADMINISTRATOR                                       NO               NONE
DBFS_ROLE                                                    NO               NONE
AQ_ADMINISTRATOR_ROLE                                        NO               NONE
cs


위의 내용보다 사실 더 많은 내용들의 ROLE 이 조회된다. 하지만 가장 많이 이용하는 것들만 확인해보자.


- CONNECT ROLE

  • 오라클에 접속할 수 있는 세션 생성 및 테이블을 생성하거나 조회할 수 있는 가장 일반적인 권한들로 이루어져 있다.

  • CONNECT ROLE 이 없으면 유저를 생성하고서도 ORACLE에 접속할 수 없다. 

  • 아래의 명령어로 CONNECT ROLE이 어떤 권한으로 이루어져 있는지 확인 가능하다.

- RESOURCE ROLE

  • Store Procedure 나 Trigger 와 같은 PL/SQL을 사용할 수 있는 권한들로 이루어져 있다.

  • PL/SQL을 사용하려면 RESOURCE ROLE을 부여하여야 한다.

  • 유저를 생성하면 일반적으로 CONNECT, RESOURCE ROLE 을 부여해야 한다.

- DBA ROLE

  • 모든 시스템 권한이 부여된 ROLE 이다.

  • DBA ROLE은 데이터베이스 관리자에게만 부여해야 한다.


아래의 명령어를 통해서 해당 ROLE이 어떤 권한으로 이루어져있는지 확인할 수 있다. 물론 위의 내용을 실행하기 위해서는 SYSTEM 계정으로 접속해주어야 한다.
1
2
3
SQL> SELECT grantee, privilege FROM DBA_SYS_PRIVS WHERE grantee = 'CONNECT';
SQL> SELECT grantee, privilege FROM DBA_SYS_PRIVS WHERE grantee = 'RESOURCE';
SQL> SELECT grantee, privilege FROM DBA_SYS_PRIVS WHERE grantee = 'DBA';
cs


ROLE의 내용을 보니 권한의 부여는 ROLE을 통해서 하는 편이 더 수월함을 느꼈다.

따라서 앞선 사용자 계정에 권한을 부여해주기 위해 아래와 같이 입력하면 된다.


SQL > GRANT CONNECT, RESOURCE TO double



Posted by doubler
,