MySQL 데이터 변경 감지 (trigger) + 시스템 명령어 사용 (udf)

리눅스/MySQL|2020. 5. 31. 07:35
반응형

아래는 트리거 예제입니다.

테스트 테이블을 생성합니다.

test 테이블에는 데이터를 넣어 놓고,

test2 테이블에는 구조만 같게 해 놓고 데이터는 넣지 않습니다.

그리고 트리거 설정 후 부터는 test 에 insert 되는 데이터를 test2 에도 insert 되게 합니다.



[테스트 준비]

mysql> use test;


mysql> create table test (no int(3) AUTO_INCREMENT PRIMARY KEY, name varchar(20), age int(3));

mysql> insert test (name, age) values ('CDH', '20');

mysql> insert test (name, age) values ('JJE', '21');


mysql> create table test2 (no int(3) AUTO_INCREMENT PRIMARY KEY, name varchar(20), age int(3));



[트리거 생성]

mysql> delimiter $$

create trigger test_trigger

after insert on test for each row

begin

  insert into test2 values(new.no, new.name, new.age);

end

$$

delimiter ;



[설명]

* test_trigger : 트리거 이름

* after insert : insert 되고 나서 실행 (데이터 처리 전에 실행하려면 before 를 사용)

* on test : test 테이블 연결

* for each row : 각 행마다 실행

* begin ~ end : 조건에 맞으면 begin 과 end 사이 구문 실행 (insert, update, delete 감지 가능)

* new : insert 사용시 new, delete 사용시 old, update 사용시 old, new 를 사용할 수 있습니다.

* delimiter 뒤에 오는 문자로 쿼리 마치는 문자를 정의하는 것입니다.

   내용중에 세미콜론(;) 이 들어갈 수 있으니 $$ 로 변경 해놓고, 모든 작업이 완료 후 다시 ; 로 원복 하였습니다.


[참고]

* 트리거 보기

show triggers;


* 트리거 삭제

drop trigger 트리거명;



[테스트]

데이터를 추가로 입력하여 두 개의 테이블에 들어갔는지 확인합니다.


mysql> insert test (name, age) values ('CJW', '3');

mysql> insert test (name, age) values ('CHY', '5');


mysql> select * from test;

mysql> select * from test2;



[원격지 DB 테이블 연결]

mysql> 쉘 상에서는 직접적인 연결을 지원하지 않고,

내부에 원격지 테이블 연결이 가능하므로 연결을 통하여 insert 를 하면 될 것 같습니다.

(참조 : https://icoon22.tistory.com/251)

(단점 : show table testtbl 시 패스워드 노출)


CREATE TABLE testtbl (

 id INT AUTO_INCREMENT PRIMARY KEY,

 col1 VARCHAR(100) DEFAULT NULL,

 col2 VARCHAR(200) DEFAULT NULL

) ENGINE=FEDERATED 

  DEFAULT CHARSET=UTF8

  CONNECTION='mysql://userid:userpw@192.168.10.2:3306/testdb/testtbl;



[MySQL 에서 시스템 명령어 사용]

MySQL 에서 OS 명령어를 실행하려면 UDF 라이브러리가 필요합니다.


1) 리눅스

centos : https://ymj0078.tistory.com/5

ubuntu : https://oranke.tistory.com/273


(아래는 Ubuntu 18.04 에서 진행하였습니다)


# git clone https://github.com/mysqludf/lib_mysqludf_sys.git

# cd lib_mysqludf_sys/


# vi Makefile

LIBDIR=/usr/lib/mysql/plugin


install:

        gcc -Wall -I/usr/include/mysql -I. -fPIC lib_mysqludf_sys.c -o $(LIBDIR)/lib_mysqludf_sys.so 

* OS 에 따라 /usr/lib/mysql/plugin 또는 /usr/lib64/mysql/plugin 사용

* /usr/include/mysql 디렉토리가 없는 경우

  Ubuntu : apt -y install libmysqld-dev

  CentOS : yum -y install mysql-devel 패키지 추가 설치


# gcc -shared -o lib_mysqludf_sys.so lib_mysqludf_sys.c -I/usr/include/mysql

# cp -arp lib_mysqludf_sys.so /usr/lib/mysql/plugin/


플러그인 추가 (mysql 로그인 후)

DROP FUNCTION IF EXISTS lib_mysqludf_sys_info;

