본문 바로가기

DB/Oracle

Oracle DB #14 사용자 관리

1. 사용자 관리

 

1) 데이터베이스 보안을 위한 권한

 

- 기업에서 보유하고 있는 데이터들은 자료 이상의 가치가 있으므로 외부에 노출되지 않도록 보안을 해야 함

- 데이터베이스를 운영하려면 데이터베이스에 대한 적절한 보안 대책을 마련해야 함

- 오라클은 다수의 사용자들이 데이터베이스에 저장된 정보를 공유해서 사용

- 하지만 정보의 유출이나 불법적인 접근을 방지하기 위해서 철저한 보안 대책이 필요

 

- 이러한 보안 대책을 위해서 데이터베이스 관리자가 있어야 함

- 데이터베이스 관리자는 사용자가 데이터베이스의 객체(테이블, 뷰 등)에 대한 특정 권한을 가질 수 있도록 함으로서 다수의 사용자가 데이터베이스에 저장된 정보를 공유하면서도 정보에 대한 보안이 이루어지도록 함

- 데이터베이스에 접근하기 위해서는 사용자가 이름과 암호를 입력해서 로그인 인증을 받아야 함

 

2) 권한의 역할과 종류

시스템 권한은 사용자의 생성과 제거, DB 접근 및 각종 객체를 생성할 수 있는 권한 등 주로 DBA에 의해 부여되며 그 권한의 수가 80 가지가 넘기에 대표적인 시스템 권한만 정리

시스템 권한 기능
CREATE USER 새롭게 사용자를 생성하는 권한
DROP USER 사용자를 삭제하는 권한
DROP ANY TABLE 임의의 테이블을 삭제할 수 있는 권한
QUERY REWRITE 함수 기반 인덱스를 생성하는 권한
BACKUP ANY TABLE 임의의 테이블을 백업할 수 있는 권한

 

데이터베이스를 관리하는 권한으로 다음과 같은 것이 있습니다. 이러한 권한은 시스템 관리자가 사용자에게 부여하는 권한

시스템 권한 기능
CREATE SESSION 데이터베이스에 접속할 수 있는 권한
CREATE TABLE 사용자 스키마에서 테이블을 생성할 수 있는 권한
CREATE VIEW 사용자 스키마에서 뷰를 생성할 수 있는 권한
CREATE SEQUENCE 사용자 스키마에서 시퀀스를 생성할 수 있는 권한
CREATE PROCEDURE 사용자 스키마에서 함수를 생성할 수 있는 권한

 

3) 사용자 생성

- 회사에 새로운 사원이 입사하게 되면 시스템에 접속하도록 관리자가 계정을 하나 발급해줌

- 지금까지는 SCOTT 사용자로 접속해서 오라클 데이터베이스를 사용했지만, 사실은 부서별이나 사원의 직무에 따라 사용 가능한 테이블을 고려해서 오라클 데이터베이스에서도 사용자 계정을 발급해야 함

 

 

사용자 생성을 위한 CREATE USER 명령어의 형식

CREATE USER user_name

IDENTIFIED BY password;

 

- 사용자의 생성은 사용자의 이름과 암호를 지정하여 생성

- 사용자를 생성하기 위해서도 권한이 필요함

- 우리가 지금까지 주로 사용해 왔던 SCOTT이란 사용자는 사용자를 생성할 권한이 없습니다.

- 새로운 사용자 계정을 발급받기 전에 주의할 점이 있음

 

- 1장에서 언급한 바 있지만, 사용자를 생성하기 위해서는 시스템 권한을 가지고 있어야 함

- 오라클 데이터베이스를 설치할 때 자동으로 생성되는 디폴트 사용자 가운데 시스템 권한을 가진 데이터베이스 관리자인 DBA는 SYS, SYSTEM 임

- 그러므로 사용자 계정을 발급 받기 위해서 시스템 권한을 가진 SYSTEM으로 접속해야 함

 

사용자 생성하기

CREATE USER 명령어를 사용하여 사용자명은 USER01 암호는 TIGER로 사용자를 생성해보자

 

