Plesk 서버에서 db를 생성하거나 삭제할 수 없습니다.

Plesk 서버에서 db를 생성하거나 삭제할 수 없습니다.

오늘 저는 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이 실행 시작 시 중단됩니다.

이로 인해 정의자를 '루트'에서 다른 사용자로 전환할 수 없게 됩니다(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를 다시 관리자로 변경해야 합니다(파일에서 수동으로 수행했지만 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 작업을 확인하고 모두 제대로 작동하는지 확인하세요.

관련 정보