web-dev-qa-db-ja.com

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

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

Sudo apt-get remove mariadb-server
Sudo apt-get purge mariadb-server

再インストールしたときに、まだrootパスワードの入力を求められませんでした。

私は mysqlからAccessを修正する方法mysqld --skip-grant-tablesアプローチを試みました 'root' @ 'localhost' を拒否しました。私はmysqlデータベースのrootユーザーのパスワードを変更することができます - 少なくともハッシュ値の変更は - 私はまだmysqlサーバーの再起動後に新しいパスワードでログインすることができません。私はまだ同じエラーが出ます。

ユーザdebian-sys-maintが存在しません。だから、私はそれを使って何かを修正することはできない。

他にどんなアイディアを試すことができますか?

22
d72b617c

私はこの記事の答えを読んで問題を解決しました:

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

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

2
d72b617c

パスワードを再設定する必要があります。そのために

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

新しい設定の考え方は、パスワードをまったく使用しないことです。詳細については、 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スクリプトがサーバーを停止してlogrotationを実行するために使用するユーザーを指定します。これはかつてrootとして直接実行することができなくなったdebian-sys-maintユーザーでした。

そのため、rootでそのプラグインを無効にしてパスワードを設定した場合、パスワードなしでrootとしてログインしますが、プラグインを使用していると想定しているため、毎日のcronジョブは失敗します。

後でそれが言う:

スクリプトは、ユーザーが必要な権限を持っていて、unix_socketを介して識別されるように実行する必要があります。

そのため、パスワードをアプリケーションで使用しないようにする必要があります。

11
colan

私はインストール直後に、このコマンドを実行することによってそれをしました:

$ Sudo mysql_secure_installation

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

1
dxvargas

私はストレッチとラズベリーパイに同じ問題を抱えていた。私の解決策は、次のようにしてすべての権限を持つ新しいユーザーを作成することでした。

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
trasba

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