요컨대, MariaDB에서
UPDATE mysql.user SET plugin = 'mysql_native_password',
Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
여기서 NEWPASSWORD를 원하는 암호로 바꾸고 그 밖의 모든 단어를 그대로 사용하십시오.
여기서 문제는 MariaDB 또는 MySQL이 설치 / 업데이트 될 때 (특히 루트없이 비밀번호가 설정되어있는 경우) 사용자 테이블에서 비밀번호가 실제로 비어 있거나 무시되며 로그인하는 시스템 사용자에 따라 다릅니다. MySQL 사용자에게. 시스템 루트로 전환 한 후 다음과 같이 입력하여이를 테스트 할 수 있습니다.
mysql -uroot -p
그런 다음 비밀번호가 없거나 잘못된 비밀번호를 입력하십시오. 당신은 아마 들어올 것입니다. ( # mysql
비밀번호가 관련이없고 사용자가 정의 된 것처럼 간단히 유닉스 루트에서 로그인 할 수도 있습니다 ).
무슨 일이야? 루트로 로그인하고 다음을 수행하면
select User,host,plugin from mysql.user;
+----------------+-----------+-----------------------+
| User | host | plugin |
+----------------+-----------+-----------------------+
| root | localhost | auth_socket |
+----------------+-----------+-----------------------+
참고 로 MariaDB에서 auth_socket
읽을 수 있습니다 unix_socket
. 이 소켓은 비밀번호를 무시 하고 비밀번호 확인 없이 해당 Unix 사용자를 허용합니다 . 그렇기 때문에 루트로 로그인 할 수 있지만 다른 사용자로 는 로그인 할 수 없습니다.
따라서 해결책은 사용자를 업데이트하여 auth_socket/unix_socket
비밀번호를 올바르게 설정 하지 않는 것 입니다.
2017 년 현재 Ubuntu 버전 16에있는 MariaDB (<10.2, 아래 주석 참조)에서는 충분합니다. NEWPASSWORD는 비밀번호입니다. mysql_native_password
당신은 그대로 입력합니다.
UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
(플러그인을 비워 두는 것이 가능할 수도 있습니다. YMMV. 시도하지 않았습니다. 이것이 대안입니다.)
UPDATE mysql.user SET plugin = '', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
그렇지 않으면:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASSWORD';
그때
FLUSH PRIVILEGES;
레코드의 경우 사용자를 삭제하고 '%'로 다시 작성하는 솔루션은 데이터베이스에서 완전히 잠겼으며 grant
명령문을 정확하게 얻지 않으면 다른 문제를 일으킬 수 있습니다 . 이미 가지고있는 루트를 쉽게 업데이트하기가 더 쉽습니다.
내 경험상 다른 사용자는 초기 설치 / 업데이트의 일부가 아닌 수동으로 추가되므로 문제는 루트 사용자에게만 발생합니다.