DB 관리자 SYS, SYSTEM 은 사용자 계정을 발급할 수 있다.
show user;
--결과
--USER이(가) "SYS"입니다.
--사용자가 소유한 테이블 확인
SELECT *
FROM tab; --tab은 table의 약자로 테이블 정보 알려주는 딕셔너리
--관리자계정 접속
CONN sys/oracle AS SYSDBA;
--USER_NEW 생성
--사용자비밀번호 입력 : USER_NEW_PW
CREATE USER USER_NEW IDENTIFIED BY USER_NEW_PW;
--사용자생성확인
SELECT * FROM DBA_USERS;
📌사용자 생성할 때 기본 권한이 없으면 접속할 수 없다.
→ CONNECT와 RESOURCE를 부여하면 된다.--기본권한 부여 GRANT CONNECT, RESOURCE TO USER_NEW;
--사용자 USER_NEW로 접속 CONN USER_NEW/USER_NEW_PW;
포함하는 권한
- CONNECT
ALTER SESSION, CREATE CLUSTER, CREATE DATABASE
LINK, CREATE SEQUENCE, CREATE SESSION, CREATE
SYNONYM, CREATE TABLE, CREATE VIEW
//oracle 11g에서는 많은 권한이 빠져있음, 반드시 있는게 아니다!- RESOURCE
CREATE CLUSTER, CREATE PROCEDURE, C CREATE
SEQUENCE, CREATE TABLE, CREATE TRIGGER- DBA
DATABASE객체 관리, 사용자계정관련 모든 권한.
--관리자계정 접속
CONN sys/oracle AS SYSDBA;
--USER_NEW 계정삭제
DROP USER USER_NEW;
권한의 부여와 회수를 쉽게할 수 있게 해준다.
한사용자가 여러 ROLE에 접근 가능, 한 ROLE에 여러 사용자 접근 가능
-- ROLE 생성
CREATE ROLE role명;
-- ROLE에 권한 부여
GRANT create session, create table TO role_manager;
-- scott, test1, test2 사용자에게 ROLE 부여
GRANT role_manager TO scott, test1, test2;
REVOKE role_manager FROM test1, test2;
DB 객체의 별칭으로 공유하는 테이블에 접근할 때 [사용자명.테이블명]으로 접근하는데 동의어를 사용하면 좀 더 간결하게 접근할 수 있다.
CREATE [PUBLIC] SYNONYM 동의어명
FOR 사용자명.객체명(테이블, 뷰 등..);
권한을 주는 사용자가 정의한 동의어, 누구나 사용가능
--- SYS로 로그인.
CONN SYS/ORACLE AS SYSDBA;
CREATE PUBLIC SYNONYM EMP_PUBLIC
FOR SCOTT.EMP;
--- 새로운 테스트유저를 생성하고, 기본롤과 해당테이블 열람권한을 부여하자.
CREATE USER TEST_USER1 IDENTIFIED BY 1234;
GRANT CONNECT, RESOURCE TO TEST_USER1;
GRANT SELECT ON SCOTT.EMP TO TEST_USER1;
--- TEST_USER1로 접속하고, EMP_PUBLIC에 접근해보자.
CONN TEST_USER1/1234;
SELECT * FROM EMP_PUBLIC;
객체에 접근권한이 있는 사용자가 정의한 동의어, 해당사용자만 사용가능
--- TEST_USER1로 접속하고, 비공개동의 MY_EMP를 만들어보자.
CONN TEST_USER1/1234;
CREATE SYNONYM MY_EMP
FOR SCOTT.EMP;
--MY_EMP 동의어로 테이블접근.
SELECT * FROM MY_EMP;
사용자가 DB에 특정 작업 수행 가능하게 하는 권한
--부여
GRANT [system_privilege|role] TO [user|role|PUBLIC]
[WITH ADMIN OPTION]
--회수
REVOKE [system_privilege|role] FROM [user|role|PUBLIC]
테이블, 뷰, 시퀀스, 프로시저, 함수, 패키지에서 지정된 객체에 특별한 작업을 가능하게 하는 권한
PUBLIC으로 부여하면 회수할 때도 PUBLIC으로
--부여
GRANT object_privilege [column]
ON object
TO {user [, user]|role|PUBLIC}
[WITH GRANT OPTION]
--회수
REVOKE {privilege [, privilege, …]|ALL}
ON object
FROM {user [, user]|role|PUBLIC}
[CASCADE CONSTRAINTS]