Mariadb 10.5.x 和 Wordpress 问题,这要归功于“mysql.user”现在是一个视图

问题描述

我刚刚发现了 MariaDB 最新版本的一个愚蠢的新问题,其中包含 MysqL.user 作为视图。我所有导入的 wordpress 数据库突然无法从博客连接。当我尝试甚至列出 MysqL.user 时,它向我显示

> select * from MysqL.user; 
ERROR 1356 (HY000): View 'MysqL.user' references invalid table(s)
or column(s) or function(s) or definer/invoker of view lack 
rights to use them

我们能做些什么来解决这个问题?

编辑:找到 this question,但没有解决方案,只有建议。 ALTER USER 命令 - 在哪里使用以及使用什么设置?我是否必须以某种方式更改每个博客数据库的权限?

解决方法

更新:

进一步调查显示,此 Question 中描述的问题以及我对此的初步回应(如下)可能与 表 mysql.event 的定义不正确 问题有关。就我而言,我有 1) 从 MySQL 5.7.33 加载完整转储(包括 mysql 数据库)到新安装的 MariaDB10.5.9; 2) 发现 this was not a good idea; 3) 编辑我的转储文件以排除 mysql 数据库,以及 4) 重复加载而不删除任何数据库或配置。

这导致数据库正常运行,但是(除了本问题中描述的问题)a) /usr/sbin/mariadbd --verbose --help 会尝试运行数据库服务器而不是打印帮助,b) 在启动时总是出现以下错误发生:

Apr 05 08:52:46 xxx mariadbd[22668]: 2021-04-05  8:52:46 0 [ERROR] Incorrect definition of table mysql.event: expected column 'sql_mode' at position 14 to have type set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH','EMPTY_STRING_IS_NULL','SIMULTANEOUS_ASSIGNMENT'),found type set('REAL_AS_FLOAT','NOT_USED','NO_B
Apr 05 08:52:46 xxx mariadbd[22668]: 2021-04-05  8:52:46 0 [ERROR] mariadbd: Event Scheduler: An error occurred when initializing system tables. Disabling the Event Scheduler

今天,我能够通过以下方式更正这些问题(在 Amazon Linux 2 下):

  1. 卸载 MariaDB 服务器和 MariaDB 客户端
  2. 删除 /etc/my.*
  3. 删除 /var/lib/mysql
  4. 重新安装 MariaDB 服务器和 MariaDB 客户端
  5. 重新加载数据库转储,再次省略mysql数据库的转储

此时,我不仅有干净的数据库启动和正确的 /usr/sbin/mariadbd --verbose --help 操作,我还发现 select * from mysql.user 工作正常!

因此,无法从 mysql.user 中进行选择的问题似乎不是由于将 mysql.user 从表更改为视图而导致的,就像我原来的那样想过,但来自与我的“不正确”数据库迁移相关的其他一些问题。


我最初的回答:

(仅供参考)

经过大量研究,我至少找到了这个问题的部分答案:

tl;博士:select * from mysql.global_priv 然后对于每个用户, show grants for 'XXX'@'localhost';

更长的版本,来自Authentication in MariaDB 10.4 — Understanding the Changes

密码存储已更改。所有用户帐户、密码和全局权限现在都存储在 mysql.global_priv 表中。 mysql.user 表发生了什么?它仍然存在并且具有与以前完全相同的一组列,但现在它是对 mysql.global_priv 的一个视图......"

上述文章不仅提供了什么,还提供了为什么。我不同意这一切。特别是声称​​旧的 mysql.user 表仍然存在,你可以像以前一样从中选择,但你不能(因此这个问题)。尽管如此,我还是欣慰地从 MariaDB 中发现了一个相对连贯的解释。

最后,举个例子:

MariaDB [(none)]> select * from mysql.global_priv\G
*************************** 1. row ***************************
Host: localhost
User: mariadb.sys
Priv: {"access":0,"plugin":"mysql_native_password","authentication_string":"","account_locked":true,"password_last_changed":0}
*************************** 2. row ***************************
Host: localhost
User: root
Priv: {"access": 1844674407370915,"plugin": "mysql_native_password","authentication_string": "*9A87226E872127C756290C504DB5D9076E","auth_or": [{},{"plugin": "unix_socket"}],"password_last_changed": 1617303275}
*************************** 3. row ***************************
Host: localhost
User: mysql
Priv: {"access":1844674407371615,"authentication_string":"invalid","auth_or":[{},{"plugin":"unix_socket"}]}
*************************** 4. row ***************************

MariaDB [(none)]> show grants for 'root'@'localhost'\G
*************************** 1. row ***************************
Grants for root@localhost: GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` IDENTIFIED VIA mysql_native_password USING '*9A87226E872127C756290C5BF177504DB5D9076E' OR unix_socket WITH GRANT OPTION
*************************** 2. row ***************************
Grants for root@localhost: GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...