Ubuntuに新規インストールした後、ユーザー 'root' @ 'localhost'(パスワード:YESを使用)のアクセスが拒否されました


124

今日、私はルートとしてUbuntu 14.04.1 LTS llにログインしました

そしてapt-get install mariadb-server(sudoなしでrootとして)。

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;

しかし、これは助けにはなりませんでした。何か考えはありますか?同様の質問に対する答えは見つかりませんでした。


rootのパスワードをリセットしてみましたか?
Ozgur Bar、2015

回答:


277

TL; DR: mysql / mariadbの新しいバージョンにアクセスするには、ルートユーザーとして、新しいインストール後に、ルートシェルにいる必要があります(つまりsudo mysql -u root、または最初にmysql -u root起動したシェルの内部にいる必要があります)。su -sudo -i


Ubuntuで同じアップグレードを行ったばかりで、同じ問題が発生しました。

奇妙だったのは

sudo /usr/bin/mysql_secure_installation

パスワードを受け入れ、設定を許可しますがrootmysqlクライアント経由でログインできませんでした

私はmariadbを

sudo mysqld_safe --skip-grant-tables

他のすべてのユーザーは引き続き問題なくアクセスできますが、ルートとしてアクセスを取得します。

mysql.userrootでplugin列が設定されているのに気付いたテーブルを見ると、unix_socket他のすべてのユーザーは 'mysql_native_password'に設定されています。このページの簡単な説明:https : //mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin/は、Unixソケットがuidクライアントを実行しているプロセスとユーザーのユーザーのプロセスを一致させることでログインを可能にすることを説明していますmysql.userテーブル。つまりroot、rootとしてログインする必要があるため、mariadbにアクセスします。

確かに、必要な認証を使用してmariadbデーモンを再起動します。rootとしてログインできます。

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 rootパスワードに置き換えます)。これにより、rootユーザーのログインが有効になります。

または、mysqlクエリを実行します。

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

パスワードを変更せずにパスワードログインを使用するようにrootアカウントを変更しますが、これにより、mysql / mariadbがrootパスワードなしでインストールされる可能性があります。

これらのいずれかの後、mysql / mariadbを再起動する必要があります。

sudo service mysql restart

出来上がりです。個人アカウントから mysql -u root -p

これを行うとセキュリティが低下することに注意してくださいおそらく、MariaDBの開発者は、正当な理由により、このようなrootアクセスを有効にすることを選択しています。

それについて考えなければならsudo mysql -u root -pないのはとてもうれしいので、それに切り替えますが、他に解決策が見つからなかったので、自分の解決策を投稿したいと思いました。


7
「mariadbにrootとしてアクセスするには、rootとしてログインする必要があります。」-この文は回答の先頭にある必要があります。
フィリップルートヴィヒ

1
なぜGRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>'; 特権をフラッシュする前にコマンドを2回実行するのですか?
Blairg23

4
これは、インスタレーション中の大きな赤い文字など、どこかもっと目に見えるはずです...できるだけ早くサーバーをセットアップしようとして数時間の時間を無駄にしただけです...
Gall Annonim

1
ところで、私のように怠け者なら、次のようにして2秒ほど節約できます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

そして、あなたはローカルホストで「あなたのパスワード」で「ユーザー」でログインすることができます


12

コマンドを試してください

sudo mysql_secure_installation

Enterキーを押してmysql / mariadbのrootに新しいパスワードを割り当てます。

次のようなエラーが発生した場合

エラー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にログインする必要がありました。最初にインストールするときにプロンプ​​トが表示される「ハード...」に何らかの関係がある可能性があります。そう:

$ 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.