mysql (mariadb) 오류 1698 (28000) : 사용자 'root'@ 'localhost'에 대한 액세스가 거부되었습니다.


23

Xubuntu 15.04에서 일하고 있습니다. 이미 여러 시스템에 MariaDB 서버를 설치했으며 설치 중에 항상 루트 암호를 요청했습니다. 그러나 이번에는 암호를 묻는 메시지가 기억 나지 않습니다. 비밀번호 (또는 빈 비밀번호)없이 로그인하려고하면 Access denied for user 'root'@'localhost'오류가 발생합니다. 나는 패키지를 완전히 제거하려고 시도했다.

sudo apt-get remove mariadb-server
sudo apt-get purge mariadb-server

다시 설치할 때 여전히 루트 암호를 묻지 않았습니다.

mysqlmysqld --skip-grant-tables접근 방식을 시도하여 사용자 'root'@ 'localhost'에 대한 Access denied 수정 방법을 시도했습니다 . mysql 데이터베이스에서 루트 사용자의 비밀번호를 수정할 수 있지만 (해시 값이 변경됨) mysql-server를 다시 시작한 후에도 새 비밀번호로 로그인 할 수 없습니다. 여전히 같은 오류가 발생합니다.

사용자 debian-sys-maint가 없습니다. 그래서 나는 그것을 고치기 위해 그것을 사용할 수 없습니다.

내가 시도 할 수있는 다른 아이디어가 있습니까?


StackOverflow에 대해 같은 질문이있는 유용한 스레드 : stackoverflow.com/questions/39281594/…
복원 Monica Monica

답변:


36

비밀번호를 재설정해야합니다. 그래서

sudo mysql -u root
use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;

9
이 접근 방식의 명백한 "마법"은 루트 운영 체제 사용자가 plugin: auth_socket기본적으로 활성화되어 있기 때문에 비밀번호를 지정하지 않고도 데이터베이스에 로그인 할 수 있다는 것 입니다. 다시 말해, --skip-grant-tables이전의 MySQL 버전에서 필요했던 것처럼 사용할 필요가 없습니다 . (또한 기술적으로이 방법은 "비밀번호 재설정"이 아니라 플러그인을 비활성화하는 것입니다.)
Ben Johnson

1
+1 이유를 설명 할 수 있습니까?
A1Gard

4
이 방법은 나중에 문제를 일으킬 것입니다. 플러그인을 비활성화하면 해당 플러그인으로 로그인 할 수 있다고 가정하여 일일 cron 작업이 중단됩니다. 자세한 내용은 내 답변을 참조하십시오.
colan

11

새로운 설정의 아이디어는 비밀번호를 전혀 사용하지 않아야한다는 것입니다. 자세한 내용은 UNIX_SOCKET 인증 플러그인 을 참조하십시오.

Ubuntu 16.04 의 /usr/share/doc/mariadb-server-10.0/README.Debian.gz 의 내용은 특히 관련이 있습니다 .

새로 설치하는 경우 루트 비밀번호가 설정되지 않고 더 이상 debian-sys-maint 사용자가 작성되지 않습니다. 대신 MariaDB 루트 계정은 유닉스 소켓을 사용하여 인증되도록 설정됩니다. 예를 들어 root 또는 sudo를 통한 mysqld 호출은 사용자에게 mysqld 프롬프트를 표시합니다.

mysql 사용자 "root"는 절대 삭제할 수 없습니다. 비밀번호가 설정되어 있지 않더라도 unix_auth 플러그인은 루트 사용자로서 로컬로만 실행할 수 있도록합니다.

/etc/mysql/debian.cnf의 자격 증명은 init 스크립트에서 서버를 중지하고 로그 회전을 수행하는 데 사용되는 사용자를 지정합니다. 예전에는 루트로 직접 사용할 수없는 debian-sys-maint 사용자였습니다.

따라서 해당 플러그인을 루트에 대해 비활성화하고 비밀번호를 설정하면 비밀번호없이 루트로 로그인하지만 플러그인을 사용하여 매일 cron 작업이 중단됩니다.

나중에 그것은 말합니다 :

스크립트는 사용자에게 필요한 권한이 있고 unix_socket을 통해 식별되어야합니다.

따라서 더 이상 응용 프로그램에서 암호를 사용하지 않는 것 같습니다.


1
방금 설명 한 바로 그 문제가 발생했습니다. "So if you disable that plug-in for root and set a password, the daily cron job will break as it's assuming it will log in as root without a password..."활성화되는 UNIX_SOCKET 인증 플러그인의 명백한 의미 는 암호 가 있는 루트 데이터베이스 사용자로 인증 할 수 있다는 것 입니다. mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin 에는 이러한 상당한 제한이 언급 되어 있지 않습니다. 따라서 SSH를 통해 루트로 로그인 할 수 없습니다.
벤 존슨

2

이 게시물의 답변에 따라 문제를 해결했습니다.

MySQL (MariaDB) 루트 비밀번호를 재설정 할 수 없습니다

모든 루트에 대한 mysql.user의 플러그인 필드를 빈 문자열로 변경해야합니다.


이 문제는 여기에 설명되어 있습니다 : percona.com/blog/2016/03/16/…
antonu17

3
이 방법은 나중에 문제를 일으킬 것입니다. 플러그인을 비활성화하면 해당 플러그인으로 로그인 할 수 있다고 가정하여 일일 cron 작업이 중단됩니다. 자세한 내용은 내 답변을 참조하십시오.
colan

1

설치 직후 에이 명령을 실행하여 수행했습니다.

$ sudo mysql_secure_installation

첫 번째 단계에서 비밀번호가 비어 있으므로 Enter를 누르십시오.


1
이미 설정되어 있으면 비어 있지 않습니다. 잊어 버린 암호는 ... 로그인 할 수 없습니다
Dave Everitt

0

나는 스트레치가있는 라즈베리 파이에서 같은 문제를 겪었습니다. 내 솔루션은 다음을 수행하여 모든 권한을 가진 새 사용자를 만드는 것입니다.

sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root

MariaDB [(none)]> use mysql
MariaDB [mysql]> FLUSH PRIVILEGES;
GRANT ALL privileges ON mysql.* TO 'admin'@'localhost' with grant option;

이제 로그인하고 수퍼 유저로 사용자 "admin"을 로그인 할 수 있습니다.

이것이 누군가를 도울 수 있기를 바랍니다.


0

그냥 사용 sudo mysql -u root-그게 다야


세부 정보 : 최신 버전은 시스템 인증을 사용하여 mysql에 인증합니다. 따라서 OS로 sudo 할 수 있다면 db root라고 가정합니다. 를 발행하여이를 확인할 수 있습니다 sudo mysql -u root -e "USE mysql; SELECT User, Host, plugin FROM mysql.user;". 이와 같은 것을 볼 수 있습니다 ( auth_socket다른 배포판에서 가능할 수도 있음 )

+------+-----------+-------------+
| User | Host      | plugin      |
+------+-----------+-------------+
| root | localhost | unix_socket |
+------+-----------+-------------+

나는 루트로 로그인하지만, 나를 위해이 명령은 아직도 내가 :-( 잊어 버린 한 MariaDB의 루트 암호를 ... 싶어 해요
데이브 Everitt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.