DROP FUNCTION IF EXISTS sys_get;

DROP FUNCTION IF EXISTS sys_set;

DROP FUNCTION IF EXISTS sys_exec;

DROP FUNCTION IF EXISTS sys_eval;


CREATE FUNCTION lib_mysqludf_sys_info RETURNS string SONAME 'lib_mysqludf_sys.so';

CREATE FUNCTION sys_get RETURNS string SONAME 'lib_mysqludf_sys.so';

CREATE FUNCTION sys_set RETURNS int SONAME 'lib_mysqludf_sys.so';

CREATE FUNCTION sys_exec RETURNS int SONAME 'lib_mysqludf_sys.so';

CREATE FUNCTION sys_eval RETURNS string SONAME 'lib_mysqludf_sys.so';


확인

select * from mysql.func;


테스트
select sys_exec('touch /tmp/test_mysql');

동작이 되지 않을 경우 쉘에서 아래와 같이 입력합니다.
(참조 : https://oranke.tistory.com/273)

# apparmor_status
결과에 /usr/sbin/mysqld 를 차단하지 않았나 확인해 볼 것
등록되어있는 경우 삭제를 해야 합니다.

# ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
# apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld

재확인
sudo apparmor_status

apparmor 와 mysql 재구동
# systemctl restart mysql
# systemctl restart apparmor

그리고 다시 테스트
select sys_exec('touch /tmp/test_mysql');

그렇다면 MySQL trigger 와 udf 를 합친 방법을 사용해 봅시다.

맨 위의 예제에서 begin 과 end 사이에 아래 내용을 넣으면..

begin
    SET @exec_var = sys_exec(CONCAT('touch /tmp/', new.name));
end

exec_var 라는 mysql 변수에 sys_exec 결과를 넣는다는 뜻이지만 실제로 실행이 되어집니다.
CONCAT() 에 있는 'touch /tmp/' 와 콤마(,) 뒤의 new.name (새로운 name 필드값) 은 아래와 같이 이어붙인 명령이 됩니다.

insert into test (name, age) values ('cdh', '22'); 라고 입력시
=> touch /tmp/cdh 라고 시스템 명령을 수행한 것과 같습니다.

한 번 더 해보면.. (CONCAT 내의 띄어쓰기 잘 살펴볼 것)

begin
  SET @exec_var = sys_exec(CONCAT('touch /tmp/', new.name, ' /tmp/', new.age));
end

insert into test (name, age) values ('cdh', '22'); 라고 입력시
=> touch /tmp/cdh /tmp/22 라고 시스템 명령을 수행한 것과 같습니다.
    그래서 /tmp 디렉토리 내에 cdh 와 22 라는 파일이 생성된 것을 볼 수 있습니다.


2) 윈도우


아래 URL 은 64bit 용 dll 파일 입니다.

https://github.com/sqlmapproject/sqlmap/files/1789515/lib_mysqludf_sys_64.zip


lib_mysqludf_sys_64.zip

{mysql 설치디렉토리}\lib\plugin 안에 저장합니다.


디렉토리가 보이지 않을 경우 아래와 같이 플러그인 경로를 확인하고 실제로 존재하지 않을 경우

디렉토리를 수동으로 생성해줍니다.


mysql> select @@plugin_dir;


라이브러리 추가


mysql> use mysql;

mysql> create function sys_exec returns int soname 'lib_mysqludf_sys.so';


확인


mysql> selet * from mysql.func;


시스템 명령어 사용 예 (리눅스와 동일. 단 경로는 슬래시 두개로 사용)


1) 그냥 사용시

mysql> select sys_exec("echo aaa > c://test.txt");


반응형

댓글()

파일 이벤트 모니터링 패키지 (incrontab)

리눅스/OS 일반|2020. 5. 19. 16:35
반응형

CentOS 8 에서 테스트 했습니다.

Ubuntu 20.04 에서는 데몬 시작시 incrond 대신 incron 을 사용합니다.

 

1. 설치

 

# yum -y install incron

또는

# cd /usr/local/src

# wget http://rpmfind.net/linux/epel/8/Everything/x86_64/Packages/i/incron-0.5.12-12.el8.x86_64.rpm

# rpm -ivh incron-0.5.12-12.el8.x86_64.rpm

 

 

2. 사용 방법

 

