<권한>
권한
권한=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;