주절주절2 삽질 기록 : (실패) MySQL 계정 비밀번호 변경하기

김아무개·2023년 5월 20일
0

MySQL

목록 보기
9/11
post-thumbnail

이번에 제대로 삽질 했다.
😭

내가 접근한 방법은 mysql 5.* 버전에서나 먹히는 방법인데
지금 사용하는 버전은 8이다.
아예 접근을 잘못하고 있었다.

앞으로는 꼭 검색을 통해 내가 하려는 방향이 옳은 방향인지 확인해보고 시도해볼것 😭
엄청난 교훈을 얻고 잠시 휴식....

+ 아래에 쓴 글은 도움도 안되는
   안타까운 이야기 정도로 남겨놔야지......
이런식으로 개발하면 곤란함을 잊어버리지 말자 🥺


mysql root 계정으로 로그인 성공 했는데,

비밀번호가 너무 개인정보라서 변경이 필요함을 느꼈다.

프로젝트에 올려야 하기 때문!

1. database 뭐가 있는지 보여달라

show databases;

2. db 선택

로그인 계정 정보는 mysql 데이터베이스서 관리되고 있다.
use mysql; 입력!

3. table 목록 구경

show tables;

여기서 user 테이블을 사용할 거다.

4. table 컬럼명 확인

desc table user;


엇 이게 아니네

desc user;

와우 컬럼이 51개나 있다. ㄷㄷㄷ

여기서 비밀번호 변경에 필요한 컬럼은 User , password...........가 있는 줄 알았는데 없다
검색 고고

보고 배운 사이트 : wrkbr.tistory

알아보니 mysql 5.7 부터 password 컬럼 이름이 변경되었다고 한다.
이제는 authentication_string 컬럼이 비밀번호 컬럼이다!

5. 변경할 계정을 잘 인지한 상태인지 확인을 위한 조회

select `user`, authentication_string 
from user;


오호
과거의 내가 계정을 두개 만들어 놓은 것이 보인다.
비번 모양을 보아하니 전부 똑같넹ㅋㅋㅋ
훌륭하군
ㅋㅋㅋㅋㅋㅋ

이왕 바꾸는 김에
zhyun , zh , root 3개 계정에 대한 비번을 바꾸기로 결정!

5. 비밀번호 변경

오 세상에
mysql8 부터 password() 함수도 사라졌다고 한다. 보고 배운 블로그 : ioerror.tistory
아래의 코드는 이제는 에러를 뿜어냄..

UPDATE user SET authentication_string=password('rootrootgroot') WHERE `user`='zhyun'; 
UPDATE user SET authentication_string=password('rootrootgroot') WHERE `user`='zh'; 
UPDATE user SET authentication_string=password('rootrootgroot') WHERE `user`='root'; 

보고 배운 블로그 작성자는
UPPER( SHA1( UNHEX( SHA1( str ) ) ) )
이런 식으로 작성해서 암호화 했다.
두번 암호화!

맞게 알고 있는지 확인!

select sha1('rootrootgroot');


이게 나는 실행할 때 마다 다른 문자열이 반환 될 줄 알았는데 아니었다.
😕

unhex 값 궁금해서 조회

select unhex(sha1('rootrootgroot'));

한 번 더 암호화 진행!

select sha1(unhex(sha1('rootrootgroot')));


그런데 이렇게 암호화해서 변경하면

로그인 할 땐 어떻..??

zh 계정으로 테스트를 해보기로 했다.;

zh 비번 변경

update user 
   set authentication_string = sha1(unhex(sha1('rootrootgroot')))
 where `user` = 'zh';
 flush privileges;


mysql 로그아웃 후 zh로 로그인 시도

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
큰일날뻔 했다.

검색해보니 mysql은 기본적으로 로그인 시
sha1()을 이용해서 비번 확인을 한다고 하여 sha1()만 사용해서 등록 시도!
+ 시간을 절약하기 위해 zhyun 계정은 비번을 직접 암호화하지 않고 변경

비번 형태 조회

실험 결과
sha1()을 이용해서 변경등록을 해줘야 되겠다는 생각을 했다.

root 로그아웃 후 zh로 로그인 시도!

헐 zh , zhyun 둘 다 로그인 실패했다.

왤까
비밀번호가 틀린건 아니기 때문에,
root로 돌아가서 접속 계정의 host 접근 권한정보를 조회해보기로 마음먹었다.

오 뭐지
오 정말 뭐지
어디서부터 잘못된걸까
굉장히 어렵네..?


UPPER( )

알파벳을 대문자로 변환

SHA1( )

단방향 암호화 함수.
보고 배워보는 사이트 : habonyphp.com
RFC 3174로 묘사된 문자에 대해
160 비트 체크섬을 계산하여
40 헥사 자리 바이너리 문자열을 반환 한다고 ...;;

어우;

보고 배워보는 사이트 2 : runebook.dev

RFC 3174 : 보안 해시 알고리즘
160 비트 체크섬 : 160비트 길이의 암호화 해시를 만듦

  • chat에게 도움 요청 😭

    "160비트 체크섬"이라는 용어는 일반적으로 컴퓨터 네트워킹 및 암호학에 사용되는 암호화 알고리즘을 가리킬 수 있습니다. 이러한 체크섬은 데이터의 무결성을 확인하는 데 사용됩니다. 160비트라는 용어는 암호화 해시의 길이를 나타냅니다.

    예를 들어, SHA-1 (Secure Hash Algorithm 1)은 암호 해시 함수로, 160비트 길이의 체크섬 (또는 해시)을 생성합니다. 이 해시 함수는 데이터 블록을 입력 받아 고유한 160비트 출력을 생성합니다. 이 출력은 입력 데이터의 '요약'으로 볼 수 있으며, 데이터가 송신과 수신 과정에서 변경되지 않았음을 검증하는 데 사용됩니다.

    SHA-1 알고리즘은 2021년까지 볼 때, 일부 약점이 발견되어 보안 측면에서 더 강력한 알고리즘들 (예: SHA-256, SHA-3 등)로 대체되는 추세입니다. 그러나 여전히 SHA-1은 일부 시스템에서 여전히 사용되고 있습니다.

40 헥사 자리 바이너리 문자열을 반환 : 40자리의 16진수 문자열을 반환


UNHEX( )

16진수로 인코딩 된 값을 디코딩해서 사람이 한눈에 알아볼 수 있는 문자로 만들어줌
unhex 보고 배운 블로그 : blog.naver.com/kkh0977




그런데 2021년부터 sha1 알고리즘의 보안이 약해졌다고 한다.
mysql에서 지원하는 알고리즘이 뭐가 더 있는지 확인!

sha2( )를 사용해볼까!
했는데 내가 설치한 버전에서는 sha2()를 지원하지 않아서 그냥 sha1( )을 사용..
8.0 설치했는데
왜 안되어있을까/

오늘은 뭔가 굉장히 총체적 난국이다.ㅋㅋㅋㅋㅋ
미챠~

profile
Hello velog! 

0개의 댓글