-> 아니요. 권한을 부여 해야 가능합니다.
-> 사용자에게 시스템 권한을 부여하기 위해서 사용한다.
privilege_name = 권한 이름
grant privilege_name|role
To user_name
[with Admin option];
만일 user_name 대신 public 을 기술하면 모든 사용자에게 해당 시스템 권한이 부여된다. public 이란 DB 내에 있는 모든 계정을 의미하기 때문에!
-- 현재 사용하는 사용자(계정) 보기
show user;
-- 현재 관리자(system) 계정 사용 중이기 때문에 user 계정 생성이 가능하다
-- 하지만 접근 권한이 없기때문에 (Session이 안만들어졌기 때문에) 접속은.. 불가하다.
create user tester1 identified by 123;
-- 권한 부여하기(세션 할당하기)
grant create session to tester1;
-- 계정 만들고 권한 여러개 주기
create user tester2 identified by 1234;
grant create session, create table,
create view, create sequence to tester2;
-- 현재 유저 확인하기
show user; -- USER이(가) "TESTER1"입니다
-- 테이블 만들어보기
-- but 테이블을 만들 수 있는 권한은 부여받지 않았기 때문에 오류
create table emp ( empno number(4) );
-- 현재 유저 확인
show user; -- USER이(가) "TESTER2"입니다.
-- 이번에는 권한은 있는데 공간이 없다는 오류가 난다,,,ㅎ
create table emp( empno number(4), ename varchar2(8) );
계정을 생성해주고 접근할 수 있게 해줬다면, 작업 공간을 주어야! 그 내부에서 뭔가를 할 수 있다.
unlimited : 제한을 두지 않고 할당해주기
alter user [유저명] default tablespace [테이블스페이스] quota unlimited on [테이블스페이스];
ex) alter user myuser default tablespace users quota unlimited on users;
특정 용량만큼만 테이블스페이스 할당하기
alter user [유저명] quota [용량] on [테이블스페이스];
ex) alter user myuser quota 30M on users;
tester2 에 접속해서 테이블 생성 / 삽입을 해보니 오류출력없이 잘 된다
create table emp( empno number(4), ename varchar2(8) );
insert into emp values (1000, '홍' );
insert into emp values (1001, '권' );
-- tester3 유저 만들기
create user tester3 identified by 1234;
-- 접근 권한 부여 (세션을 만들어주고, 테이블과 뷰를 만들 수 있는 권한)
grant create session, create table, create view to tester3;
-- 작업공간 주기
-- (user라는 테이블공간 100M를 tester3에 할당하겠다)
alter user tester3 Quota 100M on users;
grant unlimited tablespace to tester3;
show user;
--> USER이(가) "TESTER3"입니다. (확인)
-- 테이블 만들기
create table emp (
empno number(4),
ename varchar2(10) );
-- 값 넣기
insert into emp values ( 101, '진' );
-- 계정 생성
create user deptAdmin identified by 1234;
-- 사용자에게 DB에 접근할 권한 부여(여러 권한을 부여하고)
-- 다른 계정에도 자기가 부여받은 '권한'을 줄 수 있는 권한 : with admin option
-- -- 함수를 생성할 수 있는 권한 : create procedure
grant create user, drop user, drop any table,
create session, create table, create view,
create sequence, create procedure to deptAdmin
with admin option;
-- 작업 공간 주기
alter user deptAdmin quota 100M on users;
grant unlimited tablespace to deptAdmin;
show user;
-- > USER이(가) "DEPTADMIN"입니다.
-- 부여된 권한 사용해보기
-- 테이블 만들어보기
create table emp ( empno number(4), ename varchar2(10) );
-- 값 넣어보기
insert into emp values ( 101, '진' );
-- 유저 생성권한 사용해보기
create user dept_Person1 identified by 1234;
-- 유저 drop 해보기
drop user dept_Person1;
-- 만든 유저에게 접근권한 줘보기
create user dept_Person1 identified by 1234;
grant create session to dept_Person1;
-- 관리자에게 부여받지 않은 권한은 다른 계정에도 줄 수 없다.
grant query rewrite to dept_Person1; -- 오류
특정 객체에 조작을 할 수 있는 권한이다. 객체 소유자는 개체에 대한 모든 권한을 가진다.
-- dept테이블의 select 권한을 tester2에게 부여한다.
grant select on dept to tester2;
-- system 의 dept를 검색하는 것이다. 라고 명시해줘야함
select * from system.dept;
-- dept의 주인인 system이
-- tester3번에게 select, insert 권한을 부여하겠다.
grant select, insert on dept to tester3;
-- 권한 받은 내용 확인
select * from system.dept;
insert into system.dept values ( 80, '마케팅', '서울' );
-- 권한 받지 않은 내용을 실행하면 오류난다 당연히
delete from system.dept where deptno=80; -- 에러
-- deptAdmin 에게 emp 접근 권한을 아래와 같이 주겠다.
grant select, insert, delete, update on emp to deptAdmin;
select * from system.emp;
객체를 소유한 사용자명을 의미한다. 객체명 앞에 소속 사용자명을 기술합니다
select * from tester.dept;
select * from dept;
결과 또한 제대로 출력되었다.-- 현재 사용자가 다른 사용자에게 부여한 권한 정보 조회
select * from user_tab_privs_made;
-- 현재 사종자가 자신에게 부여된 권한 정보 조회
select * from user_tab_privs_recd;
-- test2에게서 권한 회수
revoke select on dept from tester2;
-- 아까 select, insert on dept 권한을 tester3에게 줬었는데
-- insert 만 회수하기
revoke insert on dept from tester3;
-- 주지도 않은 권한 뺏기
revoke delete on dept form tester3; --에러에러에러
미리 권한을 묶어서 역할(role)을 만들어 놓고, 사용자에게 맞는 역할을 주는 것.
alter session
create cluster
create database link
create sequence
create session
create synonym
create table
create view
create cluster
create procedure
create sequence
create table
create trigger
-- 역할 부여하기
-- 1. 사용자 만들기
create user person_1 identified by 1234;
-- 2. 권한을 묶음(역할)으로 부여
grant connect, resource to person_1;
-- 사용자에게 부여된 역할 알아보기
-- 테이블 이름이 %role% 이라고 되어있는 것들 모두 보기
-- 딕셔너리 안에 데이블 이름이 role이라고 되어있는 것 모두 보기
select * from dict where table_name like '%ROLE%';
-- 롤 관련 데이터 딕셔너리
-- 롤이 부여된 시스템 권한 정보
select * from role_sys_privs;
-- 롤에 대한 테이블의 권한 정보
select * from role_tab_privs;
-- 사용자가 접근 가능한 역할 정보
select * from user_role_privs;
-- 사용자 소유의 오브젝트 중 col에 부여된 오브젝트 권한 정보
select * from user_col_privs_made;
-- 사용자에게 부여된 특정 컬럼에 대한 오브젝트 권한 정보
select * from user_col_privs_recd;
사용자는 create role 명령어로 다음 형식에 따라 롤을 생성할 수도 있다.
create role 역할_이름;
grant 권한_이름 to 역할_이름;
예) 회사에서 알바 / 사원 / 대리 / 과장 / 사장이 가져야할 권한이 다르니까 권한을 지정해서 각 역할에 권한을 미리 부여해 놓는것
-- 역할 만들기
create role alba;
-- 권한주기
grant create session to alba;
grant select on emp to alba;
-- 사용자 계정 만들기
create user shin identified by 1234;
-- 사용자 계정에 역할 부여하기
grant alba to shin;