1

我刚刚发现了 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

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

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

4

1 回答 1

1

更新:

进一步调查显示,此问题中描述的问题以及我对它的初步回应(如下)可能与表 mysql.event问题的错误定义有关。就我而言,我有 1) 将 MySQL 5.7.33 中的完整转储(包括mysql数据库)加载到全新安装的 MariaDB10.5.9;2) 发现这不是一个好主意;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','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','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_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-server 和 MariaDB-client
  2. 删除 /etc/my.*
  3. 删除 /var/lib/mysql
  4. 重新安装 MariaDB-server 和 MariaDB-client
  5. 重新加载数据库转储,再次省略mysql数据库的转储

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

因此,无法从mysql.user中进行选择的问题似乎不是由mysql.user从 table 更改为 view 引起的,而是与我的“不正确”数据库迁移相关的其他一些问题。


我最初的回答:

(仅供参考)

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

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

更长的版本,来自MariaDB 10.4 中的身份验证 — 了解更改

密码存储已更改。所有用户帐户、密码和全局权限现在都存储在 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,"plugin":"mysql_native_password","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
于 2021-04-02T20:50:47.067 回答