我有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' 表时,我确实发现了差异。我得到了 2 个条目
Host Db User
% harrington fiji
localhost pacsdb pacs
我尝试删除 localhost 的 pacsdb 条目,并插入 pacsdb 的新条目,并将主机设置为“%”。显然这不是从本地主机更改的方法,因为我很难到达 pacsdb。我从“db”中删除了该条目,并插入了一个新条目,并将“%”设置回“localhost”。这让我重新上线并出现访问被拒绝错误。
所以我的问题是:如何从“localhost”更改为“%”?
最佳答案
问题不在于查询,而在于与数据库的连接。
MySql 可以限制从不同于本地主机的 IP 访问它的用户的访问。
可能您没有权限从您的IP访问数据库。
尝试使用以下命令添加正确的权限
GRANT ALL PRIVILEGES
ON database.*
TO 'user'@'*'
IDENTIFIED BY 'newpassword';
显然您无法远程连接来执行该命令。您需要通过 SSH 在远程计算机上输入并在本地启动该命令。
关于java - 2 个数据库,一个可以通过 LAN 使用,另一个必须是本地主机,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35017856/