首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mysql中启用跨库joins?

如何在mysql中启用跨库joins?
EN

Stack Overflow用户
提问于 2008-12-03 18:36:44
回答 2查看 13.6K关注 0票数 6

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

代码语言:javascript
复制
INSERT `dbsandbox`.`SomeTable`(Field1, Field2, Field3)
SELECT t.Field1, t.Field2, t.Field3
FROM `dbprod`.`SomeTable` t;

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

错误1142 (42000):拒绝对表'SomeTable‘的用户'myusername'@'server.domain.tdl’执行SELECT命令

有问题的用户有权访问两个数据库的有问题的表。我已经在unix mysql客户端和windows MySQL查询浏览器应用程序中尝试过了,结果都是一样的。

我遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2008-12-11 18:59:03

事实证明这是权限问题。源数据库需要我使用的用户名的密码才能访问任何表。目标只要求用户名在本地主机上。

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

答案是从生产数据库发起查询,引用不带数据库限定符的本地表,然后插入到沙箱数据库表中。这一次它起作用了:

使用dbprod

插入dbsandboxSomeTable(Field1,Field2,Field3)从SomeTable中选择t.Field1,t.Field2,t.Field3 t;

票数 9
EN

Stack Overflow用户

发布于 2008-12-03 18:52:16

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

首先,确保您可以从源数据库执行select。

代码语言:javascript
复制
SELECT t.Field1, t.Field2, t.Field3
FROM `dbprod`.`SomeTable` t;

这行得通吗?如果不是,则需要授予用户对源数据库的select权限。

两个数据库都在同一台服务器上,对吗?

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/338251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档