当前位置: 首页 > 知识库问答 >
问题:

使用JDBC时拒绝访问数据库

唐阳晖
2023-03-14

我正在开发一个名为movieDB的简单mariaDB数据库,还有一个名为customerAgent的mariaDB用户。我知道StackOverflow上有很多类似的帐户,但我使用的不是根帐户,而是具有最低权限的普通帐户。

我可以通过SSH访问终端中的数据库movieDB,如下所示:

[root@myServer]# mysql -ucustomerAgent -p123

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 102
Server version: 10.2.12-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> USE movieDB;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [movieDB]> show grants;
+----------------------------------------------------------------------------------------------------------------------------+
| Grants for customerAgent@localhost                                                                                         |
+----------------------------------------------------------------------------------------------------------------------------+
| GRANT Customer_Role TO 'customerAgent'@'localhost'                                                                   |
| GRANT USAGE ON *.* TO 'customerAgent'@'localhost' IDENTIFIED BY PASSWORD '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257'       |
| GRANT USAGE ON *.* TO 'Customer_Role'                                                                                      |
| GRANT SELECT ON `movieDB`.* TO 'Customer_Role'                                                                             |
| GRANT SELECT, INSERT ON `movieDB`.`orders` TO 'Customer_Role'                                                              |
+----------------------------------------------------------------------------------------------------------------------------+
5 rows in set (0.00 sec)

MariaDB [movieDB]> select current_role();
+----------------+
| current_role() |
+----------------+
| Customer_Role  |
+----------------+
1 row in set (0.00 sec)

MariaDB [movieDB]> 

但是,当我在localhost上执行JDBC代码时,访问将在行stmt.execute(USE moviDB);被拒绝:

Access denied for user 'customerAgent'@'localhost' to database 'movidDB'

java JDBC代码是:(我已经删除了类中一些不必要的内容,但是如果我遗漏了任何重要的内容,请指出!)

import java.sql.*;
import java.util.*;

Class movieDBFoundation {
    static private String DBServerAddress = "localhost";
    static private Connection conn;

    static private String getDBServerAddress() {
        return DBServerAddress;
    }

    public static void main(String[] args) {

        System.out.println("Connection started.");

        if(DBConnect()) {
            System.out.println("Connection succedded.");
        }
        else {
            System.out.println("Connection failed.");
            return;
        }            
    }

    static private Boolean DBConnect() {
        String connectString = "jdbc:mysql://" + getDBServerAddress() + ":3306/"
              + "?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&&useSSL=false";
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(connectString, "customerAgent", "123");
            System.out.println("Connection reached.");
            Statement stmt;
            stmt = conn.createStatement();
            String SQL = "USE movidDB";
            stmt.execute(SQL);
            return true;
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return false;
    }
}

类似问题的一些答案说JDBC需要数据库的所有特权,但这听起来既不安全也不安全。要实现我在这里的目标,必须拥有所有特权吗?

共有1个答案

马边浩
2023-03-14

您的问题是数据库movidDB不存在。难道不是电影吗?

 类似资料:
  • 我有一个应用程序与cloud firestore通信,根据它的uid获取用户数据,它在当前设置下工作得很好: 然而,这显然是不可接受的,因为它是公众的,并来自消防商店的警告: 您的安全规则被定义为公共的,因此任何人都可以窃取、修改或删除数据库中的数据 感谢任何帮助,指出我写规则的正确方式!我读了消防指南,但一点帮助都没有! 多谢!

  • 问题内容: 我在使它工作时遇到问题。它接收一个字符串,其中包含几条信息。但是,当我尝试将String写入文件以跟踪程序随时间的变化时,我收到拒绝访问错误: 叠层纱 完整的堆栈跟踪: 58行: 问题答案: 您必须先创建文件夹。但是您不能调用file.mkdirs()-您需要调用file.getParentFile()。mkdirs()-否则,您将使用文件名创建一个文件夹(这将阻止您使用以下命令创建文

  • 我正在使用jdbc和Tomcat服务器。它已经完美运行了一个星期,它突然崩溃了。我还注意到我什至不需要密码即可从命令行登录mysql。这是我的代码: 下面是catalina.out的堆栈跟踪:

  • 我使用在AMPS(windows 10)上安装laravel。 它起作用了。 但是现在我想连接到MySQL。 我创建了一个“blog”数据库并更改了这两个文件:。环境文件: 和 /config/database.php: 但当我想迁移时,仍然会收到以下消息: C:\ProgramFiles(x86)\Ampps\www\blog [illumb\Database\QueryException] S

  • 问题内容: 我得到以下IOException: 尝试运行以下代码时: 在我看来,由于某种原因,JVM无法创建新文件。如果文件已经存在,则代码可以很好地运行。是否存在某种访问文件来指示JVM是否可以创建新文件还是我只是在做错什么? 任何帮助深表感谢 :-) 我正在运行Java 1.4,并且已经在Windows XP中的JDeveloper中进行了测试。 问题答案: 问题在于这些调用彼此接替: 创建操

  • 问题内容: 我有一个Java小程序,用于查询Oracle数据库中的数据。从IDE内部运行时,它可以正常运行。但是,当我将其作为嵌入在网页中的小程序运行时,在类加载器中出现“访问被拒绝”错误,并且我并没有最模糊的想法对我有什么要求: 问题答案: 小程序在具有严格限制的安全规则的环境中运行。您至少需要在小程序上签名。 但是,这里的问题更大,在小程序内执行JDBC是一个非常糟糕的主意。该applet的源