우선 incrond 를 실행 합니다.

 

# systemctl enable incrond

# systemctl start incrond

 

설정 방법은 crontab 과 유사 합니다.

 

아래와 같은 설정을 통해 원하는 작업을 실행 시킬 수 있으며,

설정값이 저장되면 crond 와 마찬가지로 incrond 데몬 재시작 없이도 적용이 됩니다.

 

# incrontab -e

 /data        IN_CLOSE_WRITE    /root/run.sh    

 

* 참고

Ubuntu 20.04 에서 아래와 같은 메세지가 출력된다면, 이는 incrontab 명령을 허용할 계정 리스트를 별도로 관리하고 있기 때문입니다.

# incrontab -e

user 'root' is not allowed to use incron

 
아래 파일을 열어 사용하고자 하는 계정을 추가해 줍니다

# vi /etc/incron.allow

 

root

 

* 위 설정 내용을 설명합니다.

/data 디렉토리 내의 파일 감시

파일 쓰기 작업을 끝낸 경우 (IN_CLOSE_WRITE )

/root/run.sh 파일을 실행합니다.

 

* 파일 이벤트 형태는 아래와 같이 다양합니다. (man page)

   > 괄호 안의 * 표시는 디렉토리와 파일에 모두 적용 됩니다.

       IN_ACCESS           File was accessed (read) (*)

       IN_ATTRIB           Metadata changed (permissions, timestamps, extended attributes, etc.) (*)

       IN_CLOSE_WRITE      File opened for writing was closed (*)

       IN_CLOSE_NOWRITE    File not opened for writing was closed (*)

       IN_CREATE           File/directory created in watched directory (*)

       IN_DELETE           File/directory deleted from watched directory (*)

       IN_DELETE_SELF           Watched file/directory was itself deleted

       IN_MODIFY           File was modified (*)

       IN_MOVE_SELF        Watched file/directory was itself moved

       IN_MOVED_FROM       File moved out of watched directory (*)

       IN_MOVED_TO         File moved into watched directory (*)

       IN_OPEN             File was opened (*)

 
* 설정 파일에 아래와 같은 와일드 카드를 사용하여 인자값을 전달 할 수 있습니다. (man page)
       $$   dollar sign
       $@   watched filesystem path (see above)
       $#   event-related file name
       $%   event flags (textually)
       $&   event flags (numerically)
 
* 사용예 (man page)
       /tmp IN_ALL_EVENTS abcd $@/$# $%
       /usr/bin IN_ACCESS,loopable=true abcd $#
       /home IN_CREATE /usr/local/bin/abcd $#
       /home IN_CREATE,dotdirs=true /usr/local/bin/abcd $#
       /home IN_CREATE,recursive=false /usr/local/bin/abcd $#
       /var/log 12 abcd $@/$#
 
 
* 참고
파일 수정 프로세스에 따라 IN_CLOSE_WRITE 가 빈번히 일어나는 경우가 있습니다.
(메일을 한통 받더라도 여러 이벤트가 발생됨)
이 경우 IN_ONESHOT 옵션을 추가하여 한번만 실행하도록 한 다음,
프로세스가 모든 처리를 완료하면 incrond 데몬을 재시작하여 다시 이벤트 감시 상태로 둘 수 있습니다.
 
 
반응형

댓글()

ubuntu 18.04 에 와인 (wine) 설치하기

리눅스/OS 일반|2020. 4. 1. 13:23
반응형

1. 설치 및 설정


설치

# apt -y install wine-stable ttf-mscorefonts-installer


버전 확인

# wine --version


설정

# winecfg


* 폰트 깨질 경우 (한글 네모 현상)

윈도우 PC 에서 아래 파일을 가져와 wine 폰트 디렉토리에 저장 합니다.


- 원본 : C:\windows\Fonts\gulim.ttc    // 굴림 보통

- 저장 : ~/.wine/drive_c/windows/Fonts/


그 다음 wine 설정 파일을 열어 "MS Shell Dlg" 옵션이 아래와 같이 "gulim" 으로 되어 있는지 확인하고

안되어 있을 경우 수정 합니다.


# vi ~/.wine/system.reg


"MS Shell Dlg"="gulim"


다시 winecfg 를 실행하고 확인을 누릅니다.


