2个数据库,一个我可以通过局域网使用,一个必须是localhost,为什么?

时间:2016-01-26 15:44:11

标签: java mysql netbeans

我有2个数据库:我自己创建的harrington和我继承的pacsdb。这两个都位于相同的MySQL数据库中。我正在使用Netbeans来调试东西。在Netbeans中,我可以通过

连接到数据库
jdbc:mysql://192.168.0.100:3306/harrington?zeroDateTimeBehavior=convertToNull [fiji on Default schema]
jdbc:mysql://192.168.0.100:3306/pacsdb?zeroDateTimeBehavior=convertToNull [pacs on Default schema]
jdbc:mysql://localhost:3306/pacsdb?zeroDateTimeBehavior=convertToNull [pacs on Default schema]

对于我自己的数据库,harrington,我在Netbeans或我自己的Java程序中都没有问题。 Pacsdb将无法使用192.168.0.100进行连接,但它将使用localhost进行连接。在我的程序中,它给出了

java.sql.SQLException: Access denied for user 'pacs'@'192.168.0.100' (using password: YES)

为了检查发生了什么,我查询了sql数据库表'user'。我得到了两个用户都使用'%'作为主机,这是我对代码的期望

        sql = "create user 'pacs'@'%' identified by 'pacs'";
        OK1 = executeStatement(stm1, sql);
        if(OK1) {
            sql = "grant all on pacsdb.* to 'pacs'@'%' identified ";
            sql += "by 'pacs1' with grant option";
            executeStatement(stm1, sql);
            sql = "flush privileges";
            executeStatement(stm1, sql);
        }

当我查询sql'db'表时,我发现了一个区别。我有两个条目

Host      Db         User
%         harrington fiji
localhost pacsdb     pacs

我尝试使用localhost删除pacsdb的条目,并为pacsdb插入一个新条目,并将Host设置为'%'。显然,这不是从localhost更改的方法,因为我很难到达pacsdb。我从'db'中删除了条目,并插入了一个新条目,其中'%'设置回'localhost'。这让我重新接受了拒绝访问错误。

所以我的问题是:如何从'localhost'更改为'%'?

1 个答案:

答案 0 :(得分:1)

问题不是查询,而是与数据库的连接。

MySql可以限制从不同于localhost的IP访问它的用户的访问。

您可能无权从IP访问数据库。

尝试使用以下命令添加正确的权利

GRANT ALL PRIVILEGES
ON database.*
TO 'user'@'*'
IDENTIFIED BY 'newpassword';

显然,您无法远程连接以执行该命令。您需要通过SSH在远程计算机上输入并在本地启动该命令。