通过 JDBC 使用 View-over-View DDL “拒绝用户的任何命令”

C. *_*yer 7 mysql jdbc view

我在这里遇到了一个非常奇怪的问题。我们使用 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'
Run Code Online (Sandbox Code Playgroud)

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

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

任何可能导致这种情况的好主意?

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

Ste*_* Mc 8

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

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

  • 太棒了,所以也许八年后这个谜团就解开了!我真的不能再尝试了,但我愿意接受这个作为答案。谢谢! (3认同)