* root 외에 일반 계정에서도 사용하려면 위 같은 작업을 계정별로 해줍니다.



2. 윈도우즈 프로그램 실행


아래와 같은 형식으로 구동 합니다.

# wine file.exe



3. 실행 아이콘 생성


런처를 만들어 프로그램을 쉽게 구동 할 수 있도록 해봅니다.


프로그램이 있는 디렉토리로 이동

# cd /media/sysdocu/0a659267-04a3-4dad-a4ac-c74cd6498825/programs/


스크립트 파일 생성

# vi test


#!/bin/bash

cd /media/sysdocu/0a659267-04a3-4dad-a4ac-c74cd6498825/programs/

wine file.exe


스크립트 파일을 아무 위치에서나 실행 되도록 링크를 걸어줍니다.

# ln -s /media/sysdocu/0a659267-04a3-4dad-a4ac-c74cd6498825/programs/test /usr/bin/


이제 shell 아무 디렉토리에서나 test 라는 명령을 실행하면 프로그램이 구동 됩니다.

이제 아이콘을 만듭니다.


(root 계정에서만)

# vi /usr/share/applications/file.desktop


[Desktop Entry]

Version =1.0

Name=file

Exec=test                             # 실행 명령어

Terminal=false

Type=Application

Categories=Application


# chmod 777 /usr/share/applications/file.desktop


그 다음 Desktop 응용프로그램 찾기 창에서 'file' 이라고 검색하면 만들었던 아이콘이 출력 됩니다.

마우스로 해당 아이콘을 드래그하여 응용프로그램 목록 상태바로 이동 시킵니다.


그리고 실행하면 쉽게 프로그램을 구동 할 수 있습니다.



반응형

댓글()

httpd (apache2) 설정을 이용한 웹취약점 보완

리눅스/Security|2020. 3. 17. 13:57
반응형

아래 모듈을 사용하여 헤더 정보를 수정함으로써 XSS 등 여러가지 웹 취약점을 보완할 수 있습니다.

Virtualhost 안에 아래 내용을 넣거나 apache2.conf 등 메인 설정 파일에 등록하여 사용이 가능합니다.

아래 내용 적용 후 ZAP 등의 웹취약점 점검 도구를 이용하면 차이가 확연히 드러납니다.


<IfModule mod_headers.c>

    Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"

    Header always set X-Content-Type-Options "nosniff"

    Header always set X-XSS-Protection "1; mode=block"

    Header always set X-Frame-Options "SAMEORIGIN" # ssl 설정에서는 이 부분을 적용하면 iframe 으로 해당 페이지를 불러오지 못하는 현상이 발생하므로 아래 옵션 사용법을 참고하여 불러오려는 도메인 주소를 등록합니다.

    Header always set X-Download-Options "noopen"

    Header always set X-Permitted-Cross-Domain-Policies "none"

    Header set Set-Cookie HttpOnly;Secure

</IfModule>


[참고]

X-Frame-Options 옵션은 아래와 같은 값으로 설정이 가능합니다.

"deny" : frame 으로 무조건 불러올 수 없다. 같은 도메인일 경우에도 접근 불가.

"sameorigin" : 같은 도메인일 경우 frame 으로 불러올 수 있다.

"allow-from" : 특정 도메인들을 frame으로 불러올 수 있도록 허용할 수 있다.

// 이런 형태로 사용합니다. "allow-from https://sysdocu.tistory.com/"


또 XSS 취약점이 여전히 존재한다면 아래와 같이 modsecurity 를 설치하여 해결이 가능합니다.

실제로 이 두 가지 셋팅만으로 High 단계의 취약점을 모두 해결 하였습니다.


# apt -y update


# apt -y install libapache2-mod-security2


# vi /etc/modsecurity/modsecurity.conf

SecRuleEngine On


# systemctl restart apache2



반응형

댓글()

웹취약점 점검 도구 OWASP ZAP 설치 및 실행방법

리눅스/Security|2020. 3. 6. 08:20
반응형

웹취약점 점검 도구 오와스프 잽 (OWASP ZAP) 은 java 8 이상의 버전을 필요로 합니다.



[ 환경 구성 ]

# yum -y install java                // CentOS 에서 설치

# apt -y install default-jdk    // Ubuntu 에서 설치



[ 설치 및 데몬 가동 ]

# cd /usr/local/src


(2020-03-05 기준 최신버전)

