SyntaxHighlighter.all(); 'SW' 카테고리의 글 목록 (2 Page) :: 또르의 개발노트 ss
반응형

(5)사용자관리

*데이터베이스 보안을 위한 권한

-데이터베이스 관리자는 사용자가 데이터베이스의 객체에 대한 특정권한을 가질 수 있게하
여 다수의 사용자가 데이터베이스에 저장된 정보를 공유하면서도 정보에 대한 보안이 이루어지도록 한다.




Tablespace: 디스크공간을 소비하는 데이터베이스객체들이 저장되는장소이다

 -권한을 부여해도 생성을 할 수 없는 이유가 테이블 스페이스 할당이 되지 않아서 인데 쿼터를 할당하면 된다

1)sys계정 접속

Conn system/manager

Show user

 

2)alter user user01

UQUOTA 2M on users;

 

*WITDH ADMIN OPTION

-사용자가 WITH ADMIN OPTIO과 함께 부여 받으면 데이터베이스 관리자가 아니더라도 다른 사용자에게 자신이 부여받은 권한을 줄 수 있다.


객체권한 : 특정 객체에 조작을 할 수 있는 권한

스키마 : 객체를 소유한 사용자명

SELECT * FROM SCOTT.EMP;

-SCOTT은 EMP테이블 객체를 소유한 사용자명

SELECT * FROM EMP;

-현재사용자가 SCOTT일 경우 생략가능

 

*사용자에게 부여된 권한조회

-현재 사용자가 다른 사용자에게 부여한권한 정보

USER_TAB_PRIVS_MADE;

자신에게 부여된 권한정보조회

-USER_TAB_PRIVS_RECD;

 

*객체 권한 제거

-REVOKE SELECT ON EMP FROM USER01;

 

* WITH ADMIN OPTION : 시스템권한을 부여할때 함께 부여하면 사용자는 데이터베이스 관리자가 아니더라도 다른 유저에게 권한을 줄 수 있다.

* WITH GRANT OPTION : 객체권한을 부여할때 함께 부여하면 사용자는 데이터베이스 관리자가 아니더라도 다른 유저에게 권한을 줄 수 있다.

 

*차이점

WITH ADMIN OPTION은 USER1 -> USER2로 권한을 부여한 후 USER1의 권한을 REVOKE 하면 USER1만 REVOKE되나  WITH GRANT OPTION은 둘다 REVOKE됨

반응형
반응형

오라클 객체

 

(1)인덱스 : SQL명령문의 처리 속도를 향상시키기 위해서 컬럼에 생성하는 오라클 객체

인덱스의 장점

1)검색속도가 빨라진다

2)시스템에 부하를 줄여서 시스템의 전체 성능을 향상시킨다


인덱스의 단점

1)인덱스를 위한 추가 공간이 필요하다

2)인덱스를 생성하는 데 시간이 걸린다

3)데이터의 변경 작업 이 자주 일어날 때는 오히려 성능이 저하된다.

*인덱스는 조회의 성능을 향상시키는 객체


-자동 인덱스: 프라이머리 키 또는 UNIQUE 제한 규칙에 의해 자동적으로 생성되는 인덱스

-수동 인덱스: CREATE INDEX 명령을 실행해서 만드는 인덱스

 

*인덱스를 생성하는 것이 좋은 컬럼은??

1) 테이블의 행의 수가 많을 때

2) WHERE문에 해당 컬럼이 많이 사용 될 때

3) 검색 결과가 전체 데이터의 2~4%일때

4) join에서 자주 사용되는 컬럼이나 null을 포함하는 컬럼이 많은 경우


 B-tree원리

 -주어진 값을 리스트의 중간점에 있는 값과 비교한다. 만약 그 값이 더 크면 리스트의 아래쪽  반을 버린다. 만약 그값이 더 작다면 위쪽 반을 버린다.

 -하나의 값이 발견될 때 까지 또는 리스트가 끝날 때까지 그와 같은 작업을 다른 반쪽에도 반복한다.

 

