교육/SQL

Day 23 (SQL)

Mr.6_냥아치 2019. 12. 18. 21:11
반응형

root directory : 

루트 디렉토리(root directory, 문화어: 뿌리등록부)주로 유닉스 유닉스-계열 운영 체제에서 사용되는 개념인데, 컴퓨터 파일 시스템에서 계층 구조의 첫번째 또는 최상위 디렉토리 가리킨다. 트리 구조 줄기에 비유할  있는데모든 가지들이 뻗어 나오는 시작점의 역할을 한다.

 

document root : 

웹서버의 최상위 폴더

DOCUMENT_ROOT  상에서 최상위 폴더가 되는 OS 상의 절대경로를 말한다.

실제로 DOCUMENT_ROOT라는 이름의 폴더가 있는 것은 아니다환경변수(설정값)라고 생각하면 된다.

PHP에서는 $_SERVER['DOCUMENT_ROOT'] 변수에 들어 있다.

 

server root : 

보통 root 사용자가 아파치를 시작한 요청을 서비스하기위해 User 지시어로 지정한 사용자로 변환한다. root 실행하는 명령어가 있다면, root 이외의 사용자가 수정하지 못하도록 주의해야 한다 파일들을 root   있어야 하고디렉토리와 모든 상위디렉토리도 마찬가지다예를 들어, ServerRoot /usr/local/apache 사용한다면 root 사용자가 다음과 같이 디렉토리를 만들길 제안한다:

mkdir /usr/local/apache

cd /usr/local/apache

mkdir bin conf logs

chown 0 . bin conf logs

chgrp 0 . bin conf logs

chmod 755 . bin conf logs

 

그러면 /, /usr, /usr/local  root만이 수정할  있다. httpd 실행파일을 설치할때 다음과 같이 보호해야 한다:

cp httpd /usr/local/apache/bin

chown 0 /usr/local/apache/bin/httpd

chgrp 0 /usr/local/apache/bin/httpd

chmod 511 /usr/local/apache/bin/httpd

 

htdocs 하위디렉토리는 다른 사용자들이 수정할  있도록 만들  있다 -- root 그곳에 있는 파일을 실행하지도만들지도 않아야 한다.

root 아닌 사용자가 root 실행하거나 쓰기가능한 파일을 수정할  있다면 시스템의 root 권한을 훔칠  있다예를 들어누군가 httpd 실행파일을 변경하였다면 다음번 시작할때 임의의 코드를 실행하게 된다. logs 디렉토리가 (root 아닌 사용자에게쓰기가능하다면 누군가 로그파일을 다른 시스템파일로 심볼링크를 걸어서 root 파일에 임의의 자료를 덮어쓸  있다로그파일이 (root 아닌 사용자에게쓰기가능하다면 누군가 로그에 이상한 자료를 기록할  있다.

 

=====================================================================

 

뷰는 DBA나 관리자 / 튜너가 사용하는 지시어다.

segment는 물리적인 영역을 가진 object로 배운건 table과 index가 있다.

object는 구분이 가능하게 명칭을 부친것으로 view도 object중 하나이다.

 

뷰 생성/확인

뷰는 세그먼트가 아니기 때문에 실제로 저장하지 않는다.

 

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW 뷰이름 (컬럼)

AS (SELECT 문장 : sub query)

[WITH CHECK OPTION [CONSTRAINT 조건명]]

[WITH READ ONLY [CONSTRAINT 조건명]];

 

CREATE [OR REPLACE]// CREATE만 사용하면 뷰를 생성하고CREATE OR REPLACE를 사용하면 뷰를 삭제하고 다시 생성하는 것이다.  OR REPLACE는 생략이 가능하지만 굳이 안해주는 것이 좋다. Day에서 작성한 TABLE생성시 DROP후에  CREATE해주는 것과 같은 이유이다.

[FORCE|NOFORCE]는 noforce가 default이다. force를 사용하게 되면 base table이 존재하지 않아도 강제적으로 view를 생성하는 것이다.

 

AS (SELECT 문장 : sub query)는 참고할 base테이블을 지정하는 부분이다. 여기서 SELECT부분은 subquey를 작성하듯이 적는다.

 

실제로 view와 table은 같은 역할을 한다고도 할수있다. 따라서 view에서도 DML문을 사용가능하다. 다만 차이는 segment로서 실제 존재 하는 것이냐 아니냐 하는 차이만 잇다. 제약조건은 참조하는 테이블의 조건을 따라간다.

 

SELECT view_name, text FORM user_views;

존재하는 뷰의 이름과 참조하는 테이블혹은 조건을 볼수있다.

 

GRANT를 사용하면 권한을 부여할 수 있고 REBVORK를 사용하면 권한을 제거한다.

단일 뷰일때 뷰에서 참조할수없는 값도 INSERT INTO를 사용해서 추가할수있다. 하지만 뷰에서는 볼수없다. 왜냐하면 뷰에 값을 생성하는것이 아니라 참조하는 테이블에 값이 추가되는 것이다.

이는 무결성의 문제가 아니라 업무권한을 월권하는 것으로 업무의 문제이다.

 

뷰에서 참조할수없는 값이 입력되는 것을 막는 것이 WITH CHEC OPTION CONSTRAINT 제약조건명; 지시어이다.  이렇게 작성하면 뷰에서 참조할 테이블의 조건(where절의 값)즉 뷰를 통해 검색되지 않는 데이터는 입력할수없다.

 

뷰 생성
뷰의 정보를 확인하는 컬럼크기조절

 

실습 25

1. 사원의 연봉을 검색할 수 있는 뷰를 생성한다.



2. 학생의 학점 4.5점 만점으로 환산된 정보를 검색할 수 있는 뷰를 생성한다.



3. 각 과목별 평균 점수를 검색할 수 있는 뷰를 생성한다.



4. 각 직원과 관리자의 이름을 검색할 수 있는 뷰를 생성한다.



5. 각 과목별로 평가 점수가 F인 학생을 검색할 뷰를 생성한다.



6. 각 과목별로 기말고사가 일등인 학생의 명단을 검색할 뷰를 생성한다.



7. 물리학과 교수의 과목을 수강하는 학생의 명단을 검색할 뷰를 생성한다.

 

뷰의 이름과 뷰를 구성하는 테이블 값을 확인한다.

 

중복된 테이블명이 있을시에는 테이블 생성이 되지 않는다.

 

중복된 테이블을 삭제하고 생성한다.

반응형