mysql(mariadb)エラー1698(28000):ユーザー 'root' @ 'localhost'のアクセスが拒否されました


23

Xubuntu 15.04に取り組んでいます。MariaDB-Serverをさまざまなシステムに既にインストールしており、インストール中に常にrootパスワードを求められました。ただし、今回は、パスワードの入力を求められたことを覚えていません。パスワード(または空のパスワード)なしでログインしようとすると、Access denied for user 'root'@'localhost'エラーが発生します。私はパッケージを完全にアンインストールしようとしました

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

再インストールしても、ルートパスワードの入力は求められませんでした。

ユーザー 'root' @ 'localhost'に対して拒否されたアクセスを修正する方法をmysqlmysqld --skip-grant-tablesから 試みました。mysqlデータベースでrootユーザーのパスワードを変更できます-少なくともハッシュ値が変更されます-しかし、mysql-serverの再起動後、新しいパスワードでログインできません。それでも同じエラーが発生します。

ユーザーdebian-sys-maintは存在しません。そのため、これを使用して何かを修正することはできません。

他に私が試すことができるアイデアはありますか?


:StackOverflowの上の同じ質問で役に立つスレッドstackoverflow.com/questions/39281594/...
ケビン-復活モニカ

回答:


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バージョンで必要だったように使用する必要はありません。(技術的には、この対策は「パスワードのリセット」ではなく、プラグインを無効にすることです。)
ベンジョンソン

1
+1、理由を説明できますか?
A1Gard

4
このアプローチは、後で問題を引き起こすでしょう。プラグインを無効にすると、そのプラグインでログインできると仮定して、毎日のcronジョブが中断します。詳細については私の答えをご覧ください。
コラン

11

新しいセットアップのアイデアは、パスワードをまったく使用しないことです。詳細については、UNIX_SOCKET認証プラグインを参照してください。

特に重要なのは、Ubuntu 16.04 の/usr/share/doc/mariadb-server-10.0/README.Debian.gzの内容です:

新規インストールでは、rootパスワードは設定されず、debian-sys-maintユーザーはもう作成されません。代わりに、MariaDBルートアカウントは、unixソケットを使用して認証されるように設定されます。たとえば、rootまたはsudoによるmysqld呼び出しは、ユーザーにmysqldプロンプトを表示させます。

mysqlユーザー「root」を削除することはできません。パスワードは設定されていませんが、unix_authプラグインは、rootユーザーとしてのみローカルで実行できるようにします。

/etc/mysql/debian.cnfのクレデンシャルは、サーバーを停止してログローテーションを実行するためにinitスクリプトによって使用されるユーザーを指定します。これは、rootが直接実行できるため使用されなくなったdebian-sys-maintユーザーでした。

そのため、rootでそのプラグインを無効にしてパスワードを設定すると、パスワードなしでrootとしてログインするもののプラグインを使用すると、毎日の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認証プラグインの非自明な意味合いが有効にされている(デフォルトになりました)ルートデータベース・ユーザーとして認証するために、1つの機能があり、パスワード付きで無効になっています。mariadb.com/kb/en/mariadb/unix_socket-authentication-pluginのどこにも、この重大な制限について言及されていません。したがって、SSHなどを介してルートとしてログインすることはできません。
ベンジョンソン

2

この投稿からの回答に従って問題を解決しました:

MySQL(MariaDB)のルートパスワードをリセットできません

すべてのルートのmysql.userのプラグインフィールドを空の文字列に変更する必要があります。


この問題については、ここで説明しています。percona.com
2016/03/16

3
このアプローチは、後で問題を引き起こすでしょう。プラグインを無効にすると、そのプラグインでログインできると仮定して、毎日のcronジョブが中断します。詳細については私の答えをご覧ください。
コラン

1

インストール直後に次のコマンドを実行して実行しました。

$ sudo mysql_secure_installation

最初のステップでは、パスワードは空白なので、Enterキーを押します。


1
すでに設定されている場合は空白ではありません。これは忘れられたpwです。したがって、まだログインできません
Dave Everitt

0

ストレッチのあるraapberry piでも同じ問題がありました。私の解決策は、以下を実行して、すべての特権を持つ新しいユーザーを作成することでした。

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 |
+------+-----------+-------------+

私は、rootでログインしているが、私にとっては、このコマンドは、まだMariaDBのrootパスワード...私は忘れてしまったがってる:-(
デイブEveritt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.