7

我在这里遇到了一个很奇怪的问题。我们使用 Pentaho Kettle 来管理我们数据库的模式(它又使用 MySQL JDBC mysql-connector-java-5.1.17.jar)。当尝试创建一个包含另一个视图(在本例中为接口)的视图时,我们得到:

2012/06/26 11:46:55 - SQL2 - ERROR : Couldn't execute SQL: CREATE OR REPLACE VIEW `test_delete2` as select  * from interfaces
2012/06/26 11:46:55 - SQL2 - ERROR : ANY command denied to user 'ncim'@'xxx.xxx.xxx..xx' for table '/var/mysql/mysql2018/tmp/#sql_4e67_0'

但是,使用相同的语句和用户,但通过 mysql 命令行客户端,可以按预期工作。此外,使用 JDBC 在普通表上创建视图也可以。

这是服务器端 Solaris 10 上的 MariaDB 5.2.10,但我们也遇到了与 Oracle MySQL 相同的问题。

有什么好主意可能导致这种情况吗?

PS:我知道在视图上创建视图并不是最好的主意,但暂时假设在这种情况下无法避免。

4

6 回答 6

8

我发现在创建视图之前发布use database 声明解决了我的问题。这似乎与 MySql 错误报告Bug #91122 “无法创建包含来自子查询的视图(未选择数据库)”有关

基本上,如果您尝试使用dbname.view_name语法创建视图,则可能会出现错误。但是,如果您use database事先发出声明,那么一切都很好。

于 2020-08-23T15:27:19.547 回答
2

我在这里遇到了一个非常相似的问题。鉴于您已经检查了您的授权,请在创建视图之前尝试显式设置正在使用的数据库。

于 2019-01-02T19:58:25.677 回答
2

我的问题是由于创建了 VIEW,其中一些列来自另一个数据库,而目标实例中缺少该数据库。似乎如果您没有正确的权限,也会出现这个“有意义的”错误“ANY command denied to user ....”

于 2019-12-12T12:21:56.100 回答
1

不幸的是,我们从未找到解决方案,因此我们只是采用了调用在 mysql 客户端中执行的外部 sql 脚本的解决方法。

不确定在当前的 Mysql 中是否仍然是一个问题,同时我们迁移到了不同​​的数据库,而且我什至不再在这个团队工作了。

在这里仅提及这一点,因为它似乎仍然是一个经常被查看的问题。

于 2019-01-04T01:59:44.653 回答
1

use database正如史蒂夫麦克所回答的那样,在创建视图之前进行查询绝对具有魅力。我被困在这几个星期了!

于 2020-09-24T17:44:41.747 回答
0

我认为您的 GRANT 权限存在缺陷。

当使用 JDBC 远程访问数据库时,您还需要为用户机器创建授予权限。

你有如下的 GRANT 吗?如果不尝试授予如下:

grant all on <database>.* to ‘&lt; username >’@'%' identified by '< passwd >';
于 2012-08-03T18:19:11.950 回答