MariaDB 설치 150 150 phobe

MariaDB 설치

Rocky Linux 기본 리포지토리 10.11.11 버전 설치.
설치 후 소켓 파일을 /var/run 에 생성하도록 조치.

  1. localhost 에서 사용하도록 설정.
  2. 두 가지 인증 플러그인을 설정 – mysql_native_password, unix_socket
MariaDB [mysql]> SHOW CREATE USER 'root'@'localhost';
+-----------------------------------------------------------------------------------------------+
| CREATE USER for root@localhost                                                                                                       
+-----------------------------------------------------------------------------------------------+
| CREATE USER `root`@`localhost` IDENTIFIED VIA mysql_native_password USING '**' OR unix_socket |
+-----------------------------------------------------------------------------------------------+
1 row in set (0.000 sec)

MariaDB [mysql]> CREATE USER 'username'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('비밀번호') OR unix_socket;

mysql_native_password : 비밀번호 기반 인증을 의미하며, USING PASSWORD(‘비밀번호’)로 설정
OR unix_socket : 운영체제 사용자 인증을 병행하도록 설정

~]# vi /etc/my.cnf
#
# This group is read both both by the client and the server
# use it for options that affect everything
#
[client-server]

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

[root@204 ~]# ll /etc/my.cnf.d
합계 40
-rw-r--r--. 1 root root   42 2025  2  8 auth_gssapi.cnf
-rw-r--r--. 1 root root  387 10  9  16:25 client.cnf
-rw-r--r--. 1 root root  763 2025  1 30 enable_encryption.preset
-rw-r--r--. 1 root root 1498 10  9  16:26 mariadb-server.cnf
-rw-r--r--. 1 root root  232 2025  1 30 mysql-clients.cnf
-rw-r--r--. 1 root root   76 2025  1 30 provider_bzip2.cnf
-rw-r--r--. 1 root root   72 2025  1 30 provider_lz4.cnf
-rw-r--r--. 1 root root   72 2025  1 30 provider_lzo.cnf
-rw-r--r--. 1 root root   78 2025  1 30 provider_snappy.cnf
-rw-r--r--. 1 root root  120 2025  1 30 spider.cnf

[client-server] 섹션의 의미
이 그룹은 MariaDB 클라이언트와 서버 모두에 적용되는 공통 설정 그룹. 즉:
[client] → 클라이언트 프로그램들 (예: mysql, mysqldump, mysqladmin) 에만 적용
[mysqld] → 서버 데몬인 mysqld에만 적용
[client-server] → 클라이언트와 서버 모두에 적용되는 설정

구성 파일 설명
auth_gssapi.cnf : GSSAPI (Kerberos 기반 인증) 관련 설정. 보통 기업 환경에서 SSO를 위해 사용됨. |
client.cnf : MariaDB 클라이언트 프로그램(mysql, mysqldump 등)에 적용되는 설정. 포트, 소켓, 문자셋 등을 지정함.
enable_encryption.preset : 데이터 암호화 관련 설정 프리셋. InnoDB 테이블 암호화, 키 관리 등을 위한 기본값 포함 가능.
mariadb-server.cnf : MariaDB 서버 데몬(mysqld)에 대한 핵심 설정. 버퍼 크기, 캐시, 로그, 인증 등 대부분의 서버 설정이 여기에 있음.
mysql-clients.cnf : MariaDB 클라이언트 그룹에 대한 추가 설정. client.cnf와 유사하지만, 배포판에 따라 분리되어 있을 수 있음.
provider_bzip2.cnf : bzip2 압축 알고리즘을 사용하는 스토리지 또는 백업 관련 설정.
provider_lz4.cnf : LZ4 압축 알고리즘 관련 설정. 빠른 압축/해제 성능을 위한 구성.
provider_lzo.cnf : LZO 압축 알고리즘 관련 설정.
provider_snappy.cnf : Google의 Snappy 압축 알고리즘 관련 설정.
spider.cnf : Spider 스토리지 엔진 설정. 분산 DB 환경에서 여러 서버 간 데이터를 연결할 때 사용됨.

