我在这里遇到了一个非常奇怪的问题。我们使用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:我知道在视图上创建视图并不是最好的主意,但暂时假设在这种情况下无法避免。
我发现在创建视图之前发布use database
语句解决了我的问题。这似乎与MySql错误报告错误#91122"无法创建包含from子查询(未选择数据库)的视图"有关
基本上,如果您尝试使用dbname.view_name
语法创建视图,则可能会出现错误。但是,如果您事先发布use database
声明,那么一切都很好。
我在这里遇到了非常相似的问题。假设您已经检查了授权,请尝试在创建视图之前显式设置正在使用的数据库。
我的问题是由于创建了 VIEW,其中某些列来自目标实例上缺少的另一个数据库。似乎如果您没有正确的权限,也会出现这个"有意义的"错误"拒绝用户的任何命令......"
不幸的是,我们从未找到解决方案,因此我们只是采用了调用在mysql客户端中执行的外部SQL脚本的解决方法。
不确定这是否仍然是当前Mysql的问题,与此同时,我们迁移到了不同的数据库,而且我什至不再在这个团队工作了。
只是在这里提到这一点,因为它似乎仍然是一个经常查看的问题。
在创建视图之前use database
查询工作绝对魅力,正如史蒂夫·麦克所回答的那样。我被困了好几个星期!
我认为您的 GRANT 权限存在缺陷。
使用 JDBC 远程访问数据库时,还需要为用户计算机创建授予权限。
您有以下补助金吗?如果没有,请尝试像下面这样授予:
grant all on <database>.* to ‘< username >’@'%' identified by '< passwd >';