Error number: MY-013126; Symbol: ER_SERVER_NO_SYSTEM_TABLE_ACCESS; SQLSTATE: HY000
Message: Access to %s ‘%s.%s’ is rejected.
错误说明
ER_SERVER_NO_SYSTEM_TABLE_ACCESS错误的官方定义是“服务器不允许使用系统表”,该错误的MySQL编号是MY-013126,SQLSTATE代码是HY000。该错误是应用程序或 MySQL服务器拒绝使用系统表时发出的错误信息,这在某些情况下可能是由权限问题(比如MySQL用户缺少安全权限)或一些外部因素而触发的(比如系统表位于一个保护的数据库)。该错误可由MySQLMySQL在系统表达到时发出并显示在控制台或应用程序的错误日志中。它也可以像其他MySQL错误一样,以下OCI状态码的形式显示给MySQL客户端,这样客户端就可以构建出响应的错误信息,比如ER_SERVER_NO_SYSTEM_TABLE_ACCESS。
常见案例
该错误常常发生在MySQL服务器上,当一个用户(或应用程序)尝试访问特定系统表(比如information_schema)而没有指定的权限(比如select权限)时。MySQL服务器将抛出一个ER_SERVER_NO_SYSTEM_TABLE_ACCESS错误,拒绝用户的系统表访问权限。
另外,也有可能发生类似的情况,即MySQL服务器拒绝访问系统表(内部MySQL用户访问),因为系统表位于某个受保护的数据库/目录中(比如/mysql/system_tables)。
解决方法
为了解决命令行错误ER_SERVER_NO_SYSTEM_TABLE_ACCESS,您需要看看错误所提示的MySQL用户是否具有正确的权限,来访问系统表。检查mysql.user表中的用户权限,以确定是否存在某种权限问题:
GRANT SELECT ON *.* TO ‘testuser’@’localhost’;
如果该错误仍然存在,并且可以确定不是权限问题,则可以尝试在数据库服务器中重新启动MySQL服务,以确保访问系统表的权限正确激活。
另外,如果系统表位于某个受保护的数据库/目录中,则需要将其挪出受保护的状态,以正确的权限访问系统表。
总的来说,ER_SERVER_NO_SYSTEM_TABLE_ACCESS错误是由权限问题引起的,所以可以尝试通过更改MySQL用户权限,或者将系统表挪出受保护的位置来解决该问题。