사실 이 글에 있었던 일은 한참 전의 일이긴한데, 생각난 김에 그냥...
"이런 방법도 있다~" 라는 걸 안내드리고자 글을 작성합니다.
새로운 호스팅을 받고 얼마지나지 않아, 과거 백업해두었던 서비스들을 업로드하여 재구성하는데...
왜 때문인지 정상적으로 동작하지 않는다...
이번에 바뀐거라곤 php 버전과 DB 세팅 뿐인데...?
라고 생각했고, 바로 그것이 문제였습니다.
바로 MySQL도 최신 버전으로 호스팅 세팅하여 버린 것!
어쳐피 돈내는거 "거 한번 최상으로 세팅해보자!" 라는 것이 큰 문제가 되리라곤...
먼저 간략하게 한줄요약 아니, 두줄요약 하자면...
MySQL 은 8.0으로 업데이트되면서 새로운 기능, 그리고 기능개선을 위해 호환성을 포기했습니다.
때문에 MySQL 버전 업데이트 시 주의할 필요가 있습니다!
여러 오류들이 발생했지만, 로그인이 안되는 것이 가장 큰 문제였습니다. 평소 Debug를 브라우저 새로고침 하며 하는 편인데, 왠걸 로그인하려는데, 비밀번호가 틀렸다고 자꾸만...
그리고 사실 이때까지만 해도 비밀번호를 까먹었는지 알고, 그냥 코드상 쿠키/세션을 남겨 강제로그인 후 테스트를 진행하며 해당 환경을 오래동안 지속하였습니다.
그런데, 이후 작업내역 공유를 위해 사이트 이용을 고객에게 안내해야 하는 상황이 되자...
위 문제를 알아챘고, 아차 싶어서 얼른 수정을 진행했습니다.
보통 이런 코드는 php 에서 사용되는데... 암호를 체크하고 저장할 때 아래와 같이 사용합니다.
$mb = sql_fetch("select * from member where id = '{$id}' ");
$res = sql_fetch("select password('{$password}') as password");
if($res['password'] == $mb['password']){
// 로그인 성공
}
실제 내가 쓰는 코드는 아니고, 대충 이렇게 password 비교를 한다고, 안내드리고자 간략하게 작성해 봤습니다.
아무튼 중요한건 MySQL의 password() 함수를 이용해서 암호화된 비밀번호를 저장해뒀다가, 그 비밀번호를 쓰는 것이라는 것.
그래서 사이트를 운영하는 사람도 "유저들의 비밀번호를 알 수 없다." 라는 문구가 들어가게 된 것.
위 내용은 개인정보보호법에 기인한 매우 기초적인 내용으로 관련내용은 또 차후 다루도록 하겠습니다.
아무튼 그래서 어떻게 해결했느냐!?
먼저 현재는 SQL의 속도보다 php가 빠르다보니, php에서 암호화하는 함수를 제작하여 해시 암호를 직접 만들어 제공하고 있습니다. 다만, 이런 방법은 즉각적인 해결법이 되지 못 합니다.
왜?
이미 운영 중이고 운영했던 서비스에 이런 짓은 불가능하니까... 지금 당장 다 뜯어고칠 순 없잖아?
그.래.서
당시 택한 방법과 제안드리는 방법은 아래와 같습니다.
$mb = sql_fetch("select * from member where id = '{$id}' ");
$res = sql_fetch("select CONCAT('*', UPPER(SHA1(UNHEX(SHA1('{$password}'))))) as password");
if($res['password'] == $mb['password']){
// 로그인 성공
}
위 코드의 password() 함수의 내부 내용을 그냥 풀어서 놓은 것입니다.
물론 원래의 password() 내부함수 보다는 느릴 것입니다.
어쩔 수 없죠...
그래도 뭐, 당장 급한 불은 끌 수 있으니까요?
'개발새발 박스 > MySQL' 카테고리의 다른 글
MySQL 에서 user 생성 / 비밀번호 변경이 안돼요! (0) | 2023.03.21 |
---|