2013-07-30 3 views
4

SLES 11 SP2에서 MySQL 서버 버전 5.0.96을 실행 중이며 안전한 방법으로 사용자 암호를 변경하려고합니다. 물론하여 사용자의 암호를 변경하는 것은 매우 간단합니다 :보안을 위해 mysql 암호를 변경하십시오 - 모범 사례

SET PASSWORD FOR 'user'@'192.168.0.%' = PASSWORD('mysecret'); 

하지만이 쿼리는 쿼리 로그, 바이너리 로그, 그리고 MySQL의 기록 파일에 영향을 찾습니다. 클라이언트를 시작하기 전에

export MYSQL_HISTFILE=/dev/null 

, 그리고 :이를 방지하기 위해, 내가 사용

SET sql_log_bin = 0; 
SET sql_log_off = 1; 

이후. Grep과 mysqlbinlog는 내 계획이 함께한다는 것을 증명하지만, MySQL이/dev/null의 파일 모드 비트를 0600으로 자동 변경했다고 간과 해 왔습니다.

이 시점에서 나는 사용자의 암호를 안전하게 변경하는 더 좋은 방법이 없는지 스스로에게 묻습니다. 그리고 지금 나는 당신에게 묻고 있습니다 :

MySQL 서버의 사용자 암호를 안전하게 변경하는 가장 좋은 방법은 무엇입니까?

+1

MySQL의 기본 암호 저장 형식은 매우 약한 unsalted 해시 (double-SHA1 5.5)입니다. mysql 테이블 데이터 파일에 액세스 할 수있는 사람이면 누구나 암호를 강제로 빼낼 수 있습니다. 따라서 중요한 비밀번호를 MySQL 비밀번호로 다시 사용하지 마십시오. – bobince

+0

루트로 export MYSQL_HISTFILE =/dev/null을 사용하는 것은 매우 나쁜 생각입니다. MySQL은/​​dev/null 파일을 재생성합니다. 따라서 파일 모드 비트와 소유권이 변경됩니다. 또한/dev/null은 더 이상 블록 장치가 아닙니다. 이것은 끔찍한 결과를 초래할 수 있습니다. 일부 데몬은 더 이상 시작할 수 없습니다. –

+0

하나의 가능성은 mysql 외부에서 암호 해시를 계산하는 것입니다. 이런 식으로 mysql은 패스워드를 모른다. '*'. uc (sha1_hex (sha1 ('mysecret'))))를 사용하여 Digest :: SHA 모듈을 사용하여 PERL에서이를 수행 할 수 있습니다. –

답변

1

dev.mysql에 따르면 로그를 살균하는 것보다는 로그를 보호하는 것이 좋습니다.

은 단지 서버와 데이터베이스 관리자에 대한 액세스를 제한하는 디렉토리에있는 해야한다, 로그 파일에 부당한 노출을 방지합니다.

복제 슬레이브는 복제 마스터의 비밀번호를 master.info 파일에 저장합니다. 이 파일을 데이터베이스 관리자 만 액세스 할 수 있도록 제한하십시오.

암호가 포함 된 테이블 또는 로그 파일이 포함 된 데이터베이스 백업 은 제한된 액세스 모드를 사용하여 보호해야합니다.

이 문제는 이후 버전의 MySQL에서보다 우아하게 수정 된 것으로 보입니다. 참조 : http://dev.mysql.com/doc/refman/5.7/en/password-logging.html

의 MySQL 5.7에서 문 로깅은 다음 문에 일반 텍스트 에 암호를 쓰기 방지 :

은 사용자 만들기 ... 내 ... 내 ... GRANT IDENTIFIED IDENTIFIED ... SET 암호 ... 초안 시작 ... 암호 = ... 서버 생성 ... 옵션 (... 암호 ...) 변경 서버 ... 옵션 (... 암호 ...)

해당 명령문의 암호는 일반 쿼리 로그 인 sl에 대해 명령문 텍스트에 그대로 표시되지 않도록 다시 작성됩니다. ow 질의 로그 및 이진 로그입니다. 재 작성은 다른 진술에는 적용되지 않습니다.

따라서 최신 버전으로 업그레이드 할 수없는 경우 솔루션이 올바른 것처럼 보입니다.

0

Linux 시스템에서는 mysqladmin을 사용하지만 새로운 암호가 보이지 않거나 기록되지 않도록 추가 단계를 거쳐야합니다. 읽기 명령을 사용하면 화면에 표시되지 않고 'newpass'변수에 저장 될 새 암호를 입력 할 수 있습니다. mysqladmin 명령은 화면 상에 나타나지 않고 현재 패스워드를 물어볼 것이며, 현재 패스워드가 맞다면 MySQL 사용자의 새로운 패스워드를 'newpass'변수의 값으로 설정할 것이다. -대로하지만 MySQL의 사용자 이름으로 <yourusername>를 교체해야

echo -n "Enter new password: "; read -s newpass; echo; mysqladmin -u <yourusername> password "$newpass" -p 

당신은 당신의 리눅스 시스템에서 단말에 복사 위를 붙여 넣을 수 있습니다.