-
SQL - ๋ทฐ, ์ํ์ค, ์ธ๋ฑ์ค, ์ฌ์ฉ์ ๊ด๋ฆฌDATABASE 2020. 7. 25. 22:57
๐ฏ SQL ์ค๋ผํด ๊ฐ์ฒด์ ๋ทฐ, ์ํ์ค, ์ธ๋ฑ์ค์ ์ฌ์ฉ์ ๊ด๋ฆฌ๋ฅผ ์์๋ณธ๋ค.
๋ทฐ (VIEW)
๊ธฐ์กด์ ํ ์ด๋ธ์์ ํ์ํ ๊ฒ๋ง ๋ฝ์์ ํ๋์ ๊ฐ์ ํ ์ด๋ธ์ ๋ค์ ๋ง๋๋ ๊ฒ.
๋ทฐ์์ ์ฐธ์กฐํ๋ ์๋ณธํ ์ด๋ธ์ ๊ธฐ๋ณธํ ์ด๋ธ(base table)์ด๋ผ๊ณ ํ๋ค.
10๋ฒ ๋ถ์์ ๋ฐ์ดํฐ๋ฅผ ์์ฃผ ์ฌ์ฉํ๋ค๋ฉด ๋งค๋ฒ ์ ๋ ํ๊ธฐ๋ณด๋ค ๊ทธ๋ฅ ๋ฐ๋ก ๋ทฐ๋ฅผ ๋ง๋ค์ด๋๋ฉด ์ฌ์ฉํ๊ธฐ ํธํ๋ค.
๋ณด์์ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ ํ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ค ์ ์๊ธฐ ๋๋ฌธ์ ์ ๊ทผ์ ์ ํํ ์ ์๋ค.
๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ๋จ์ํ๊ฒ ๋ง๋ค์ ์๋ค. ๋งค๋ฒ ๋ง๋ค๊ธฐ ๋ณต์กํ ์กฐ์ธ๋ฌธ์ ๋ทฐ๋ก ๋ง๋ค์ด๋์ผ๋ฉด ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
GRANT CREATE VIEW TO SCOTT;
๋จผ์ SYS๊ณ์ ์์ ์ค์ฝง๊ณ์ ์ ๋ทฐ๋ฅผ ๋ง๋ค ์ ์๋ ๊ถํ์ ๋ถ์ฌํด์ค๋ค.
CREATE VIEW EMP_VIEW AS SELECT EMPNO, ENAME, SAL, HIREDATE FROM EMP WHERE DEPTNO = 10; SELECT * FROM EMP_VIEW; CREATE VIEW DEPT_VIEW AS SELECT DEPTNO NO, DNAME NAME FROM DEPT; SELECT VIEW_NAME FROM USER_VIEWS;
์ํ๋ ๋ถ๋ถ๋ง ๋ฝ์ ๋ทฐ๋ฅผ ์์ฑํ๋ค.
์ฌ์์ ๋ณด๋ฅผ ์ผ๋ฐ์ฌ์ฉ์๊ฐ ๊ฒ์ํ ๋, ๊ธ์ฌ ์ ๋ณด๋ ๋งค์ฐ ๋ฏผ๊ฐํ๊ธฐ ๋๋ฌธ์ ์ ๋ ํ ๋ ๋ทฐ๋ฅผ ํตํด ์ถ๋ ฅ๋์ง ์๋๋ก ์ฒ๋ฆฌํ ์ ์๋ค. ํ ์ด๋ธ์ SELECTํ ๊ฒฝ์ฐ, ํ์ ์ ํํ ์ ์์ง๋ง ํน์ ์ปฌ๋ผ์ ์ ํํ๋ ๋ฐฉ๋ฒ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ด ๋ ๋ทฐ๋ฅผ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
์๊ธ์ปฌ๋ผ์ ์ ์ธํ ๋๋จธ์ง ์ปฌ๋ผ์ผ๋ก ๊ตฌ์ฑ๋ ๋ทฐ ๋ง๋ค๊ธฐ CREATE VIEW EMP_VIEW4 AS SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, COMM, DEPTNO FROM EMP; SELECT * FROM EMP_VIEW4;
USER_VIEWS ๋ฐ์ดํฐ์ฌ์ ์ TEXT ์ปฌ๋ผ์ ํ์ธํด๋ณด๋ฉด ๋ทฐ๋ฅผ ์ ์ํ ๋ ์ผ๋ ์๋ธ์ฟผ๋ฆฌ๋ง ๋ฌธ์์ด ํํ๋ก ์ ์ฅ๋์ด์๋ค.
๋ทฐ๋ ํ ์ด๋ธ์ฒ๋ผ ๋์คํฌ ๊ณต๊ฐ์ ํ ๋นํด ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์๋ ๊ฒ ์๋๋ค.
๋ทฐ ์์
์์ ๋ค์ด์๋ ์๋ฃ๋ฅผ ์์ ํ๋ค๋ ๊ฒ ์๋๋ผ ๋ทฐ์ ๊ตฌ์กฐ๋ฅผ ๋ฐ๊พธ๋ ๊ฒ.
CREATE OR REPLACE ๋ฌธ์ ์ด์ฉํ๋ค.
๊ธฐ์กด์ ๋ทฐ๊ฐ ์๋ค๋ฉด REPLACE๋ก ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋๊ณ , ์์์ผ๋ฉด CREATE๋ก ์๋ก ์์ฑ๋๋ค.
CREATE OR REPLACE VIEW DEPT_VIEW AS SELECT DEPTNO NO, DNAME NAME, LOC FROM DEPT; DESC DEPT_VIEW;
๋ทฐ ์ข ๋ฅ
๋จ์๋ทฐ : ํ๋์ ๊ธฐ๋ณธ ํ ์ด๋ธ์ ๋ํด ์ ์ํ ๋ทฐ
๋จ์๋ทฐ์์ DML๋ฌธ์ ์คํํ ์ ์๋๋ฐ, ๊ฒฐ๊ณผ๊ฐ ์ค์ ๋ก ๊ธฐ๋ณธ ํ ์ด๋ธ์ ๋ฐ์๋๋ค.
๋ทฐ์ด๋ฆ ๋ค์ ์ปฌ๋ผ ๋ณ์นญ์ ์ง์ ํ ์ ์์ผ๋ฉฐ ๋ทฐ ์์ฑ์ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๋ฐ๋์ ์ปฌ๋ผ ๋ณ์นญ์ ์ง์ ํด์ผ ํ๋ค.
๋จ์ ๋ทฐ๊ฐ ๊ทธ๋ฃนํจ์, GROUP BY, DISTINCT๋ฅผ ํฌํจํ๋ ๊ฒฝ์ฐ์ DML ์์ ๋ถ๊ฐ๋ฅ.
๋ณตํฉ๋ทฐ : ๋๊ฐ ์ด์์ ๊ธฐ๋ณธํ ์ด๋ธ์ ๋ํด์ ์ ์ํ ๋ทฐ
๋งค๋ฒ ์กฐ์ธํ ํ์ ์์ด ๋ทฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์กฐ์ธ ์ฟผ๋ฆฌ๋ฌธ์ ๋ทฐ๋ก ์์ฑํ ๊ฒ ๋ณตํฉ๋ทฐ๋ค.
CREATE VIEW EMP_DEPT_VIW AS SELECT EMPNO, ENAME, DNAME FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO AND DEPT.DEPTNO = 30; SELECT * FROM EMP_DEPT_VIEW; -- ๋ณต์กํ ์กฐ์ธ๋ฌธ์ ๋ทฐ๋ก ๋ง๋ค์ด ๊ณ์ ํ์ฉํ ์ ์๋ค
SELECT * FROM EMP_VIEW; DELETE FROM EMP_VIEW WHERE EMPNO= 7782; SELECT * FROM EMP_VIEW; ROLLBACK; UPDATE EMP_VIEW SET ENAME='MILLY' WHERE ENAME = 'CLARK'; ROLLBACK;
๋ทฐ์ ์ ์ฝ์กฐ๊ฑด
WITH CHECK OPTION
WHERE ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฐ์ดํฐ๋ง INSERT์ UPDATE ๊ฐ๋ฅ
WITH READ ONLY
์ฝ๊ธฐ์ ์ฉ์ผ๋ก ์๋ฃ ๊ฒ์๋ง ๊ฐ๋ฅํ๊ฒ ์ค์ .
DML์์ ์ ๋ถ๊ฐ๋ฅํ ์ํ
๋ทฐ ์ ๊ฑฐ
DROP VIEW ๋ทฐ์ด๋ฆ;
๊ธฐ๋ณธ ํ ์ด๋ธ์ ์๋ฌด๋ฐ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
์ธ๋ผ์ธ๋ทฐ
์๋ธ์ฟผ๋ฆฌ๋ ๋ณดํต WHERE์ ์์ ์ฌ์ฉ๋๋๋ฐ ์ด๊ฑด FROM ์ ์ ์ฌ์ฉํ๋ ํํ๋ค. ํ๋กฌ์ ์ ํ ์ด๋ธ๋ช ์ด ์์ผํ์ง๋ง ์๋ธ์ฟผ๋ฆฌ๊ฐ ํ๋์ ๊ฐ์ํ ์ด๋ธ ํํ๋ก ์ฌ์ฉ๋๋ค. FROM ์ ์์ ์ฐธ์กฐํ๋ ํ ์ด๋ธ ํฌ๊ธฐ๊ฐ ํด ๊ฒฝ์ฐ ํ์ํ ํ๊ณผ ์ปฌ๋ผ๋ง์ผ๋ก ๊ตฌ์ฑ๋ ์งํฉ์ ์ฌ์ ์ํ์ฌ ์ฟผ๋ฆฌ๋ฌธ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
SELECT E.DEPTNO, TOTAL_SUM, TOTAL_AVG, CNT FROM (SELECT DEPTNO, SUM(SAL) TOTAL_SUM, AVG(SAL) TOTAL_AVG, COUNT(*) CNT FROM EMP GROUP BY DEPTNO) E, DEPT D WHERE E.DEPTNO = D.DEPTNO; -- ์๋ธ์ฟผ๋ฆฌ ํฌ์คํธ์ ์ธ๋ผ์ธ๋ทฐ ์ฐธ๊ณ
์ํ์ค SEQUENCE
๋ฌด์ํ ๋ง์ ๊ฒ์๋ฌผ ์ค ์ํ๋ ๊ธ์ ์ฐพ๊ณ ์ถ์ ๋, ๊ธ์ ๋ชฉ์ ์ค๋ณต๊ฐ๋ฅ์ฑ์ด ์์ด์ ๊ธ ๋ฒํธ๋ก ์ฐพ๋๊ฒ ์ข๋ค. ๋ณดํต ๊ธ๋ฒํธ์ ๊ธฐ๋ณธํค ์ ์ฝ์กฐ๊ฑด์ ๋ถ์ธ๋ค.
์ํ์ค๋ ํธ์ถ๋ ๋๋ง๋ค ์๋์ผ๋ก ๊ณ ์ ํ ์ซ์๋ก ํน์ ์ปฌ๋ผ๊ฐ์ ๋๋ฒ๋งํ๋ค.
์ํ์ค์๋ ์ฌ๋ฌ๊ฐ์ง ์ต์ ์ ์ค ์ ์๋ค.
CREATE SEQUENCE ์ํ์ค๋ช [START WITH N] [INCREMENT BY N] [MAXVALUE N] [MINVALUE N] [CYCLE] [CACHE]
์ํ์ค๋ฅผ ๋ง๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ์์ฑํ ๋๋ง๋ค ์๋์ผ๋ก ๋๋ฒ๋ง์ด ์คํ๋๋ค.
๋ฒํธ๋ ์คํํธ๋ถํฐ ์์ํด์ ์ธํฌ๋ฆฌ๋จผํธ ๊ฐ๋งํผ ์ฆ๊ฐํ๋ฉฐ ๋งฅ์ค๋ฐธ๋ฅ๊น์ง ๋๋ฌํ๋ค. ๋งฅ์ค๋ฐธ๋ฅ๋ฅผ ๋์ด์๋ ์๊ฐ ์ธ์ดํด์ด ์คํ๋์ด ๋ฏผ๋ฐธ๋ฅ์์ ๋ค์ ๋งฅ์ค๊น์ง ๊ฐ๋ค.
์ฌ์ดํด ๋์์ ๋ ์ฐ๋ ์ต๋๊ฐ์ด MAXVALUE ์ด๋ฉฐ, ์ธ์ดํด์ ์๋ก ์์ํ ๋์ ์์๊ฐ์ด MINVALUE ์ด๋ค.
CREATE SEQUENCE EMP_SEQ INCREMENT BY 1 START WITH 100 MAXVALUE 9999 NOCACHE NOCYCLE; SELECT SEQUENCE_NAME, MIN_VALUE, MAX_VALUE, INCREMENT_BY FROM USER_SEQUENCES; -- ์ฌ์ดํด ์์ด 100๋ฒ๋ถํฐ 9999๋ฒ๊น์ง์ ์ํ์ค๋ฅผ ์คํํ๋ค
์ํ์ค ์ฌ์ฉ
์ํ์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ฐ๋์ ์ํ์ค ๊ฐ์ฑ๋ฅผ ํธ์ถํด์ผ ํ๋ค.
1) ์ํ์ค๋ช .NEXTVAL
์ง์ ๋ ์ํ์ค์์ ์์ฐจ์ ์ธ ์ํ์ค ๋ฒํธ๋ฅผ ์ถ์ถํ ๋ ์ฌ์ฉํ๋ค.
๋ฅ์คํธ๋ฐ๋ฅผ ์ฌ์ฉํ๋ ์๊ฐ ๊ฐ์ด ํ๋์ฉ ์ฆ๊ฐ๋๋๊น ๋ฐ์ดํฐ๋ฅผ ๋๋ฒ์ฐ์ INSTERTํ์ง ์๊ฒ ์ฃผ์ํ ๊ฒ.
2) ์ํ์ค๋ช .CURRVAL
์ฌ์ฉ์๊ฐ ๋ฐฉ๊ธ ์ถ์ถํ ์ํ์ค ๋ฒํธ๋ฅผ ์ฐธ์กฐํ ๋ ์ฌ์ฉํ๋ค.
๋ฐ๋์ NEXTVAL๋ก ๋ฒํธ๋ฅผ ์ถ์ถํ ํ์ ์ฌ์ฉํด์ผ ํ๋ค.
INSERT INTO EMP VALUES (EMP_SEQ.NEXTVAL, 'ํ๊ธธ๋', '์ธ์ฌ', NULL, SYSDATE, 2500, 300, 40); SELECT EMPNO, ENAME, JOB FROM EMP WHERE DEPTNO = 40; SELECT EMP_SEQ.CURRVAL FROM DUAL;
์ํ์ค ์ญ์
DROP SEQUENCE EMP_SEQ;
์ํ์ค๋ฅผ ์ด๊ธฐํํ๋ ค๋ฉด ๋๋ํ๊ณ ๋ค์ ๋ง๋ค์ด์ผ๋๋ฏ๋ก ์์ฑ ์ ์ฃผ์ํด์ผ ํ๋ค.
์ํ์ค ๋ณ๊ฒฝ
ALTER SEQUENCE EMP_SEQ INCREMENT BY 2 MAXVALUE 10000 NOCACHE NOCYCLE;
์ํ์ค์ ์ต์ ์ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ ๋ค์ ์ํ์ค ๋ฒํธ๋ถํฐ ๋ณ๊ฒฝ์ฌํญ์ด ์ ์ฉ๋์ด ์ถ๋ ฅ๋๋ค.
START WITH ์ต์ ์ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ MAXVALUE ๊ฐ์ ํ์ฌ ์ํ์ค ๋ฒํธ๋ณด๋ค ํฐ ๋ฒํธ๋ก ์ง์ ํด์ผ ํ๋ค.
CREATE SEQUENCE DEPT_DEPTNO_SEQ START WITH 10 INCREMENT BY 10 MAXVALUE 100 MINVALUE 5 CYCLE NOCACHE; SELECT DEPT_DEPTNO_SEQ.NEXTVAL, DEPT_DEPTNO_SEQ.CURRVAL FROM DUAL; -- ์ฆ๊ฐ๊ฐ์ ๋ง์ด๋์ค๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. -- 100๋ถํฐ 0๊น์ง -10์ฉ ๋จ์ด์ง๊ณ ์ฌ์ดํด์ 150๋ถํฐ ์์. CREATE SEQUENCE DEPT_DEPTNO_SEQ START WITH 100 INCREMENT BY -10 MAXVALUE 150 MINVALUE 0 CYCLE NOCACHE;
์ธ๋ฑ์ค INDEX
0~10000๊น์ง์ ๋ฒํธ ์ค์์ 9999๋ฅผ ์ฐพ์ ๋ ์ด๋ค ๊ฒ์ ๋ฐฉ๋ฒ์ด ๋ ๋น ๋ฅผ๊น? 0๋ถํฐ ์์ํ๋๊ฒ๋ณด๋จ ๋ค์์ ํ ๋ฒ ๋นจ๋ฆฌ ์ฐพ๋ ๊ฒ ๋ ์ฝ๋ค.
์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ์ ์ค์ ์ ์ฅ์์น์ธ ROWID ๊ณ ์ ๋ฒํธ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋น ๋ฅธ ๊ฒ์์ด ๊ฐ๋ฅํ๋ค. ์ผ๋จ ์ซ์๋ฅผ ๋ฐ์ผ๋ก ๋ ์๋ผ์ ๊ฐ์ง์น๊ธฐ ํ๋ฉฐ ์ซ์๋ฅผ ์ฐพ๋ ๊ฒ ํธ๋ฆฌ์ธ๋ฑ์ค ๋ฐฉ๋ฒ์ด๋ค.
์ธ๋ฑ์ค ์์ด ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ ๊ฑธ ํ์ค์บ์ด๋ผ๊ณ ํ๋ค. ํ์ด 3๊ฐ๋ฐ์ ์๋ ๊ฒฝ์ฐ์ ํ์ค์บ์ด ๋น ๋ฅด๋ค.
์ธ๋ฑ์ค ์์ฑ
์ ๋ํฌ,PK ์ ์ฝ์กฐ๊ฑด ์ง์ ์ ์ ๋ํฌ ์ธ๋ฑ์ค๊ฐ ์๋์์ฑ๋๋ค.
์๋์์ฑ์ ํ๊ฐ ์ปฌ๋ผ ๋๋ ์ฌ๋ฌ ์ปฌ๋ผ(๋ณตํฉ ์ธ๋ฑ์ค)์ ์ด์ฉํ ์ ์๋ค.
CREATE [UNIQUE] INDEX ์ธ๋ฑ์ค๋ช ON ํ ์ด๋ธ(์ปฌ๋ผ[,์ปฌ๋ผ]);
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ
- ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ๋ง์ ๋
- ์ปฌ๋ผ๊ฐ์ ๋ฒ์๊ฐ ๋์ ๋
- WHERE์ ์ด๋ JOIN ์กฐ๊ฑด์ ์ฌ์ฉ๋๋ ์ปฌ๋ผ
- ๊ฒ์๊ฒฐ๊ณผ๊ฐ ์ ์ฒด ๋ฐ์ดํฐ์ ์ฝ 2 ~ 4% ์ด๋ด๋ฅผ ๊ฒ์ํ๋ ๊ฒฝ์ฐ
- NULL ๊ฐ์ด ๋ง์ ์ปฌ๋ผ ( NULL ๊ฐ์ ์ธ๋ฑ์ค์ ํฌํจ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค ํฌ๊ธฐ๊ฐ ๊ฐ์)
์ธ๋ฑ์ค ์ํตํ๊ณ ํ์ค์บ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
- ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ์ ์ ๋
- WHERE๋ฌธ์ ํด๋น ์ปฌ๋ผ์ด ์์ฃผ ์ฌ์ฉ๋์ง ์์๋
- ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ์ ์ฒด๋ฐ์ดํฐ์ 10~15% ์ด์์ ๊ฒ์ํ๋ ๊ฒฝ์ฐ
- ํ ์ด๋ธ์ DML์์ ์ด ๋ง์ ๋
- ์ธ๋ฑ์ค๊ฐ ์ ์ฉ๋ ์ปฌ๋ผ์ด NOT์ฐ์ฐ์, IS NULL,ํจ์์ ๊ฐ์ด ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ
์ธ๋ฑ์ค ์ญ์
DROP INDEX ์ธ๋ฑ์ค๋ช ;
์ฌ์ฉ์๊ด๋ฆฌ
๋ค์์ ์ฌ์ฉ์๋ค์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๋ ๊ฒฝ์ฐ ๋ณด์์ ์ํด ์ธ์ฆ๊ณผ ๊ถํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ค.
์ธ์ฆ(Authentication)์ด๋ ์์คํ ์์ค์์ ์ ๊ทผ๊ณผ ์ฌ์ฉ์ ๊ด๋ฆฌํ๋ ๊ฒ์ด๊ณ , ๊ถํ(Authorization)์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด ์ฌ์ฉ์ ๊ด๋ฆฌํ๋ ๊ฒ์ด๋ค.
์ฌ์ฉ์ ์์ฑ
์ฌ์ฉ์ ์์ฑ์ ๋ฐ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ด๋ฆฌ์(DBA) SYS ๊ณ์ ์์๋ง ๊ฐ๋ฅํ๋ค.
CREATE USER ๊ณ์ IDENTIFIED BY ๋น๋ฐ๋ฒํธ; CREATE USER USER01 --์ ์ ๋ช IDENTIFIED BY ORACLE; --ํจ์ค์๋
์ด ๋ก๊ทธ์ธ ํจ์ค์๋๋ง ๋ง์ผ๋ฉด ์ธ์ฆ ํ์ฉํ๋ค.
๊ณ์ ์ ์์ฑํ๋ค๊ณ ํด์ ์ ์ ํ ๋ฐ๋ก ๋ชจ๋ ์์ ์ ํ ์ ์๋๊ฒ ์๋๋ค. ๊ฐ๋ณ์ ์ธ ์ธ์ฆ๊ณผ ๊ถํ์ด ํ์ํ๋ค.
๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ
ALTER USER USER01 IDENTIFIED BY user01;
๊ถํ ์์ฑ
์์คํ ๊ถํ : CREATE USER, DROP USER, DROP ANY TABLE ...
์ฌ์ฉ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ๊ถํ : CREATE SESSION, CREATE TABLE, CREATE SEQUENCE, CREATE VIEW ... (์ ์๊ถํ, ํ ์ด๋ธ์ฌ์ฉํ ์์๋ ๊ถํ)
GRANT CREATE SESSION, CREATE TABLE TO USER01; -- USER01 ํ ์ด๋ธ์ ์ค๋ผํด ์ ์๊ถํ๊ณผ ํ ์ด๋ธ ์์ฑ๊ถํ์ ๋ถ์ฌ
์์คํ ๊ถํ ํ์
REVOKE CREATE SESSION FROM USER01;
๊ฐ์ฒด ๊ถํ
ํ ์ด๋ธ, ๋ทฐ, ์ํ์ค, ํ๋ก์์ ๋ฑ์ ์ฌ์ฉํ ์ ์๋ ๊ถํ
-- ์ค์ฝง์ด USER01์๊ฒ ํ ์ด๋ธ ์ค DEPT๋ง ๊ณต์ ํ์ GRANT SELECT ON DEPT TO USER01;
-- SCOTT ๊ณ์ ์์ USER01๊ณ์ ์ ๊ถํ ๋ถ์ฌ GRANT UPDATE(DNAME) ON DEPT TO USER01; -- USER01 ๊ณ์ ์์ ๋ฐ์ดํฐ ์์ UPDATE SCOTT.DEPT SET DNAME='์ธ์ฌ' WHERE DEPTNO = 40;
WITH GRANT OPTION
๊ถํ์ ๋ถ์ฌ ๋ฐ์ ์ฌ๋์ด ๋ถ์ฌ ๋ฐ์ ๊ถํ์ ๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ ๋ค์ ๋ถ์ฌํ ์ ์๋ ๋ฐฉ๋ฒ๊ฐ์ฒด๊ถํ ํ์
REVOKE ๊ฐ์ฒด๊ถํ ON ๊ฐ์ฒด๋ช FROM ์ฌ์ฉ์๊ณ์ |ROLE|PUBLIC [CASCADE CONSTRAINTS];
๋กค
์ธํฐ๋ท ์นดํ๋ฅผ ๊ด๋ฆฌํ ๋ ๊ด๋ฆฌ์ ๊ถํ์ ์ฃผ๋ฉด ์ฝ๊ธฐ, ์ฐ๊ธฐ, ํ์๊ด๋ฆฌ ๋ค ๊ฐ๋ฅํ๋ค. ๋กค์ ์ฃผ๋ ๊ฒ์ด๋ค. ๋กค์ ๊ถํ์ ๋ฌถ์์ด๋ค. ๋ถ์ฌ๋ ๋กค์ ํ์ฑํ ๋นํ์ฑํ๊ฐ ๊ฐ๋ฅํ๋ค.
์ค๋ผํด์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ ์ฌ์ ์ ์๋(BUILT-IN)๋กค์ด ์๋ค.
CONNECT ์ ์๊ถํ ๋กค
RESOURCE ํ ์ด๋ธ ์ฌ์ฉ๊ถํ ๋กค
DBA๋ ์์ค์ ๊ถํ์ด๋ผ ์ผ๋ฐ ์ฌ์ฉ์์๊ฒ ์ฃผ๋ฉด ์๋๋ค.
SELECT role FROM dba_roles;
SYS ๊ณ์ ์ ์ํด์ dba roles ๋ฐ์ดํฐ ์ฌ์ ์ ํตํด์ ๋นํธ์ธ ๋กค์ ๋ชฉ๋ก์ ํ์ธํ ์์๋ค.
GRANT connect, resource To ๊ณ์ ๋ช
์ด ๋๊ฐ์ง ๋กค์ ๋ถ์ฌํ๋๊ฒ ๊ฐ์ฅ ์ผ๋ฐ์ ์ด๋ค.
์ฌ์ฉ์ ๋กค ์์ฑ ๋ฐ ์ฌ์ฉ
-- ์ฌ์ฉ์ ๊ณ์ ์์ฑ CREATE USER user02 IDENTIFIED BY user02 -- ๋กค ์์ฑ --SYS CREATE ROLE clerk; -- ์์คํ ๊ถํ ๋ถ์ฌ --SYS GRANT CREATE SESSION, CREATE TABLE TO clerk; GRANT SELECT ON SCOTT.DEPT TO CLERK; -- ์ฌ์ฉ์์๊ฒ clerk ๋กค ๋ถ์ฌ --SYS GRANT CLERK TO user03;
๋กค์ ๋์ ์ผ๋ก ๊ถํ์ ๊ด๋ฆฌํ ์ ์๋ค. ๋กค์ ์๋ก์ด ๊ถํ์ ๋ถ์ฌํ๋ฉด ์๋์ผ๋ก ๊ทธ ๋กค์ ๊ฐ์ง ์ฌ์ฉ์์๊ฒ๋ ์๋ก์ด ๊ถํ ๋ถ์ฌ๋๋ค. ํ์๋ ๋ง์ฐฌ๊ฐ์ง๋ค.
-- ์ ์ ์ ์์ฑ ํ sys๊ณ์ ์์ create user ๊ณ์ IDENTIFIED by ๋น๋ฐ๋ฒํธ; alter user ๊ณ์ account unlock; grant connect, resource to ๊ณ์ ; -- ์ ์ธ๋ฌธ์ฅ์ ๊ธฐ์ตํด๋๊ธฐ
๋ฐ์ํ'DATABASE' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SQL - DDL ๋ช ๋ น์ด, ํ ์ด๋ธ ์์ฑ ์ ์ฝ์กฐ๊ฑด (0) 2020.07.24 SQL - DML, ํธ๋์ญ์ TCL (0) 2020.07.23 SQL ์กฐ์ธ, ์๋ธ์ฟผ๋ฆฌ ์ฐ์ต๋ฌธ์ ํ์ด๋ณด๊ธฐ (0) 2020.07.22 SQL - Join, ์๋ธ์ฟผ๋ฆฌ (0) 2020.07.21 SQL - ๊ทธ๋ฃนํจ์, GROUP BY์ , HAVING์ (0) 2020.07.20