본문 바로가기

카테고리 없음

[DB] 사용자 접근 제어

<권한>

권한

권한=SQL문장을 실행하기 위한 권리

DBA=데이터베이스와 객체에 대한 접근 권한을 사용자에게 부여할 수 있는 상급 사용자

 

사용자가 가질 수 있는 권한

시스템권한 = 데이터베이스에 액세스하기 위해 필요한 권한 / DBA에 의해 제공.

객체권한 = 데이터베이스에서 객체의 내용을 조작하기 위해 필요한 권한 / 객체 소유주에 의해 제공

 

Role(권한들의 이름이 있는 그룹),이나다른 사용자에게 추가로 권한을 부여하기 위해 권한

사용자와 롤에 대해 시스템 권한과 객체 권한 부여도 가능

 

DBA 권한

CREATE USER 사용자 생성 허용
DROP USER 다른 사용자 제거
DROP ANY TABLE 임의의 스키마에서 테이블 제거
BACKUP ANY TABLE export로 임의의 테이블 백업

 

<사용자 생성>

🍏사용자 추가

=유저이름과 비밀번호와 같이 유저를 생성

create user C##유저이름 identified by 비밀번호;

 

예제

conn system
enter password:

create user heo identified by 1234567890;

🍏사용자 삭제

cascade=사용자가 객체 가지고 있어도 삭제해라

drop user C##유저이름 [cascade];

 

🍏비밀번호 변경

=로그인할 권한을 부여한 후 비밀번호 변경 가능.

비밀번호 변경은 system 권한으로 접속하거나, 자신의 계정으로 접속해야 한다.

--로그인 권한 부여
conn system
grant create session to 유저명;

--비밀번호 변경
alter user 유저명 identified by 비밀번호;

 

<사스템 권한>

=사용자 생성 후 DBA가 권한부여 하는 것.

with admin option = 유저가 이 권한을 제3자에게 부여할 수 있는 권한도 부여

GRANT 권한
TO 유저명
[with admin option];

 

시스템 권한 종류

create session 데이터베이스로 접속
create table 사용자 스키마에서 테이블 생성
create sequence 사용자 스키마에서 시퀀스 생성
create view 사용자 스키마에서 뷰 생성
create procedure 사용자 스키마에서 프로시저, 함수, 패키지 생성

 

예시

grant create session to ___;
grant create table, create sequence, create view to ___;

 

예제

table 생성하는 권한을 부여하기

= create table권한도 주고 tablespace 'SYSTEM' 권한도 있어야한다.

--create table권한 부여
conn system
grant create table to HOHO;

--tablespace 사용권한 부여
alter user HOHO
default tablespace users
quota unlimited on users;

이제 테이블 생성이 가능하다

 

시스템 권한 회수

provoke 권한 from 유저이름

예제

revoke create session from HOHO;

WITH ADMIN OPTION

=시스템 권한 부여시 그 권한을 제 3자에게도 부여할 수 있는 권한

 

ex) dba가 foo에게 create session권한을 줬다. foo는 bar에게 create session 권한을 줬다.

dba가 foo에게서 create session 권한을 제거했어도

bar는 여전히 create session 권한이 있다.

bar의 권한은 foo만이 회수할 수 있다.

 

<객체 권한>

객체 권한

특정 객체(테이블, 뷰, 시퀀스, 프로시저 등..)에 대한 권한 부여

(보통은 view를 제작하고 해당 view를 볼 권한을 준다)

 

구조

유저명이 아닌 PUBLIC으로 할 경우 모든 사용자에게 액세스 권한을 부여하는 것이다.

GRANT 권한
ON 오브젝트
TO 유저명 | PUBLIC
[WITH GRANT OPTION];

 

예제

employees 테이블 질의 권한을 HOHO  에게 부여하라

--권한 부여
conn hr/hr
gran selet on employees to HOHO;

--권한 확인
conn HOHO/1234567890
select count(*) from hr.employees;

 

객체 권한 부여 철회

revoke문장으로 사용자에게 부여된 권한 제거.

cascade constraints = 만들어진 객체에 대한 참조 무결성 제약조건 제거

 

구조

revoke 권한 | all
on 오브젝트
from 유저이름|public
cascade constraints;

 

예제

--권한 제거
conn hr/hr
revoke select on employees from HOHO;

--권한 제거 확인
conn HOHO/1234567890
select count(*) from hr.employees;--error

 

with grant option

=객체 권한 부여시 그 권한을 제3자에게 부여할 수 있는 권한

(수여자 간의 체이닝)

객체 권한 부여를 취소한다면 취소당한 사용자가 권한을 부여했던 모든 사용자들의 권한이 취소된다

권한을 준 사용자의 권한만 회수할 수 있다.

 

ex)

사용자 A가 select권한을 받아서 B에게 주고 B는 C에게 C는 D에게 권한을 줬다. 

A가 B의 권한을 회수한다면 C,D의 권한도 취소 된다.

다만 A가 C나 D의 권한만 회수할 수는 없다.

 

<역할 ROLE>

=사용자에 대해 부여될 수 있는 관련 권한의 그룹. 

 

롤 생성

create role 롤이름;

 

롤 삭제

drop role 롤이름;

 

예제

conn sys /as sysdba

create user dan identified by password1;

create user eric identified by password2;

create role manager;

grant create table, create view, connect to manager;

grant manager to dan, eric;

 

<권한 확인>

 = 권한이 없는 작업을 수행하고자 한다면 허용되지 않는다.

 

에러 메시지 ORA-00942:table or view does not exist

=존재하지 않는 테이블이나 뷰를 명시할 시 발생

=해당 권한을 가지고 있지 않는 뷰 또는 테이블에 대한 작업 수행할 시 발생

 

권한 확인 데이터 딕셔너리

데이터 사진 테이블 설명
ROLE_SYS_PRIVS 롤에게 부여된 시스템 권한
ROLE_TAB_PRIVS 롤에게 부여된 테이블 권한
USER_ROLE_PRIVS 사용자에 의해 액세스 가능한 롤
USER_TAB_PRIVS_MADE 헤당 사용자 객체에 부여된 객체 권한
USER_TAB_PRIVS_RECD 사용자에게 부여된 객체 권한
USER_COL_PRIVS_MADE 해당 사용자 객체의 특정 열에 부여된 객체 권한
USER_COL_PRIVS_RECD 특정 열에 대해 사용자에게 부여된 객체 권한

 

 

<실습>

 

sysdba로 접속

Enter user-name: sys /as sysdba
Enter password:

 

사용자 hjk 생성하고 비밀번호 설정하기

create user c##hjk identified by 1234567890;

 

해당 사용자로 접속해보자

conn c##hjk
Enter password:

 

접속 하려고 했으나 세션 생성 권한이 없어서

아래와 같은 에러가 뜨고

오라클에서도 연결이 해제되었다.

 

우선 다시 oracle에 접근하자

conn sys /a sysdba
+ 접속방법

1. conn sys /as sysdba ( conn sys뒤에 권한 명시해야한다)
conn sys = 이렇게 하면 에러 난다

2. conn system =이렇게 하면 바로 접속 가능

 

 

사용자 hjk에게 로그인할 수 있는 권한(create session)을 주자

grant create session to c##hjk;

 

다시 접근해보면 연결이 된다

conn c##hjk

 

비밀번호를 변경해보자

alter user c##hjk identified by a1234567890;

 

변경된 비밀번호로 다시 연결하면

connected되는 것을 확인할 수 있다

conn c##hjk/a1234567890;