*다음과 같은 경우에는 인덱스 생성이 불필요 하다.

1)테이블이 작을 때

2)테이블이 자주 갱신될 때

 

인덱스문법

SQL> CREATE [BITMAP/UNIQUE/NON-UNIQUE/] INDEX emp_deptno_indx

ON emp(deptno);

 

비트맵 인덱스

비트맵 인덱스는 각 컬럼에 대해 적은 개수의 독특한 값이 있을 경우에 사용하는 것이 좋다.(ex 남,여의 값을 가지는 성별 컬럼)

비트맵 인덱스는 B-tree 인덱스가 사용되지 않을 경우에서 성능을 향상 시킨다.

테이블이 매우 크거나 수정/변경이 잘 일어나지 않는 경우에 사용할수 있다.

 

UNIQUE 인덱스

UNIQUE 인덱스는 인덱스를 사용한 컬럼의 중복값들을 포함하지 않고 사용할 수 있는 장점이 있다.

프라이머리키 와 UNIQUE 제약 조건시 생성되는 인덱스는 UNIQUE 인덱스이다.

 

NON-UNIQUE 인덱스

NON-UNIQUE 인덱스는 인덱스를 사용한 컬럼에 중복 데이터 값을 가질수 있다.

 

결합 인덱스

복수개의 컬럼에 생성할 수 있으며 복수키 인덱스가 가질수 있는 최대 컬럼값은 16개 이다.

SQL> CREATE UNIQUE INDEX emp_empno_ename_indx

ON emp(empno, ename);


인덱스의 삭제

인덱스의 구조는 테이블과 독립적이므로 인덱스의 삭제는 테이블의 데이터에는 아무런 영향도 미치지 않는다.

인덱스를 삭제하려면 인덱스의 소유자 이거나 DROP ANY INDEX권한을 가지고 있어야 한다.

인덱스는 ALTER를 할 수 없다.

SQL> DROP INDEX emp_empno_ename_indx;


인덱스 데이터사전

인덱스에 대한 정보는 USER_INDEXES 뷰 또는 USER_IND_COLUMNS뷰를 통해 검색할 수 있다.

 

SQL> SELECT index_name, index_type

FROM USER_INDEXES

WHERE table_name='EMP';

 

INDEX_NAME              INDEX_TYPE

-------------------     -----------

EMP_DEPTNO_INDX         BITMAP

EMP_PK_EMPNO            NORMAL



 

 

(2)VIEW 테이블

VIEW?

- 뷰는 하나의 가상테이블이다

- 뷰는 실제 데이터가 저장되지는 않지만 데이터를 관리 할 수 있다.

- 뷰는 복잡한 쿼리를 통해 얻을 수 있는 결과를 간단한 쿼리로 얻을 수 있게 한다.

- 한 개의 뷰로 여러 테이블에 대한 데이터를 검색 할 수 있다.

- 특정 평가 기준에 따른 사용자 별로 다른 데이터를 액세스할 수 있도록 한다.

 

뷰의 제한 조건

- 테이블에 NOT NULL로 만든 컬럼들이 뷰에 다 포함이 되 있어야 한다.

- ROWID, ROWNUM, NEXTVAL, CURRVAL등과 같은 가상컬럼에 대한 참조를 포함하고 있는 뷰에는 어떤 데이터로 INSERT 할 수 없다.

-WITH READ ONLY옵션을 설정한 뷰도 데이터를 갱신 할 수 없다.

-- 아래 뷰는 읽기만 가능하다.

SQL> CREATE OR REPLACE VIEW read_only

AS

SELECT empno, ename, deptno

FROM  emp

WHERE deptno = 10

WITH READ ONLY;

 

-WITH CHECK OPTION을 설정한 뷰는 뷰의 조건에 해당되는 데이터만 삽입, 삭제, 수정을 할 수 있다.

-----------부서 번호 10의 데이터를 조회 하는 뷰-------------