# wget https://github.com/zaproxy/zaproxy/releases/download/v2.9.0/ZAP_2.9.0_Linux.tar.gz


# tar xvzf ZAP_2.9.0_Linux.tar.gz ZAP_2.9.0/


# cd ZAP_2.9.0/


# ./zap.sh -daemon -host 0.0.0.0 -port 8080 -config proxy.behindnat=true -config api.addrs.addr.name=.*


브라우저에서 http://서버IP:8080 으로 접속하면 API 정보 페이지가 뜹니다.

해당 데몬은 API 설명을 보는 페이지 같습니다.

데몬이 실행되어 있지 않아도 아래와 같이 스캐닝이 가능합니다.



[ 스캐닝 ]

command line 에서 스캐닝 하기

# ./zap.sh -cmd -quickurl http://sysdocu.tistory.com -quickout /usr/local/src/report.xml -quickprogress



* 참고 (웹취약점 점검 도구 유/무료 성능 비교)

http://sectooladdict.blogspot.com/2017/11/wavsep-2017-evaluating-dast-against.html



[ 웹서비스 ]

웹서비스를 위해 php 파일을 만들고 shell_exec 로 실행할 경우 apache2 는 www-data 사용자의 권한을 갖게 되므로 아래와 같이 추가 작업을 해주어야 정상 동작 합니다.


로컬에서 www-data 권한으로 구동 되는지 우선 확인 합니다.


# sudo -u www-data /var/www/html/zap/zap.sh -cmd -quickurl http://sysdocu.tistory.com -quickout /var/www/html/report/sysdocu.tistory.com_20200310_144400.xml -quickprogress

Found Java version 11.0.6

Available memory: 16000 MB

Using JVM args: -Xmx4000m

Unable to create home directory: /var/www/.ZAP/

Is the path correct and there's write permission?


퍼미션 에러가 출력 되었으므로 해당 디렉토리를 만들고 권한을 부여 합니다.

# mkdir /var/www/.ZAP/

# chown www-data.www-data /var/www/.ZAP/



반응형

댓글()

타임스탬프(timestamp) <-> 날짜 상호 변환 명령어

리눅스/OS 일반|2020. 3. 2. 16:21
반응형

아래 명령을 이용하면 PHP 나 MySQL 을 통하지 않고

리눅스 쉘 상에서 쉽게 타임스탬프와 현재시간으로 상호 변경이 가능합니다.



시간을 타임스탬프로 변환

# date -d "2020-03-02 00:00:00" +%s

1583074800



타임스탬프를 시간으로 변환

# date +"%F %H:%M:%S" -d @1583074800

2020-03-02 00:00:00




반응형

댓글()

sed 로 파일 아래에서 부터 원하는 라인수 만큼 지우기

리눅스/OS 일반|2020. 2. 28. 15:33
반응형

# sed -i -n -e :a -e '1,5!{P;N;D;};N;ba' sysdocu.txt


sysdocu.txt 파일 아래에서 부터 5줄 삭제합니다.

반응형

댓글()

command line 명령어로 메일 보내기 (php)

리눅스/Mail|2020. 2. 20. 13:04
반응형

php 7.2 에서 테스트 하였습니다.

참고로 메일을 보내기 위해서는 로컬에 SMTP 가 열려 있어야 합니다.

 

 

# vi send.php

 

<?php


// 메일 헤더 (보내는 사람)
$headers = "From: SENDER<sender@sysdocu.tistory.com>\r\nMIME-Version: 1.0\r\nContent-Type: text/html; charset=utf-8\r\nContent-Transfer-Encoding: base64\r\n";


// 메일 제목
$title = "메일 제목입니다.";
$title = "=?utf-8?B?".base64_encode($title)."?=\n";


// 메일 내용 (직접 입력할 경우)
//$content = "<html lang='ko'><head><meta charset='utf-8'/></head><body><h1>안녕하세요. 테스트 메일 입니다.</h1></body></html>";


// 메일 내용 (파일에서 출력할 경우)
$file_handle = fopen("mail_body.html", "r");
$content = "";
while (!feof($file_handle)) {
    $line_of_text = fgets($file_handle);
    $content = $content . $line_of_text . "
    ";
}
fclose($file_handle);
 
// 메일 전송 (받는사람)
mail("user@sysdocu.tistory.com", $title, chunk_split(base64_encode($content)), $headers);


