가. 관계형 데이터베이스 관리 시스템(RDBMS) 설치하기
1. MariaDB 설치하기
[root@localhost ~]# yum -y install mariadb-server
2. MariaDB의 언어셋을 UTF8로 설정
- UTF-8은 한글 1글자 3byte의 크기
- DB의 언어셋를 UTF8로 설정하지 않으면 한글 깨짐
[참고] DB 관련 리눅스 추가 내용
/etc/my.cnf: MariaDB의 설정파일
/usr/libexec/mysqld: MariaDB 서비스 데몬 (패키지 mariadb-server)
/usr/bin/mysql: MariaDB 클라이언트 (패키지 mariadb)
/var/lib/mysql: 리눅스용 MariaDB 서버의 위치(기본값)
symbolic-links=0 밑에 4개의 설정을 추가
[root@localhost ~]# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
collation-server=utf8_general_ci
character-set-server=utf8
skip-character-set-client-handshake
#bind-address=127.0.0.1
이미지. 1 /etc/my.cnf 설정 화면
3. MariaDB 활성화 및 시작하기
MariaDB를 먼저 활성화 시키고 DB를 시작 그리고 상태 값 확인
1) Maria DB 활성화 : 서버가 재부팅 후에도 DB가 자동 실행
[root@localhost ~]# systemctl enable mariadb
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
2) Maria DB 시작
[root@localhost ~]# systemctl start mariadb
3) Maria DB 상태 확인 : enabled 와 active 키워드 확인
[root@localhost ~]# systemctl status mariadb
● mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; ven dor preset: disabled)
Active: active (running) since 목 2023-10-26 23:14:13 KST; 24s ago
Process: 8554 ExecStartPost=/usr/libexec/mariadb-wait-ready $MAINPID ( code=exited, status=0/SUCCESS)
Process: 8471 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir %n (cod e=exited, status=0/SUCCESS)
Main PID: 8553 (mysqld_safe)
CGroup: /system.slice/mariadb.service
├─8553 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
└─8754 /usr/libexec/mysqld --basedir=/usr --datadir=/var/l...
10월 26 23:14:11 localhost.localdomain mariadb-prepare-db-dir[8471]: ...
10월 26 23:14:11 localhost.localdomain mysqld_safe[8553]: 231026 23:...
10월 26 23:14:11 localhost.localdomain mysqld_safe[8553]: 231026 23:...
10월 26 23:14:13 localhost.localdomain systemd[1]: Started MariaDB d...
Hint: Some lines were ellipsized, use -l to show in full.
4) TCP 실시간 세션 및 서비스 확인 : Maria DB 서비스 포트는 3306/TCP
[root@localhost ~]# ss -nlt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 50 *:3306 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 100 [::]:8009 [::]:*
LISTEN 0 100 [::]:8080 [::]:*
LISTEN 0 128 [::]:80 [::]:*
4. MariaDB 접속
mysql 로 MariaDB 접속 시, root 계정 로그인 요청 없음
[root@localhost ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
1) DB 상태 확인 및 utf8 설정 확인
MariaDB [(none)]> status
이미지. 2 status 값 확인 화면
2) DB 에서 나오기
MariaDB [(none)]> quit
Bye
5. 관리자 비번 설정
mariadb를 설치하면 DB 관리자(root)의 비밀번호가 없다. 그렇기 때문에
사용하기 위해서는 반드시 관리자의 비밀번호를 설정을 해야한다.
- mysqladmin: 여러 가지 역할을 하는 관리자용 프로그램
형식 : mysqladmin [OPTIONS] command command....
mysqladmin -h 호스트명 -u 사용자 -p비밀번호 password [new-password]
● h localhost : DBMS 서버가 localhost 있으면 생략 가능
● u root : 현재 mysqladmin 명령어를 사용하는 사용자가 root이면 생략가능
[root@localhost ~]# mysqladmin -p password
Enter password: ← 비번이 없기 때문에 엔터
New password: ← 패스워드 입력
Confirm new password: ← 패스워드 재 입력
[root@localhost ~]#
비밀번호를 설정한 후 mysql로 접속하면 접속이 안되면 정상적으로 비밀번호가 설정 됨
[root@localhost ~]# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[root@localhost ~]#
1) 접속 방법:
root@localhost ~]# mysql --help
Usage: mysql [OPTIONS] [database]
Default options are read from the following files in the given order:
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf
-h, --host=name Connect to host.
-u, --user=name User for login if not current user.
-p, --password[=name]
1.1. mysql -h 호스트명 -u 사용자 -p비밀번호
1.2. mysql -h 호스트명 -u 사용자 -p
1.3. mysql -u 사용자 -p
1.4. mysql -p
예시: 패스워드가 P@sswOrd 일 경우
root@localhost ~]# mysql -h localhost -u root -pP@ssw0rd
MariaDB [(none)]> exit
[root@localhost ~]# mysql -u root -pP@ssw0rd ← DB서버가 로컬에 있으므로 -h localhost 는 생략 가능
MariaDB [(none)]> exit
[root@localhost ~]# mysql -pP@ssw0rd ← 현재 사용자 root이므로 -u root 는 생략 가능
MariaDB [(none)]> exit
[root@localhost ~]# mysql -p ← -pP@ssw0rd 가 취약하므로 비밀번호를 안보이게 입력 받아서 접속
Enter password: ← P@ssw0rd
MariaDB [(none)]> exit
[root@localhost ~]# mysql ← -p 옵션이 없기 때문에 에러 발생
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
6. DB서버 자동 접속 설정하기
자신의 홈디렉터리($HOME)에 .my.cnf 파일을 아래처럼 만들어 놓으면 호스트명, 사용자, 비밀번호
입력을 생략하고 DBMS(mariadb) 서버에 자동으로 접속
[root@localhost ~]# vi .my.cnf
[client]
host = localhost # ← -h localhost
user = root # ← -u root
password = P@ssw0rd # ← -pP@ssw0rd
이미지. 3 Home 디렉토리에서 .my.cnf 설정 파일 확인
1) 설정파일이 저장되면 권한(Permission) 변경
1.1. 변경 전
[root@localhost ~]# ls -al .my.cnf
-rw-r--r--. 1 root root 60 10월 26 23:42 .my.cnf
1.2. 파일 권환: 600 변경
[root@localhost ~]# chmod 600 .my.cnf
1.3. 변경 후
[root@localhost ~]# ls -al .my.cnf
-rw-------. 1 root root 60 10월 26 23:42 .my.cnf
2) 자동 접속 되는지 확인
[root@localhost ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 7
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
7. 불필요한 mysql.db 사용자 및 DB 설정(% 계정) 삭제
● 비밀번호가 없는 사용자 삭제
● % 계정 삭제
1) DB 목록 확인 (DB 폴더: 파일을 저장)
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
2) TB 목록 확인 (TB 파일: 데이터 저장)
MariaDB [(none)]> SHOW TABLES;
3) mysql DB의 테이블 확인
- db 테이블: 사용자 DB에 권한이 저장된 테이블
- user 테이블: 사용자 접속 정보가 저장된 테이블
MariaDB [mysql]> SHOW TABLES;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db | ← 사용자 계정이 연결된 데이터베이스
| event |
| func |
... 중간 생략 ...
| time_zone_transition |
| time_zone_transition_type |
| user | ← 사용자 접속 정보가 저장된 테이블
+---------------------------+
24 rows in set (0.00 sec)
3.1. mysql DB로 접속
MariaDB [(none)]> use mysql
3.2. 패스워드 없는 사용자 계정 삭제
3.2.1. user 테이블에서 host,user,password 컬럼 출력 확인
MariaDB [mysql]> SELECT host, user, password FROM user;
+-----------------------+------+-------------------------------------------+
| host | user | password |
+-----------------------+------+-------------------------------------------+
| localhost | root | *C2E5C800B52D79E092646480D96CE6DC29EE78DC |
| localhost.localdomain | root | |
| 127.0.0.1 | root | |
| ::1 | root | |
| localhost | | |
| localhost.localdomain | | |
+-----------------------+------+-------------------------------------------+
6 rows in set (0.00 sec)
3.2.2. user 테이블에서 password의 값이 없는 사용자 5명 모두 삭제
MariaDB [mysql]> DELETE FROM user WHERE password='';
Query OK, 5 rows affected (0.00 sec)
3.2.3. 패스워드 없는 사용자 삭제 확인
MariaDB [mysql]> SELECT host, user, password FROM user;
+-----------+------+-------------------------------------------+
| host | user | password |
+-----------+------+-------------------------------------------+
| localhost | root | *C2E5C800B52D79E092646480D96CE6DC29EE78DC |
+-----------+------+-------------------------------------------+
1 row in set (0.00 sec)
3.3. 모든 호스트에서 모든 데이터베이스에 액세스할 수 있는 사용자 계정 삭제
MariaDB [mysql]> SELECT host, user, db from db;
+------+------+---------+
| host | user | db |
+------+------+---------+
| % | | test |
| % | | test\_% |
+------+------+---------+
2 rows in set (0.00 sec)
[참고] MariaDB에서 기본적으로 생성되는 두 개의 사용자 계정
※ % : 모든 호스트에서 모든 데이터베이스에 액세스할 수 있는 사용자 계정
※ % : 모든 호스트에서 test 데이터베이스에만 액세스할 수 있는 사용자 계정
3.3.1. db 테이블에 저장된 모든 데이터 삭제
MariaDB [mysql]> DELETE FROM db;
Query OK, 1 row affected (0.00 sec)
3.3.2. db 테이블에 확인
MariaDB [mysql]> SELECT host,user,db FROM db;
Empty set (0.00 sec)
3.3.3. 권한을 다시 읽어들이기
MariaDB [mysql]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
나. DB 및 테이블 만들기
DB: 테이블을 저장하는 공간(디렉터리)
● DB 확인: SHOW DATABASES
● DB 생성: CREATE DATABASE
● DB 삭제: DROP DATABASE
1. DB 생성하기:
형식 : CREATE DATABASE DB명
MariaDB [(none)]> CREATE DATABASE tempdb;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| tempdb |
| test |
+--------------------+
5 rows in set (0.00 sec)
2. DB 삭제 하기
MariaDB [(none)]> DROP DATABASE tempdb;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
3. 테이블 생성하기:
형식: CREATE TABLE TB명 ( 컬럼명 자료형, .... )
3.1. 생성한 tempdb DB 사용(접속)
MariaDB [(none)]> USE tempdb;
3.2. 테이블 만들기:
● 테이블 이름: member
● 컬럼명: no, 데이터 타입 : int, 옵션 : 번호 자동증가, 제약조건 : primary key
● 컬럼명: name, 데이터 타입 : varchar(10), 제약조건: not null
● 컬럼명: phone, 데이터 타입 : varchar(15)
MariaDB [tempdb]> CREATE TABLE member(
-> no int not null auto_increment primary key,
-> name varchar(10) not null,
-> phone varchar(15),
-> email varchar(50) not null
-> );
Query OK, 0 rows affected (0.01 sec)
3.3. 테이블 확인
MariaDB [tempdb]> SHOW TABLES;
+------------------+
| Tables_in_tempdb |
+------------------+
| member |
+------------------+
1 row in set (0.00 sec)
3.4. 멤버 테이블 구조 확인
MariaDB [tempdb]> DESC member;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| no | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| phone | varchar(15) | YES | | NULL | |
| email | varchar(50) | NO | | NULL | |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
3.5. 자료 추가하기: INSERT
형식: INSERT INTO TB명 VALUES(값, ...);
INSERT INTO member VALUES(NULL, '홍길동', '010-1111-2222', 'mrhong@naver.com');
INSERT INTO member VALUES(NULL, '홍길순', '010-2222-3333', 'koreasoon@daum.net');
3.6. 자료 검색하기: SELECT
형식: SELECT 컬럼명 FROM TB명;
MariaDB [koreadb]> SELECT * FROM member;
MariaDB [koreadb]> SELECT no, name FROM member;
MariaDB [koreadb]> SELECT no, phone, name FROM member;
3.7. 자료 삭제하기: DELETE
형식1: DELETE FROM TB명; -- 자료 전체가 모두 삭제
형식2: DELETE FROM TB명 WHERE 컬럼명 = '값'; -- 컬럼명에 해당하는 자료가 삭제
member 테이블에서 no의 값이 1인 레코드(행)를 삭제
MariaDB [koreadb]> DELETE FROM member WHERE no=1;
3.8. 자료 수정하기: UPDATE
형식1: UPDATE TB명 SET 컬럼명='값'; -- 자료 전체가 모두 수정
형식2: UPDATE TB명 SET 컬럼명='값' WHERE 조건; -- 조건에 해당하는 자료가 수정
3.8.1. member 테이블에서 홍긴순의 no 의 값을 1로 변경
MariaDB [koreadb]> UPDATE member SET no=1 WHERE name='홍길순';
주의! 조건식(WHERE)을 이름을 할 경우 중복된 이름이 있을 경우 관련 된 이름들에 적용
그래서 보통 조건식에서 ID를 사용
3.8.2. member 테이블에서 no 의 값이 1인 회원의 전화번호를 010-1234-1234로 변경
MariaDB [koreadb]> UPDATE member SET phone='010-1234-1234' WHERE no = 1;
'정보 보안 수업 > Lab 구성' 카테고리의 다른 글
정보 보안 랩(Lab) 파트 IV: 네트워크 실습 구성 (2) | 2023.10.28 |
---|---|
정보 보안 랩(Lab) 파트 III: Oracle DB 11g XE 설치 (0) | 2023.10.27 |
정보 보안 랩(Lab) 파트 III: 데이터베이스 (2) | 2023.10.27 |
정보 보안 랩(Lab) 파트 II: 서버 필수 패키지 설치 (2) | 2023.10.26 |
정보 보안 랩(Lab) 파트 I: 랩(Lab) 구성도 및 서버 설정하기 (0) | 2023.10.25 |