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

时间:2008-12-03 18:36:44

标签: mysql mysql-error-1142

我正在尝试使用如下查询将一些数据从生产数据库移植到我的沙箱:

INSERT `dbsandbox`.`SomeTable`(Field1, Field2, Field3)
SELECT t.Field1, t.Field2, t.Field3
FROM `dbprod`.`SomeTable` t;

当我尝试这种跨数据库连接时,我收到以下错误:

错误1142(42000):用户'myusername'@'server.domain.tdl'的SELECT命令被拒绝为表'SomeTable'

有问题的用户对两个数据库的相关表都有权限。我已经在unix mysql客户端和windows MySQL Query Browser应用程序中尝试了这个,结果相同。

我错过了什么?

2 个答案:

答案 0 :(得分:8)

事实证明这是一个权限问题。源数据库需要我用于访问任何表的用户名的密码。目标只需要用户名在localhost上。

即使我每次在跨数据库查询的上下文中使用密码启动MySQL客户端,也会尝试另一个连接。此连接不记得我最初使用密码对客户端进行了身份验证,因此从沙箱连接到生产数据库失败。显然,明确声明表的数据库名称有时也意味着需要另一个连接。

答案是从生产数据库启动查询,引用没有数据库限定符的本地表,然后插入到沙箱数据库表。这一次有效:

USE dbprod

INSERT dbsandboxSomeTable(Field1,Field2,Field3) SELECT t.Field1,t.Field2,t.Field3 来自SomeTable t;

答案 1 :(得分:4)

这听起来像权限问题。通常以数据库方式在数据库上设置用户权限,因此目标用户无权访问源。

首先确保您可以从源数据库中进行选择。

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

这有用吗?如果没有,那么您需要授予用户对源数据库的选择权限。

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