SQL> CREATE OR REPLACE VIEW check_option

AS

SELECT empno, ename, deptno

FROM  emp

WHERE deptno = 10

WITH CHECK OPTION ;

 

-- 부서 번호가 10인 사원만 INSERT, UPDATE할 수 있다.

SQL> INSERT INTO check_option(empno, ename, deptno)

VALUES (10005, 'jain', 30);

 

INSERT INTO check_option(empno, ename, deptno)

*

1행에 오류:

ORA-01402: 뷰의 WITH CHECK OPTION의 조건에 위배 됩니다

-----------------------------------------------------------------------

 

뷰 문법

CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW view_name

AS subquery

[WITH CHECK OPTION [CONSTRAINT 제약조건]]

[WITH READ ONLY]

 

-- 뷰 생성    

SQL> CREATE OR REPLACE VIEW name_query

AS

SELECT a.ename, b.dname

FROM  emp a, dept b

WHERE a.deptno = b.deptno

AND b.deptno = 20;

 

--------뷰를 이용한 조회----------

SQL> SELECT * FROM name_query;

 

ENAME                DNAME

-------------------- ----------

SMITH                RESEARCH

JONES                RESEARCH

 

(3)시퀀스의 이해 및 활용

시퀀스란?

-유일한 값을 생성해주는 오라클 객체이다

-시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성 할 수 있다.

보통 PRIMARY KEY 값을 생성하기 위해 사용한다.

-메모리에 Cache되었을 대 시퀀스값의 액세스 효율이 증가한다.

-시퀀스는 테이블과는 독립적으로 저장되고 생성된다.

 

시퀀스 생성

CREATE SEQUENCE sequence_name

     [START WITH n] - 시퀀스의 시작 값을 시정한다

     [INCREMENT BY n]  - 시퀀스의 증가 값을 지정한다

     [MAXVALUE n | NOMAXVALUE] - 시퀀스 최대값

     [MINVALUE n | NOMINVALUE] - 시퀀스 최소값

     [CYCLE | NOCYCLE] - 최대값 도달시 순환 여부

     [CACHE | NOCACHE] - CACHE 여부, 원하는 숫자만큼 미리 만들어 Shared Pool의      Library Cache에 상주시킨다.

시퀀스 수정 ALTER SEQUENCE sequence_name ...

시퀀스 삭제 DROP SEQUENCE seq_empno...


시퀀스 데이터 딕셔너리

USER_TABLES

USER_VIEWS

USER_SEQUENCE


CURRVAL 과 NEXTVAL

1)CURRVAL: 현재 값을 반환합니다.

2)NEXTVAL: 현재 시퀀스값의 다음 값을 반환합니다.


CURRVAL, NEXTVAL 사용하기

1)NEXTVAL로 새로운 값을 생성한다.

SELECT DEPT_DEPTNO_SEQ.NEXTVAL FROM DUAL;

NEXTVAL

-----------

10 


2)시퀀스의 현재값을 알아내기 위해서 CURRVAL을 사용한다

SELECT DEPT_DEPTNO_SEQ.CURRBAL FROM DUAL;

CURRVAL

-----------

10 



3)DEPT_DEPTNO_SEQ.CURRVAL을 조회할 때마다 시퀀스의 값이 계속 증가합니다. 증가치를 10으로 지정하였으므로 실행 할때마다 시퀀스 값은 10씩 증가합니다.

SELECT DEPT_DEPTNO_SEQ.CURRVAL FROM DUAL;

NEXTVAL

-----------

10 

SELECT DEPT_DEPTNO_SEQ.CURRVAL FROM DUAL;
20
SELECT DEPT_DEPTNO_SEQ.CURRVAL FROM DUAL;
30...

 

(4)SYNONYM(동의어)  

동의어를 사용하는 이유

1)데이터베이스의 투명성을 제공하기 위해서, 다른 유저의 객체 참조할 때 사용