엔진 설치 여부 확인
설정을 변경할 때는 해당 기능이 실제로 활성화되어 있는지 확인하는 게 중요.
예를 들어 spider.cnf 가 있어도 Spider 엔진이 설치되어 있지 않으면 무시.

MariaDB [mysql]> SHOW ENGINES;

Support 컬럼이 YES 또는 DEFAULT로 되어 있으면 사용 가능, NO 또는 DISABLED이면 설치되어 있지 않거나 비활성화 상태.
Spider 엔진 활성화 방법 (설치되어 있지 않은 경우)
MariaDB 10.5 이상에서는 Spider 엔진이 기본 포함되어 있지만, 활성화하려면 설정 파일에 다음을 추가.
[mysqld]
plugin-load-add=ha_spider.so

그리고 MariaDB를 재시작: systemctl restart mariadb

MariaDB server, client 설정 파일 편집

일반 유저 unix_socket, password 동시 사용 하도록 등록 그리고 확인

root[mysql]>CREATE USER 'phobe'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('비밀번호') OR unix_socket;
root[mysql]>SHOW GRANTS FOR phobe@localhost;
+-------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for phobe@localhost                                                                                                                      |
+-------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `phobe`@`localhost` IDENTIFIED VIA mysql_native_password USING '*ED4CBA2110EC1301079E20E1B364F15B00526FDE' OR unix_socket |
+-------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.000 sec)

USAGE : 아무 권한도 없는 상태를 의미. 즉, SELECT, INSERT, UPDATE 등은 불가능, 단지 접속은 가능하다는 뜻.
ON *.* : 모든 테이블 데이터베이스에서
IDENTIFIED VIA mysql_native_password OR unix_socket : 비밀번호 그리고 추가로 유닉스 소켓 인증

mydb 데이터베이스에 실제 권한을 부여하려면

root[mysql]>GRANT SELECT, INSERT ON mydb.* TO 'phobe'@'localhost';
root[mysql]>GRANT ALL PRIVILEGES ON mydb.* TO 'phobe'@'localhost';

ALL PRIVILEGES 의미
포함되는 권한 목록:
SELECT, INSERT, UPDATE, DELETE
CREATE, DROP, ALTER, INDEX
GRANT OPTION (다른 사용자에게 권한 부여 가능) ← 명시하지 않으면 포함되지 않음.
REFERENCES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE 등
단, GRANT OPTION은 별도로 붙여야 함. – 해당 사용자가 다른 사용자에게 권한을 부여할 수 있으므로 보안 상 주의 필요.
사용자에게 필요한 권한만 선별적으로 부여하려면, 업무 목적에 따라 최소 권한만 명시적으로 지정하는 방식이 가장 안전하고 효율적.

목적권한쿼리
조회 전용 계정SELECTGRANT SELECT ON mydb.* TO 'readonly'@'localhost';
데이터 입력 전용INSERT, UPDATE, DELETEGRANT INSERT, UPDATE, DELETE ON mydb.* TO 'writer'@'localhost';
백업 전용 계정SELECT, LOCK TABLES, SHOW VIEW, EVENTGRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT ON mydb.* TO 'backup'@'localhost';
DDL 작업자 (테이블 구조 변경)CREATE, ALTER, DROP, INDEXGRANT CREATE, ALTER, DROP, INDEX ON mydb.* TO 'ddl_user'@'localhost';
프로시저 실행 전용EXECUTEGRANT EXECUTE ON mydb.* TO 'proc_user'@'localhost';

권한 확인: SHOW GRANTS FOR 'user'@'host';로 현재 권한 확인 가능.
권한 제거: REVOKE INSERT ON mydb.* FROM 'user'@'localhost';

백업 전용 사용자 생성

root[mysql]>CREATE USER 'backup'@'localhost' IDENTIFIED BY 'strongpassword';
root[mysql]>GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT ON mydb.* TO 'backup'@'localhost';

# 새로운 사용자 권한 및 비번 포함 생성 한줄 처리 ≥ MariaDB 10.4
root[mysql]>GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT ON mydb.* TO 'backup'@'localhost' IDENTIFIED BY 'strongpassword';