1.오라클 설치할 때 system 사용자의 암호를 manager 로 지정하였기 때문에 위와 같이 입력하였습니다. 오라클 설치할 때 암호를 변경하지 않았다면 다음과 같이 접속합니다.

CONN system/manager

 

2.사용자명은 USER01 암호는 TIGER로 사용자를 생성해봅시다. 사용자를 생성하기 위해서는 CREATE USER 명령어를 사용합니다.

CREATE USER USER01 IDENTIFIED BY TIGER;

 

3.새롭게 생성된 사용자로 접속을 해봅시다.

CONN USER01/TIGER

 

4) 권한을 부여하는 GRANT 명령어

 

GRANT privilege_name, …

TO user_name;

 

- 만일 user_name 대신 PUBLIC을 기술하면 모든 사용자에게 해당 시스템 권한이 부여

- PUBLIC 이란 DB 내에 있는 모든 계정을 의미

- 새로 생성된 user01에 데이터베이스에 접속할 수 있는 권한인 CREATE SESSION를 부여

 

CREATE SESSION 권한 부여하기

1. CREATE SESSION 권한 역시 DBA 만이 부여할 수 있으므로 system 으로

    로그인합니다.

CONN system/manager

 

2. SYSTEM으로 로그인한 후에 다음과 같이 USER01 사용자에게

    CREATE SESSION 권한을 부여합니다.

GRANT CREATE SESSION TO USER01;

 

3.  USER01 사용자에 데이터베이스에 연결할 수 있는 권한인 CREATE SESSION이 성공적으로 부여되었기에 USER01 사용자로 데이터베이스에 접속을 시도하면 성공적으로 접속됩니다.

CONN USER01/TIGER;

 

5) WITH ADMIN OPTION 옵션

 

- 사용자에게 시스템 권한을 WITH ADMIN OPTION과 함께 부여하면 그 사용자는 데이터베이스 관리자가 아닌데도 불구하고 부여받은 시스템 권한을 다른 사용자에게 부여할 수 있는 권한도 함께 부여 받게 됨

- 데이터베이스 관리자로 로그인해서 사용자 USER02 와 USER03 를 생성

- 역시 데이터베이스 관리자에서 USER02 와 USER03 에 데이터베이스에 접속할 수 있는 권한인 CREATE SESSION 권한을 부여하는데 USER02 는 WITH ADMIN OPTION을 지정하고 USER03 은 WITH ADMIN OPTION을 지정하지 않은 채 권한 부여를 할 것

 

- USER02 사용자로 로그인하면 CREATE SESSION 권한을 USER01 사용자에게 부여할 수 있음

- 이것이 가능해진 것은 USER02에게 WITH ADMIN OPTION을 사용하여 CREATE SESSION 권한을 부여하여 그 권한을 다른 사용자에게도 부여할 수 있도록 허용하였기 때문

- USER03 사용자는 단순히 CREATE SESSION 권한만을 부여받았으므로 그 권한을 다른 사용자에게 부여할 수 없음

 

6) 객체 권한

- 객체 권한은 특정 객체에 조작을 할 수 있는 권한, 객체의 소유자는 객체에 대한 모든 권한을 가짐

권 한 TABLE VIEW SEQUENCE PROCEDURE
ALTER O   O  
DELETE O O    
EXECUTE       O
INDEX O      
INSERT O O    
REFERENCES O      
SELECT O O O  
UPDATE O O    

- 객체 권한은 테이블이나 뷰나 시퀀스나 함수 등과 같은 객체별로 DML문(SELECT, INSERT, DELETE)을 사용할 수 있는 권한을 설정하는 것

 

GRANT privilege_name [(column_name)] | ALL ①

ON object_name | role_name | PUBLIC ②

TO user_name; ③

 

- GRANT 명령어의 형식은 어떤 객체(②)에 어떠한 권한(①)을 어느 사용자(③)에게 부여하는가를 설정

- 시스템 권한과 차이점이 있다면 ON 옵션이 추가된다는 점. ON 다음에 테이블 객체나 뷰 객체 등을 기술.