2)객체의 긴 이름을 사용하기 편한 짧은 이름으로 해서 SQL코딩을 단순화

3)객체를 참조하는 사용자의 오브젝트를 감출 수 있기 때문에 보안을 유지할 수 있다.

 

종류

1)Private Synonym: 전용 시노님은 특정 사용자만 이용할 수 있다.

2)Public Synonym: 공용 기노님은 공용 사용자 그룹이 소유하며 그 데이터베이스에 있는 모든 사용자가 공유한다.



[출처]http://www.gurubee.net/oracle/sql

반응형
반응형

I. 그룹함수.

-SUM(합),AVG(평균),COUNT(총개수),MAX(최대값),MIN(최소값),STEDDEV(표준편차),VARIANCE

(분산)

-SELECT문에 그룹 함수를 사용하는 경우, 그룹 함수를 적용하지 않은 단순 컬럼은 올 수 없다.


GROUP BY

-어떤 컬럼 값을 기준으로 그룹함수를 적용해 줄지 기술해 주어야 할 경우에는 SELECT 문에 GROUP BY 절을 추가하되 GROUP BY 절 뒤에 해당 컬럼을 기술한다.

-GROUP BY절 뒤에 별칭 불가, 반드시 컬럼명 기술

EX)SELECT DEPTNO, AVG(SAL) : GROUP BY 절을 사용하지 않으면 개수가 매치되지 않음

   FROM EMP

   GROUP BY DEPTNO;


HAVING 조건

-WHERE은 특정 조건에 부합하는 자료만을 검색할 때 사용하는 절, 반면 HAVING절은 그룹 함수 사용 시 그룹 함수를 적용해서 나온 결과값 중에서 원하는 조건에 부합하는 자료만 산출할 때 사용하는 절

EX)부서의 최대값과 최소값을 구하되 최대 급여가 2900이상인 부서만 출력합니다.

부서:DEPTNO

급여:SAL

SELECT DEPTNO, MAX(SAL), MIN(SAL)

FROM EMP

GROUBY DEPTNO

HAVING MAX(SQL) > 2900;


II. 조인

- 한개 이상의 테이블에서 데이터를 조회하기 위해서 사용되는 것을 조인이라한다.

조인의 필요성: 데이터베이스에서는 데이터가 중복되면 여러 가지 이상 현상이 발생하기 때문에 데이터가 중복되지 않도록 하기 위해서 2개 이상의 테이블로 나누어서 정보를 저장해 놓는다. 하지만, 원하는 정보를 얻어오려면 여러 개의 테이블을 조인해야 한다.


 Cross Join

- 2개 이상의 테이블이 조인될 때 where절에 의해 공통되는 컬럼에 의한 결합이 발생하지 않는 경우를 의미한다. 그렇기에 테이블 전체 해의 전체 컬럼이 조인되는 경우입니다.

EX)다음은 Cross Join으로 SELECT문의 FROM절에 사원(EMP) 테이블과 부서(DEPT) 테이블을 콤마로 연결하여 연속적으로 기술하는 방법입니다.

Select *

From emp, dept;


 Equi Join

- 가장 많이 사용하는 조인 방법으로, 조인 대상이 되는 두 테이블에서 공통적으로 존재하는 컬럼의 값이 일치되는 행을 연결하여 결과를 생성하는 방법입니다.

-사원(EMP) 테이블과 부서(DEPT) 테이블의 공통 컬럼인 DEPTNO의 값이 일치되는 조건을 WHERE절에 기술하여 사용하였습니다. 두 테이블을 조인하려면 일치되는 공통 컬럼을 사용해야 합니다.컬럼이 이름이 같으면 혼동이 오기 때문에 컬럼 이름 앞에 테이블 이름을 기술합니다.

EX)다음은 사원 정보를출력할 때 각 사원이 소속된 부서의 상세 정보를 출력하기 위해 두 개의 테이블을 조인한 예입니다.

SELECT * : 컬럼이 동일한 경우에는 .Table 또는 .별칭 사용

