如何在MySQL中启用跨数据库连接?

6
我试图使用以下查询语句将一些数据从生产数据库传输到我的沙盒环境:
INSERT `dbsandbox`.`SomeTable`(Field1, Field2, Field3)
SELECT t.Field1, t.Field2, t.Field3
FROM `dbprod`.`SomeTable` t;

当我尝试进行跨数据库连接时,会出现以下错误:
错误1142(42000):用户'myusername'@'server.domain.tdl'没有对表'SomeTable'的SELECT权限。
该用户在两个数据库中都有访问相应表格的权限。我已经在Unix mysql客户端和Windows MySQL Query Browser应用程序上尝试过,但结果相同。
我错过了什么?
2个回答

9
原来是权限问题。源数据库要求使用的用户名需要密码才能访问任何表格,而目标数据库只需要该用户名在本地主机上即可。即使我每次在MySQL客户端中使用密码启动跨数据库查询,也会尝试另一个连接。这个连接不记得我最初使用密码对客户端进行了身份验证,因此从沙盒连接到生产数据库失败了。显然,有时候明确指定表格的数据库名称意味着需要另一个连接。
解决方法是从生产数据库发起查询,在没有数据库限定符的情况下引用本地表格,然后插入到沙盒数据库表格中。这次成功了:
USE dbprod
INSERT dbsandbox.SomeTable(Field1, Field2, Field3) SELECT t.Field1, t.Field2, t.Field3 FROM SomeTable t;

6
似乎是权限问题。通常情况下,用户权限是以数据库的形式设置的,因此目标用户无法访问源数据库。

首先,请确保您可以从源数据库进行选择操作。

SELECT t.Field1, t.Field2, t.Field3
FROM `dbprod`.`SomeTable` t;

这是否有效?如果无效,则需要在源数据库上授予用户选择权限。

两个数据库都在同一服务器上/内,是吗?


是的,两个数据库都在同一台服务器上。无论是在使用dbprod还是dbsandbox时发出查询语句,都可以正常工作。 - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接