Ubuntu에 새로 설치 한 후 사용자 'root'@ 'localhost'(암호 : YES 사용)에 대한 액세스가 거부되었습니다.


124

오늘은 Ubuntu 14.04.1 LTS ll에 루트로 로그인했습니다.

그런 다음 apt-get install mariadb-server(sudo없이 루트로).

mySQL -h localhost -u root --password=<PW>내가 가진

사용자 'root'@ 'localhost'에 대한 액세스가 거부되었습니다 (암호 사용 : YES).

mySQL -u root -p나는 DB에 로그인했다

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '<PW>';
FLUSH ALL PRIVILEGES;

그러나 이것은 도움이되지 않았습니다. 어떤 아이디어가 있습니까? 비슷한 질문에 대한 답을 찾지 못했습니다.


루트의 비밀번호를 재설정 해 보셨습니까?
Ozgur Bar

답변:


277

TL; DR은 : 새로운 설치 한 후 루트 사용자로 후 mysql을 / mariadb의 액세스 최신 버전에, 당신이 루트 쉘에 있어야합니다 (즉 sudo mysql -u root, 나 mysql -u root에 의해 시작 쉘 내부 su -또는 sudo -i첫번째)


동일한 업그레이드를 방금 수행 한 Ubuntu에서 동일한 문제가 발생했습니다.

이상했던 것은

sudo /usr/bin/mysql_secure_installation

내 비밀번호를 수락하고 설정할 수 있지만 클라이언트 를 root통해 로그인 할 수 없습니다.mysql

나는 mariadb를 시작해야했다

sudo mysqld_safe --skip-grant-tables

다른 모든 사용자는 여전히 정상적으로 액세스 할 수 있지만 루트로 액세스 할 수 있습니다.

mysql.user테이블을 보면 루트에 대해 plugin열이 설정된 unix_socket반면 다른 모든 사용자는 'mysql_native_password'로 설정되어 있음을 알았습니다. 이 페이지를 간략히 살펴보십시오 : https://mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin/ 은 Unix 소켓 uid이 클라이언트를 실행하는 프로세스를 사용자의 프로세스와 일치 시켜 로그인을 가능하게한다고 설명합니다 . mysql.user표. 즉 root, 루트로 로그인해야하므로 mariadb에 액세스 합니다.

인증이 필요한 mariadb 데몬을 충분히 다시 시작하면 다음을 사용하여 루트로 로그인 할 수 있습니다.

sudo mysql -u root -p

또는

sudo su -
mysql -u root -p

이 작업을 수행 한 후 sudo를 수행하지 않고 액세스하는 방법에 대해 생각했습니다. 이는 mysql 쿼리를 실행하는 문제입니다.

GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;

( <password>원하는 mysql 루트 비밀번호로 대체 ). 이것은 루트 사용자에 대한 암호 로그인을 활성화했습니다.

또는 mysql 쿼리를 실행합니다.

UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin = 'unix_socket';
FLUSH PRIVILEGES;

비밀번호를 변경하지 않고 비밀번호 로그인을 사용하도록 루트 계정을 변경하지만, 루트 비밀번호없이 mysql / mariadb 설치가 남을 수 있습니다.

다음 중 하나를 수행 한 후 mysql / mariadb를 다시 시작해야합니다.

sudo service mysql restart

그리고 짜잔을 통해 내 개인 계정에서 액세스했습니다. mysql -u root -p

이렇게 하면 보안 이 저하된다는 점에 유의하십시오. 아마도 MariaDB 개발자는 정당한 이유로 이와 같은 루트 액세스 작업을 선택했습니다.

그것에 대해 생각하면서 나는 그것을 가지고 sudo mysql -u root -p다시 전환하고 있지만 다른 곳에서 찾을 수 없기 때문에 내 솔루션을 게시 할 것이라고 생각했습니다.


7
"루트로 mariadb에 액세스하려면 루트로 로그인해야합니다." -이 문장이 답의 맨 위에 있어야합니다.
Philipp Ludwig

1
GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>'; privvies를 플러시하기 전에 명령을 두 번 실행하는 이유는 무엇입니까?
Blairg23

4
이것은 내가 .... 최대한 빨리 필요 ... 삶의 그냥 낭비 몇 시간 설정 서버에 시도 어딘가에 더 볼 수, 소 instalation 또는 뭔가 동안 큰 붉은 글자처럼해야한다
담즙 Annonim

1
당신이 나 같은 게으른 경우에 BTW, 당신은 함께 이초처럼 저장할 수 있습니다sudo service mysql restart
zeisi

1
팁을 주셔서 감사합니다. 개발자에게는 좋지만 어떻게 원래대로 되돌릴 수 있습니까?
Sam

42

깨끗한 Ubuntu 16.04 LTS에서 localhost의 MariaDB 루트 로그인이 암호 스타일에서 sudo 로그인 스타일로 변경되었습니다.

그래서 그냥 해

sudo mysql -u root

비밀번호로 로그인하고 싶기 때문에 다른 사용자 'user'를 만듭니다.

MariaDB 콘솔에서 ... ( 'sudo mysql -u root'로 MariaDB 콘솔에 들어갑니다)

use mysql
CREATE USER 'user'@'localhost' IDENTIFIED BY 'yourpassword';
\q

그런 다음 bash 쉘 프롬프트에서

mysql-workbench

그리고 localhost에서 'yourpassword'로 'user'로 로그인 할 수 있습니다.


12

명령을 시도하십시오

sudo mysql_secure_installation

Enter를 누르고 mysql / mariadb루트 에 대한 새 암호를 할당합니다 .

다음과 같은 오류가 발생하면

오류 2002 (HY000) : '/var/run/mysqld/mysqld.sock'소켓을 통해 로컬 MySQL 서버에 연결할 수 없습니다.

서비스 활성화

service mysql start

지금 다시 들어가면

mysql -u root -p

문제를 따르는 경우에 입력 sudo su하고 mysql -u root -p지금 권한 적용 루트를

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '<password>';

이것은 MariaDB의 내 문제를 해결했습니다 .

행운을 빕니다



3

Mariadb에 루트로 액세스하려면 Ubuntu에 루트로 로그인해야했습니다. 처음 설치할 때 수행하라는 메시지가 표시되는 "Harden ..."과 관련이있을 수 있습니다. 그래서:

$ sudo su
[sudo] password for user: yourubunturootpassword
# mysql -r root -p
Enter password: yourmariadbrootpassword

그리고 당신은 안으로.


2

권한을 플러시하는 새로운 명령은 다음과 같습니다.

FLUSH PRIVILEGES

이전 명령 FLUSH ALL PRIVILEGES은 더 이상 작동하지 않습니다.

다음과 같은 오류가 발생합니다.

MariaDB [(none)]> FLUSH ALL PRIVILEGES; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ALL PRIVILEGES' at line 1

도움이 되었기를 바랍니다 :)



0

Ubuntu와 같은 시스템은 auth_socket 플러그인 을 사용하는 것을 선호합니다 . DB에있는 사용자 이름과 mysql 요청을하는 프로세스를 비교하여 인증을 시도합니다. 여기에 설명되어 있습니다.

소켓 플러그인은 소켓 사용자 이름 (운영 체제 사용자 이름)이 클라이언트 프로그램에서 서버에 지정한 MySQL 사용자 이름과 일치하는지 확인하고 이름이 일치하는 경우에만 연결을 허용합니다.

대신 mysql_native_password를 사용하여 되돌릴 수 있으며 , 인증하려면 사용자 / 암호가 필요합니다.

이를 달성하는 방법에 대해서는 대신 이것을 권장 합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.