FROM EMP, DEPT

WHERE EMP.DETNO = DEPT.DEPTNO;

 

 Non-Equi Join

- 조인 조건의 특정 범위 내에 있는지를 조사하기 위해 where절의 조인 조건으로 = 연산자와 비교 연산자를 사용합니다.

 

EQUI JOIN과 NON-EQUI JOIN의 차이점

•  EQUI JOIN : JOIN조건에 서로 다른 조건(=)을 가진 데이터를 JOIN해서 가져오는 방법

•  NON-EQUI JOIN : 같은 조건이 아닌 크거나 작거나 하는 경우 JOIN을 수행하는 방법


 Self Join

- 조인은 두개 이상의 서로 다른 테이블을 연결하기도 하지만 하나의 테이블 내에서 조인을 해야만 자료를 얻을 수 있는 경우도 있습니다. Self Join이란 말 그대로 자기 자신과 조인을 맺는 것

-별칭을 지정해서 두테이블이 존재하는 것처럼 사용

Ex)select employee.ename, manager.ename

   From emp employee, emp manager

   Where employee.mgr = manager.empno;


 Outer Join

- 2개 이상의테이블이 조인될 때 어느 한쪽의 테이블에는 해당하는 데이터가 존재하는데 다른 쪽 테이블에는 데이터가 존재하지 않는 경우 그 데이터는 출력되지 않는 문제를 해결하기 위해서 사용되는 조인 기법


 ANSI Join

1)ANSI Cross Join: ANSI구문을 사용하면 쉼표(,)없이 CROSS JOIN이라고 원하는 조인 타입을 명확하게 지정합니다.

2)ANSI inner Join: 동일 컬럼을 기준으로 조인하기 위한 EQUI JOIN을 ANSI조인에서는 FROM 다음에 INNER JOIN 이란 단어를사용하여 조인할 테이블 이름을 명시하고 ON절을 사용하여 조인 조건을 명시합니다. ‘=’(equal) 비교를 통해 같은 값을 가지는 로우를 연결하여 결과는 구하는 형태.

Ex)SELECT ENAME, DNAME

   FROM EMP INNER JOIN DEPT

   ON EMP.DEPTNO=DEPT.DEPTNO;

-ON : 조인 조건이나 논리 연상, 서브쿼리를 지정할 수 있다.

-USING절 : “ON EMP.DEPTNO = DEPT.DEPTNO”와 같이 작성하는 대신 “USING (DEPTNO)”라고 작성할 수 있다. USING 절은 두 테이블의 컬럼값이 동일할 때 조인되도록 지정한다.

주의할점: 테이블명을 명시할수도 별칭을 사용할 수도 없다.

3)Natural Join: USING이나 ON절보다

Ex)SELECT ENAME, DNAME

FROM EMP NATURAL JOIN DEPT;

 

4)AINSI Outer Join

-LEFT,RIGHT,FULL 3가지를 지원

-Outer Join은 어느 한쪽 테이블에는 해당하는 데이터가 존재하는데 다른쪽 테이블에는 데이터가 존재하지 않는 경우 그 데이터가 출력되지 않는 문제점을 해결하기 위해 사용하는 조인 기법.

 

III. 서브쿼리

- 서브쿼리란 SELECT문장 절 안에 포함된 또 하나의 SELECT문장. 서브쿼리를 포함하고 있는 쿼리문을 메인쿼리, 포함된 또 하나의 쿼리를 서브쿼리라 한다.

1)단일행 서브 쿼리는 수행 결과가 오직 하나의 로우(행, ROW)만을 반환하는 서브쿼리를 갖는 것

2)다중행 서브 쿼리는 서브 쿼리에서 반환되는 결과가 하나 이상의 행일때 사용하는 서브쿼리입니다. 종류: IN(포함), ANY=SOME(하나 이상 일치), ALL(모든값 일치), EXIST(하나라도 존재,참)

 


반응형

+ Recent posts