728x90

[1,2,3교시 - 데이터베이스 보안]

/ 오라클 데이터 딕셔너리
- 전용 뷰(view) 접두어 : user_, all_, dba_

/ SQL, PL/SQL 풀네임
- SQL : Structured Query Language
- PL/SQL : Procedural Language

/ 현재 계정의 모든 테이블 목록 쿼리
# select * from tab;

/ 테이블의 데이터 조회 쿼리
- SELECT 가져올항목(모두 가져올 경우 *) FROM 테이블이름 WHERE 조건;
- ex) SELECT * FROM EMPLOYEES WHERE first_name = 'Steven';
- EMPLOYEE테이블에서 first_name이 'Steven'인 데이터를 모두 가져와라

/ 조건절 LIKE
- ex) SELECT * FROM EMPLOYEES WHERE first_name LIKE 'St%';
- 'St'로 시작하는 문자열 검색
- ex) SELECT * FROM EMPLOYEES WHERE first_name LIKE '%St';
- 'St'로 끝나는 문자열 검색

- ex) SELECT * FROM EMPLOYEES WHERE first_name LIKE '%St%';
- 'St'문자열이 들어가는(St로 시작하고 끝나는) 문자열 검색

/ USER_CONSTRAINTS 데이터 딕셔너리
- 제약조건을 위배하면 오류 메시지에 제약 조건명만 출력되는데, 이때 오라클이 부여한 제약 조건명으로는 어떤 제약 조건을 위반했는지 알 수 없다.
- 이때 USER_CONSTRAINTS를 검색하면 확인할 수 있다.
# DESC USER_CONSTRAINTS;
- TABLE_NAME : 테이블명
- CONSTRAINT_NAME : 제약조건명
- CONSTRAINT_TYPE : 기본키/외래키 정보
- R_CONSTRAINT_NAME : 외래키인 경우 PRIMARY KEY를 참조했는지 
- STATUS : 제약조건 활성화 정보
- SEARCH_CONDITION : 검사 제약 조건으로 지정된 조건

/ 특정 테이블에 지정된 제약조건 검색
# SELECT 컬럼명 FROM USER_CONSTRAINTS WHERE TABLE_NAME='테이블명';

/ 테이블 예명(alias)
- 쿼리 작성 시 테이블 이름이 너무 길 경우 예명을 줄 수 있다.
- 사용법 : 테이블 이름 뒤에 예명을 따로 적어준다.
- ex) SELECT * FROM USER_CONSTRAINTS C1 WHERE TABLE_NAME='EMPLOYEES';

/ 수업 때 진행 한 쿼리
- USER_CONSTRAINS : 유저가 소유한 모든 제약 조건을 볼 수 있다.
- USER_CONS_COLUMNS : 컬럼에 할당된 제약 조건을 볼 수 있다.
- 아래는 EMPLOYEES테이블의 제약조건을 검색하는 쿼리이다.

SELECT
    c2.column_name,         -- 컬럼명
    c1.constraint_name,     -- 제약조건명
    c1.constraint_type,     -- 기본키/외래키 정보
    c1.search_condition,    -- 검사 제약 조건으로 지정된 조건
    c1.r_constraint_name    -- 외래키인 경우 PRIMARY KEY를 참조했는지 
FROM
    user_constraints  c1,
    user_cons_columns c2
WHERE
        c1.constraint_name = c2.constraint_name
    AND c1.table_name = 'EMPLOYEES'
ORDER BY 1;

- 결과

 

/ 실습 문제
- USER_TABLES를 통해 'employees'테이블의 테이블스페이스 및 레코드 건수, 몇 개의 block으로 이루어 졌는지, 평군 row size, 최근 통계정보 생성일자를 조회하시오.
- 참고 : USER_TABLES(사용자가 작성한 테이블 확인하는 뷰), USER_TAB_COLUMNS

select tablespace_name, num_rows, blocks, last_analyzed from user_tables where table_name = 'EMPLOYEES';

- 아래의 쿼리로도 확인가능하다.

SELECT TABLESPACE_NAME, NUM_ROWS, BLOCKS, last_analyzed FROM ALL_TABLES WHERE TABLE_NAME='EMPLOYEES';

- 참고 링크

 

/ 여러 테이블에 작업 할 쿼리를 여러개 만드는 쿼리 예제

SELECT 'DROP TABLE '|| TABLE_NAME || ' CASCADE SONSTRAINTS;' FROM USER_TABLES;

 

/ dba_profiles
- 로그인하는 계정 정보 조회

SELECT RESOURCE_NAME, RESOURCE_TYPE, LIMIT FROM DBA_PROFILES;

- 비밀번호 기한을 제한없음으로 변경

ALTER PROFILE default LIMIT PASSWORD_LIFE_TIME UNLIMITED;

- 결과



