Plesk サーバーでデータベースを作成または削除できません

Plesk サーバーでデータベースを作成または削除できません

今日、私は、Plesk サーバー上のどのクライアントに属するデータベースも追加または削除できないことに気付きました。

次のエラーが表示されていました:

エラー: 選択したデータベースの一部を削除できません。定義者として指定されたユーザー ('root'@'localhost') が存在しません

そこで、この修正を見つけて実行しました:

# plesk db
# CREATE USER 'root'@'localhost' IDENTIFIED BY 'typepasswordhere';

データベースを追加または削除しようとすると、新しいエラーが発生します。

エラー: データベース サーバーへの接続に失敗しました: ビュー 'mysql.user' は無効なテーブル、列、または関数を参照しているか、ビューの定義者/呼び出し者にそれらを使用する権限がありません

(関連があるかどうかはわかりませんが、数日前に MariaDB を更新しました。ただし、更新後に新しいデータベースを作成したことは確かです)。

CentOS Linux 7.7.1908 (コア) Plesk Onyx バージョン 17.8.11 アップデート #80 mysql 10.4.11-1.el7.centos 10.4.11-MariaDB MariaDB サーバー

答え1

少し遅いですが、他の人にとっては役立つかもしれません。

Plesk に必要な安全なインストールが正しく機能しないという MariaDB のバグが報告されています。

10.4 以降では、データベースに root@localhost がなく、スクリプトが別のスーパーユーザーで実行されると、mysql_secure_installation は実行の最初に停止します。

その結果、定義者を「root」から別のユーザー(Pleskで必要な管理者など)に切り替えることができなくなります。

https://jira.mariadb.org/browse/MDEV-22486

Pleskの初期インストール時に管理者ユーザーに名前が変更されたため、ルートユーザーは存在しません。

その結果、インストールまたはアップデート中に安全なインストールが失敗したため、定義者がルートから管理者に変更されなかったため、Pleskはデータベースに接続できませんでした。

そして、次のエラーが発生してすべてのアクションが失敗します。

[root@hostname ~]# plesk db
...
MariaDB [psa]> SELECT User FROM mysql.user;
ERROR 1449 (HY000): The user specified as a definer ('root'@'localhost') does not exist

この問題を解決するには、root@localhost ユーザーを作成します。

MariaDB [psa]> CREATE USER root@localhost IDENTIFIED VIA unix_socket USING 'invalid';
Query OK, 0 rows affected (0.015 sec)

このエラーが発生しないようにするには:

エラー: データベース サーバーへの接続に失敗しました: ビュー 'mysql.user' は無効なテーブル、列、または関数を参照しているか、ビューの定義者/呼び出し者にそれらを使用する権限がありません

権限を付与:

MariaDB [psa]> GRANT SELECT ON *.* TO root@localhost IDENTIFIED VIA unix_socket; Query OK, 0 rows affected (0.533 sec)simply grant privileges for the new user:

これにより、Plesk でデータベース操作が機能するようになります。ただし、データベースへのフル アクセス権を持つ不要なユーザーを削除すると良いでしょう (セキュリティ上は良いことです)。DEFINER を admin に戻す必要があります (ファイル内で手動で実行しましたが、MySQL の ALTER VIEW で実行することもできます)。

[root@localhost]# grep root /var/lib/mysql/mysql/*.frm
user.frm:definer_user=root
>>>
[root@localhost]# grep root /var/lib/mysql/mysql/*.frm
user.frm:definer_user=admin

変更を適用するにはテーブルをフラッシュします:
MariaDB [psa]> FLUSH TABLES;

Query OK, 0 rows affected (0.003 sec)

その後、定義者が変更されたことを確認します。

MariaDB [psa]> SHOW CREATE VIEW mysql.user;
...
| user | CREATE ALGORITHM=UNDEFINED DEFINER=`admin`@`localhost` 

ルート データベース ユーザーを削除します。

MariaDB [psa]> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'root'@'localhost';

Query OK, 0 rows affected (0.114 sec)



MariaDB [psa]> DROP USER 'root'@'localhost';

Query OK, 0 rows affected (0.025 sec)

Plesk DB アクションをチェックし、すべて正常に動作していることを確認します。

関連情報