Ubuntuリポジトリからインストールされたmysql-serverパッケージにデフォルトでインストールされる「debian-sys-maint」ユーザーに何度か噛まれました。
一般に、トラブルシューティングや新しい開発のために、本番データベース(Debian/Ubuntuで実行されていない)の新しいコピーをプルし、mysql.userテーブルを除外するのを忘れて、debian-sys-maintユーザーを失っています。
何らかの理由で新しいmysqlユーザーを追加する場合は、単にテーブルをオーバーレイするのではなく、これらを開発環境に「マージ」する必要があります。
ユーザーがいなくても、私のシステムは機能しているように見えますが、次のようなエラーに悩まされています。
Sudo /etc/init.d/mysql restart
Stopping MySQL database server: mysqld...failed.
error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
編集
追加の質問-/etc/mysql/debian.cnfのパスワードはすでにハッシュされていますか、それともプレーンテキストのパスワードですか?ユーザーを再作成するときに問題になりますが、私は最初の試行で正しく作成したようには見えません。
ありがとう
Debian-sys-maintは何に使用されますか?
それが使用される主なものの1つは、サーバーにログをロールするように伝えることです。少なくとも再ロードとシャットダウンの権限が必要です。
ファイル/ etc/logrotate.d/mysql-serverを参照してください
/etc/init.d/mysql
スクリプトがサーバーのステータスを取得するために使用します。サーバーを正常にシャットダウン/再ロードするために使用されます。
これがREADME.Debianからの引用です
* MYSQL WON'T START OR STOP?:
=============================
You may never ever delete the special mysql user "debian-sys-maint". This user
together with the credentials in /etc/mysql/debian.cnf are used by the init
scripts to stop the server as they would require knowledge of the mysql root
users password else.
紛失した後に復元する最も簡単な方法は何ですか?
最善の計画は、それをなくさないことです。本当にパスワードを紛失した場合は、別のアカウントを使用してパスワードをリセットしてください。 mysqlサーバーのすべての管理者権限を失った場合は、ガイドに従ってルートパスワードをリセットしてから、debian-sys-maint
を修復してください。
このようなコマンドを使用して、後でアカウントを再作成するために使用できるSQLファイルを作成できます。
mysqldump --complete-insert --extended-insert=0 -u root -p mysql | grep 'debian-sys-maint' > debian_user.sql
/etc/mysql/debian.cnfのパスワードはすでにハッシュされていますか
インストール時にパスワードはハッシュ化/暗号化されませんが、新しいバージョンのmysqlは資格情報を暗号化する方法を備えています(参照: https://serverfault.com/a/75036 )。
debian-sys-maintユーザーはデフォルトでa root相当です。 Debianシステムの特定のメンテナンススクリプトで使用され、副作用として、ボックスへのrootアクセス権を持つユーザーが/etc/mysql/debian.cnfのプレーンテキストパスワードを表示できるようにします(良いですか悪いですか?)
次の方法でユーザーを再作成できます。
GRANT ALL PRIVILEGES on *.* TO `debian-sys-maint`@`localhost` IDENTIFIED BY 'your password' WITH GRANT OPTION;
ただパスワードが一致することを確認してください /etc/mysql/debian.cnfにある
コメントだけしたかったのですが正しい構文はそれ自体のエントリに値すると思います。これはdebian-sys-maintユーザーを作成します:
mysql> GRANT ALL PRIVILEGES on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'plaintextpassword' WITH GRANT OPTION; FLUSH PRIVILEGES;
/etc/mysql/debian.cnfファイルがまだある場合は、そこにあるパスワードを使用してください。
もっと思いついてください 妄想 安全なソリューション。
次のこともできます。
Sudo dpkg-reconfigure mysql-server-5.0
これにより、debian-sys-maintユーザーを再作成するオプションが提供されます。既存のユーザーとデータベースは安全です。
debian-sys-maint
の目的でのみlogrotate.d
ユーザーを追加する必要がある場合は、not _ALL PRIVILEGES
またはGRANT OPTION
を付与する必要があります-これは不要です巨大なセキュリティホール。代わりに、このようにRELOAD
特権を持つユーザーを追加することができます(root
としてdbにアクセスしており、xxxxxxをパスワードに置き換えている場合)
# add the user with the reload right
GRANT RELOAD on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'xxxxxx';
# reload the rights
FLUSH PRIVILEGES;
# double check
select * from mysql.user;
2019更新
この回答は古くなっている可能性があります-以下の強く意見のあるコメントをご覧ください。
他の回答では、debian-sys-maintユーザーに必要な最低限の権限セットを除いて、すべてに十分に対処しています。ここでの答えの多くはその点で単に間違っており、実際には危険です。以下を読んで理解しない限り、debian-sys-maint特権(grantオプションを含む)を下げないでください:
Debianメンテナは気まぐれにすべての特権をユーザーに与えませんでした。必要なもの、場所、理由は次のとおりです。これらの特権の一部は他の特権のスーパーセットですが、カスタマイズして要件を削除する場合に備えて、これらの特権を個別にリストします。
もちろん、最後のものは特権の主要な要件です。 mysql_upgradeのマニュアルページには、次のように記載されています。
mysql_upgradeは、現在のバージョンのMySQLサーバーとの非互換性について、すべてのデータベースのすべてのテーブルを調べます。 mysql_upgradeはシステムテーブルもアップグレードするため、追加された可能性のある新しい特権や機能を利用できます。
Mysql_upgradeは、テーブルに互換性がない可能性があることを検出すると、テーブルチェックを実行し、問題が見つかった場合はテーブルの修復を試みます。
[〜#〜] warning [〜#〜] debian-sys-maintが持つ特権を削減する場合は、将来のdebianセキュリティアップデートを手動で処理する準備ができていることを確認してください。 /またはMySQLに触れるアップグレード。 debian-sys-maint特権を減らしてMySQLパッケージの更新を実行し、その結果mysql_upgradeが完了できない場合、データベースが未定義(壊れている)状態になる可能性があります。特権を削減しても、更新が行われるまで日常的な問題は発生しない可能性があるため、安全であると考える根拠として有害な影響を与えずに特権を既に削減しているという事実を無視しないでください。
の代わりに
GRANT ALL PRIVILEGES on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY PASSWORD('your password') WITH GRANT OPTION; FLUSH PRIVILEGES;
おもう
GRANT ALL PRIVILEGES on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'your password' WITH GRANT OPTION; FLUSH PRIVILEGES;
パスワードがハッシュされていないので...?
MySQL 5.6+を使用する場合、関連するパスワードを使用してmysql_config_editor
コマンドを使用してユーザー'debian-sys-maint'@'localhost'
のエントリを作成することをお勧めします。つまり、パスワードをサーバーにプレーンテキストで保存する必要はありません。
mysql_config_editor set --login-path=debian-sys-maint --Host=localhost --user=debian-sys-maint --password
これに続いて、debian固有の設定ファイル/etc/mysql/debian.cnf
を変更して、ユーザー名とパスワードの詳細をファイルに保存しないようにすることができます。
最後に、MySQLのlogrotateファイルを変更して、debian固有のファイルの代わりに~/.mylogin.cnf
ファイルに保存されているログインの詳細を使用するように置き換えます。
/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf
と
/usr/bin/mysqladmin --login-path=debian-sys-maint
お役に立てれば :)
デイブ
これへの付記として、debian固有のものを無効にしたい理由について このmysqlperformanceblog post を見てください。