無法在 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

有點晚了,但可能對其他人有用。

根據報告,MariaDB 錯誤導致 Plesk 所需的安全安裝無法正常運作。

從 10.4 開始,如果資料庫沒有 root@localhost 並且腳本在另一個超級使用者下執行,則 mysql_secure_installation 在執行一開始就會卡住。

這會導致無法將定義者從「root」切換到另一個使用者(如 Plesk 所要求的管理員)

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

您沒有 root 用戶,因為初始 Plesk 安裝已將其重新命名為 admin 用戶

因此,由於安裝或更新過程中安全安裝失敗,定義者未從 root 變更為 admin,因此 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 操作並確保它們都正常工作。

相關內容