【问题标题】:Using information from multiple databases with one user与一个用户一起使用来自多个数据库的信息
【发布时间】:2014-03-05 16:08:49
【问题描述】:

我正在尝试使用一个用户帐户访问多个数据库中的信息。尽管我相当确定用户对这两个数据库都拥有权限,但 MySQL 拒绝了我对第二个数据库的 SELECT 查询。

我的 SQL 查询如下所示:

SELECT a.id AS id, a.name AS a_name, b.naam AS b_name
FROM accounts a
LEFT JOIN database_b.uac_bridge bridge ON a.id = bridge.foreign_id
LEFT JOIN database_b.leden b ON b.id = bridge.master_id
WHERE a.active=1

我已经从代码中删除了一些名称,并从 CodeIgniter ActiveRecord 音译它,所以我希望查询中没有错字。我相当确定查询本身是正确的,它在我的开发机器(Windows 7,MySQL 5.5.14)上运行良好,但在服务器上失败(不确定是什么操作系统,一些 Linux 变体,MySQL 5.5.27)。

我收到以下错误消息:

Error Number: 1142
SELECT command denied to user 'username'@'localhost' for table 'uac_bridge'

登录的用户是为 database_a 创建的,并且在 database_b(通过 DirectAdmin 配置)上拥有 SELECT 授权(但没有其他授权)。我已经确认用户可以通过登录phpMyAdmin来读取database_b中的数据。

有谁知道如何解决这个问题?

【问题讨论】:

  • 如果您尝试一个只访问uac_bridge 表的查询,它可以工作吗?
  • show grants for demos_barboek@localhost 说什么?
  • 第一个;不,那也行不通,如果我使用 USE database_b;第一的。第二,不幸的是我不知道,因为我没有任何可以执行该查询的用户帐户。我通过 DirectAdmin 控制授权。 P.S.:其实 USE databas_b 调用也被拒绝(错误 1044)
  • 那么错误似乎是真实的,并且显然与在同一查询中使用多个数据库无关。他只是没有访问该表的权限。我不熟悉 DirectAdmin。我建议您在 dba.stackexchange.com 上寻求帮助,这不是编程问题。
  • 我刚刚测试并确认使用此帐户登录phpMyAdmin时可以从该数据库中读取数据。所以这似乎是一个编程问题?我在 StackOverflow 上找到了相关问题,我现在正在尝试找到它们..

标签: php mysql user-accounts multiple-databases


【解决方案1】:

作为参考,答案很简单,MySQL 数据库名称在 Linux 上区分大小写,但在 Windows 上不区分大小写 (https://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html)。

这是错误,我没有以正确的大小写引用数据库,MySQL 给出了无权限错误,因为它无法识别数据库名称。

【讨论】:

    猜你喜欢
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多