​/ DBA_PROFILES 테이블 뷰
- PASSWORD_LIFE_TIME : 비밀번호 유효 기간
- PASSWORD_REUSE_TIME : 암호가 재사용 될 때까지의 날 수
- PASSWORD_REUSE_MAX : 암호가 재사용 될 때까지의 날 수
- PASSWORD_VERIFY_FUNCTION : 비밀번호 복합성 검사를 수행할 PL/SQL
- PASSWORD_LOCK_TIME : 암호가 기간만료되어 계정이 잠겨진 채로 남아 있었던 일수
- PASSWORD_GRACE_TIME : 유예기간
- 참고 링크

/ 프로파일 만들기 실습

CREATE PROFILE KIMYJ limit 
FAILED_LOGIN_ATTEMPTS 5     -- 로그인 실패 횟수
PASSWORD_LOCK_TIME 3        -- 암호가 기간 만료되어 계정이 잠겨진 채로 남아 있었던 날 수
PASSWORD_LIFE_TIME 20       -- 날 수로 표시한 암호의 수명으로 이 기간이 지나면 기간 만료됨
CPU_PER_SESSION 2000        -- 1/100 초 단위로 측정한 총 CPU이용시간
;

- 결과 확인

 


 

[4,5교시 - 시스템 보안]

/ cron.daily
# cd /etc/cron.daily

/ at
- 사용법 : at 옵션 시간
- 사용법 : at 시간 날짜 -f test.sh
- ex) at 1410 21122021 : 2021년 12월 21일 오후2시 10분
- t옵션을 사용하는 경우
# at -t 202112211410 : 2021년 12월 21일 오후2시 10분
- 지금부터 1분후에 실행 : at now+1 minutes

/ at 실습 1
# at -t 202205191800   --2022년 5월 19일 오후6시에 한번 실행
# echo "Hello!"
# mkdir at_test

 

/ at 실습 2
# at now+2 minutes


/ at 생성 목록
# at -l

 

/ at 실행 예정 항목 삭제
# at -d 항목번호

 

/ crontab 실습
- 매월 28일 15시 00분에 user이름 'wednesday'를 만들기
# 0 15 28 * * root useradd wednesday
- '/home'디렉토리 밑에 생긴 'wednesday'디렉토리를 매월 28일 15시 01분에 'wednesday'디렉토리가 '/backup'디렉토리에 백업되도록 하여라
# 1 15 28 * * root cp /home/wednesday /backup
- 매일 새벽3시에 'rdate -s time.bora.net'이 실행되게 하여라
# 0 3 * * * rdate -s time.bora.net
- 매시 1분에 시간별 액션을 실행한다.
# 1 * * * 8 액션
- 매주 월~금 11:59에 백업 스크립트를 실행하게끔한다.
# 59 11 * * 1-5 백업스크립트
- 9시~17시 사이에 매 15분 마다 프로그램 실행된다.
# */15 9-17 * * * 프로그램
- 매월 1~15일 정오와 20~25일 정보, 그리고 17일의 정보에 실행된다.
# 0 12 1-15,20-25,17 * * 프로그램
- 1분마다 시간별 액션을 실행한다.
# * * * * * 액션

/ at 실습
- 현재 시점에서 1분후에 mkdir 명령어를 실행해서 testdir이 만들어지도록
# at now+1 minutes [엔터] mkdir testdir [엔터] 컨트롤+D
- 2022년 5월 19일 오후7시에 testfile이 만들어지도록 하여라
# at -t 202205191900 [엔터] touch testfile [엔터] 컨트롤+D

/ 복습 - dns
- dns가 설치되어 있는지
# rpm -qa | grep bind
- yum 설치가 가능한지
# yum list bind bind-chroot
- 시작, 활성화, 활성여부확인
# systemctl start     named
# systemctl enable named
# systemctl status named
- 53포트를 사용하는 네트워크 인터페이스를 확인하여라
# netstat -antup | grep 53
- dns 설정파일 위치 확인
# rpm -qc bind
- name편집(13, 14, 21번째 줄)
# vi /etc/named.conf
# listen-on port 53 { any; };
# listen-on-v6 port 53 { none; };
# allow-query     { any; };
- 편집 후 conf파일에 문제가 없는지 체크(똑 떨어지면 문제가 없는것)
# named-checkconf
- DNS 서버 재시작
# systemctl restart named
- nslookup, dig 확인
# nslookup www.naver.com 192.168.111.150
# dig @192.168.111.150 www.naver.com
- netstat으로 LISTEN확인
# netstat -antu | grep 53
- 방화벽 설정
- firewall-config > 영구적 > 서비스의 dns체크 > 옵션에서 Firewalld 리로드
- 방화벽 확인
# firewall-cmd --list-all
- 호스트pc에서 nslookup확인
- cmd에서 nslookup www.google.com 192.168.111.150


/ 실습대비 
- CLI 모드 서버 설치 : 최소설치, net-tools와 bind-utils를 설치하여 ifconfig와 nslookup이 실행되도록 한다.
- yum -y install net-tools bind-utils로 설치해준다.

 

 

 

 

728x90

+ Recent posts