?>

 

제목은 한글이 안깨지도록 하였는데, 메일 헤더값의 한글은 어떻게 하는지 몰라서

메일 닉네임 사용시 영문으로 써야함 (SENDER 부분처럼 하던가 이메일 주소만 남기고 제거해도 됨)

 

# chmod 755 send.php

 

발송하기

 

# php send.php

 

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

 

대량으로 보낼때는..

 

1) send.php 에서 두 군데를 수정

 

$USER = $_SERVER['argv'];    // 파일 맨 첫 줄에 추가


mail("$USER[1]", $title, chunk_split(base64_encode($content)), $headers);    // 맨 아랫줄에 user@sysdocu.tistory.com 대신 $USER[1] 로 변경

 

2) 메일 발송을 반복해 줄 쉘스크립트 생성

 

# vi run.sh

 

#!/bin/bash


for USER in `cat mail_list.txt`; do
    php send.php $USER
    echo $USER 으로 메일 발송 완료
done 

 

# chmod 700 run.sh

 

3) 메일 리스트 작성

 

# vi mail_list.txt

 

user@sysdocu.tistory.com
user2@sysdocu.tistory.com
user3@sysdocu.tistory.com


4) SMTP 데몬 가동

 

메일 발송시 SMTP 로 발송하기 때문에 로컬에 관련 데몬이 구동되어야 한다.

25번 포트가 열려있는지 확인하자.

구동 안되어 있을 경우 별다른 설정 없이 데몬만 가동하면 된다.

 

# systemctl start sendmail

 

5) 발송하기

 

# sh run.sh

 

* 사용하기 전에 개인 메일 2~3개로 테스트를 먼저 꼭 해보자.

 

반응형

댓글()

command line 명령어로 메일 보내기 (mail) - 한글 제목 불가

리눅스/Mail|2020. 2. 20. 13:01
반응형

* SMTP 를 이용하지 않고 발송

* html 본문 사용 가능

* 한글 제목 불가


# cat mail_body.html |mail -a "From: sender@sysdocu.tistory.com" -a "MIME-Version: 1.0" -a "Content-Type: text/html" -s "[TEST] 테스트 메일 입니다." user@sysdocu.tistory.com



반응형

댓글()

curl (35) ssl connect error

리눅스/OS 일반|2020. 2. 6. 16:59
반응형

운영중 아래와 같은 에러 메세지를 만났다면..


curl (35) ssl connect error


다음과 같이 패키지를 업데이트 해주면 해결이 됩니다.


# yum update -y nss curl libcurl



반응형

댓글()

MySQL 5.7 사용자 계정 추가, root 패스워드 갱신

리눅스/MySQL|2020. 2. 3. 10:10
반응형

1. 사용자 계정 생성 및 권한 부여


기존 방법과 달리 MySQL 5.7 버전에서 부터 계정 생성하는 방법이 바뀌었으므로

아래와 같은 명령을 이용하여 계정 생성을 하고 DB 접근 권한을 부여 합니다.


mysql> create database openvas;

mysql> CREATE USER 'openvas'@'localhost' IDENTIFIED BY '12345678' PASSWORD EXPIRE NEVER;

mysql> GRANT ALL PRIVILEGES ON openvas.* TO 'openvas'@'localhost';

mysql> flush privileges;


* MariaDB 10.3.17 에서는 아래와 같이 하면 됩니다.

[mysql]> create user 'openvas'@'localhost' identified by '12345678';

[mysql]> grant all privileges on openvas.* to openvas@'localhost' identified by '12345678' with grant option;

[mysql]> flush privileges;



2. root 패스워드 변경


MySQL 5.7 버전 부터 root 패스워드 변경하는 방법 또한 변경되었습니다.

아래와 같은 쿼리를 이용하여 변경합니다.


mysql> use mysql;

mysql> update user set authentication_string=password('12345678') where user='root'; 

mysql> flush privileges;


이렇게도 안되는 경우 (MySQL 최초 설치시) 아래와 같이 사용해 봅니다.

mysql> alter user 'root'@'localhost' identified with mysql_native_password by '12345678';

mysql> flush privileges;



3. 사용자 정보 간략히 보기


mysql> select host, user, plugin, authentication_string, password_last_changed from user;


반응형

댓글()