如何向使用该程序的人隐藏 MySQL 数据库的密码

     2023-02-24     133

关键词:

【中文标题】如何向使用该程序的人隐藏 MySQL 数据库的密码【英文标题】:How to hide password to MySQL database from people using the program 【发布时间】:2012-07-08 01:02:54 【问题描述】:

我用 JDBC 创建了一个 java 程序,它成功地连接到我的计算机服务器的 MySQL 数据库,如下所示:

    try
    
        // The newInstance() call is a work around for some
        // broken Java implementations

        Class.forName("com.mysql.jdbc.Driver").newInstance();
    
    catch (Exception ex)
    
        // handle the error
    

    try
    
        conn = DriverManager.getConnection(("jdbc:mysql://191.168.1.15:3306/databasename"), "username", "password");

        // Do something with the Connection
    
    catch (SQLException ex)
    
        // handle any errors
        System.out.println("SQLException: " + ex.getMessage());
        System.out.println("SQLState: " + ex.getSQLState());
        System.out.println("VendorError: " + ex.getErrorCode());
    

但是,如果有人想找出密码,使用任何 java 反编译器都非常简单。就此而言,我如何才能阻止他们找到密码或用户名?

【问题讨论】:

【参考方案1】:

我建议使用代理,在查询后返回 json 或 xml。这样您就可以从服务器端构建安全性,设置蜜罐陷阱,为查询构建自己的编码器解码器,通过 https 发送内容以阻止侦听器。

您还可以尝试将用户名和密码存储在字符串中,并将它们作为变量传递。 然后构建一个由相似事物组成的复杂矩阵,并用它做看似复杂的事情,以使黑客在两个小时试图找到您的代码后失去兴趣。

您还可以考虑将密码放入本机库 dll 或 .so 中,具体取决于您的平台...

问题依然存在,黑客只需要实现你的一段代码并且他拥有完全的访问权限,所以我强烈推荐代理。

【讨论】:

【参考方案2】:

唯一的方法是使用加密密码并将其存储在单独的文件中。 要反编译它,请使用 webservice。

或者更好的方法,如果你不想让用户知道你的代码,通过webservice创建完整的应用程序,这样客户端就可以访问外部api,你不需要把你的业务逻辑jar放在客户端机器。我认为这是实现案例的最佳方式。

【讨论】:

【参考方案3】:

当您让用户直接访问您的数据库时,您必须记住您已让他们直接访问您的数据库。你无法改变这一点。再多的加密或混淆都无法消除他们对您数据库的访问权限。

所以您需要考虑,您是否真的希望他们能够访问您的数据库?

如果您确实要授予数据库访问权限,请确保权限设置正确。例如,如果他们只需要读取权限,请确保您授予他们的用户只有读取权限。

如果您实际上并不希望他们直接访问数据库,但希望他们能够访问数据,那么不要将数据库密码放入您的程序中完全没有。例如,您可能希望在数据库前面设置一个 Web 服务并让您的用户查询该 Web 服务。 Web 服务有数据库密码,但您的用户没有。

【讨论】:

这是真的,但是,我怎样才能在不暴露数据的情况下输入数据并从数据库中检索数据? @BradenSteffaniak:正如我所说,您可以创建一个可以访问数据库并通过 Web 服务方法公开特定数据的 Web 服务。数据库密码只存储在网络服务器上。 如何创建可以访问它的网络服务? 这是一个广泛的问题。你可以写一整本关于它的书(或者买一本别人写的书)。 @BradenSteffaniak:是的,你可以使用它。【参考方案4】:

你没有。这就是静态密码不好的原因。

您在企业环境中所做的通常是使用外部身份验证方法(例如 LDAP、Active Directory)对数据库进行身份验证,然后使用您确定用户所需访问级别的组。

MySQL 确实支持external authentication methods。 MS SQL Server 也是如此。

【讨论】:

【参考方案5】:

这取决于您的应用程序。如果您想隐藏这些信息,您可以构建一个 Web 服务或 Web 应用程序。这些数据是安全的。否则您通常不希望他们访问您的数据库,他们应该配置自己的数据库。

否则,您授予他们访问您的数据库的权限,并且该用户应具有其所需的相应权限,并且您应检查数据库中的每个操作。

【讨论】:

【参考方案6】:

将 jdbc 字符串移动到与编译的类和/或 jar 文件分开的配置文件中。这样,如果您分发代码,那么他们也需要您的配置文件。

【讨论】:

但这并不能解决问题。用户仍然需要一个(可能不同的)数据库密码,否则应用程序完全没用...... 同意,我认为项目不同,但@Mark Byers 的回答是更好的选择。

在mysql中存储密码......使用哈希对吗?但是您如何向用户发送忘记的密码?

】在mysql中存储密码......使用哈希对吗?但是您如何向用户发送忘记的密码?【英文标题】:Storingpasswordsinmysql...useahashright?buthowdoyousendtheuseraforgottenpassword?【发布时间】:2012-10-2921:13:24【问题描述】:我一直在研究将用户密码存... 查看详情

使用 Codeigniter,我如何向其他开发人员隐藏 Paypal 凭据?

】使用Codeigniter,我如何向其他开发人员隐藏Paypal凭据?【英文标题】:UsingCodeigniter,howdoIhidePaypalcredentialsfromotherdevelopers?【发布时间】:2013-01-1501:25:17【问题描述】:在此处找不到很好的答案。所以基本上我使用bitbucket.org作为... 查看详情

如何使用 ODBC 驱动程序仅从 MS Access 向 MySql 自动插入新记录?

...11:37:09【问题描述】:我正在从MSAccess检索出勤日志到MySql数据库。我只想从MSAccess数据源获取/检索新记录并上传到MySql数据库(首选自动)。以下是我目前的代码,请 查看详情

“忘记密码”限制

...电子邮件。M问题是:我怎样才能防止滥用这个系统?我如何确保人们不会使用它向人们的收件箱发送垃圾邮件,但仍然可以为需要它的人使用它?【问题讨论】:你在编程网站上问一个哲学问题。由您决定如何避免这种情况。... 查看详情

如何向使用我的 iOS 应用的人发送应用内公告?

】如何向使用我的iOS应用的人发送应用内公告?【英文标题】:Howtosendin-appannouncementstopeopleusingmyiOSapp?【发布时间】:2013-07-2213:57:30【问题描述】:我在AppleAppStore上有几个应用程序,我希望通过某种方式随时向用户发送通知。基... 查看详情

如何使用hibernate grails 3,mysql?

...L服务器和2个应用程序:网站(grails3)和android应用程序。该数据库包含比赛时间表。android应用程序向Web服务器(不是MySQL服务器)发送请求。如果时间表已更新,则您必须将其显示在手机上。如何为此使用hiberna 查看详情

如何登录mysql?

... MySQL 服务开启后,就可以通过客户端来登录MySQL数据库了。在Windows操作系统下可以使用DOS命令登录数据库,本节将介绍使用命令方式登录MySQL数据库的方法。登录MySQL数据库的具体操作步骤如下:步骤1):单击“开始”→... 查看详情

如何使用 node.js&Mysql 从在线表单向数据库添加数据?

】如何使用node.js&Mysql从在线表单向数据库添加数据?【英文标题】:Howtoadddatatodatabasewithnode.js&Mysqlfromonlineform?【发布时间】:2021-10-1407:42:18【问题描述】:我正在尝试使用MySQL和node.js将数据添加到数据库中,只需单击提交... 查看详情

如何向 Delphi 应用程序添加多用户功能? [关闭]

...题描述】:我目前正在开发一个需要多用户功能的桌面(数据库:访问)Delphi应用程序(每个用户都有他的权限,交易历史)。我该怎么做?我找到了thisarticle,他们使用了MySQL并且对它不熟悉,在Access中解释相同的方 查看详情

如何使用 Ngrok 向网站添加密码

】如何使用Ngrok向网站添加密码【英文标题】:HowtoaddpasswordtowebsiteusingNgrok【发布时间】:2022-01-0415:36:48【问题描述】:我正在使用ngrok向Internet公开我的网站,我有一个问题是否可以使用ngrok向网站添加密码,所以在有人看到该... 查看详情

如何修改mysql数据库的密码

1、找到服务----MYSQL,双击弹出属性栏目,停止该服务。在启动参数中输入--skip-grant-tables接着在启动服务。2、使用SQLYONG登陆。用户名ROOT.密码无。现在已经跳过密码了3、进入命令窗口(运行里输入CMD),然后进入MySQL的安装... 查看详情

如何使用python连接mysql数据库

在Python语言环境下我们这样连接数据库。In[1]:frommysqlimportconnectorIn[2]:cnx=connector.connect(host="172.16.192.100",port=3306,user="appuser",password="xxxxxx")但是连接数据库的背后发生了什么呢?答案当我们通过驱动程序(mysql-... 查看详情

如何向mysql导入一个数据库全部导入

MySQL命令行导出数据库1,进入MySQL目录下的bin文件夹:cdMySQL中到bin文件夹的目录如我输入的命令行:cdC:\ProgramFiles\MySQL\MySQLServer4.1\bin(或者直接将windows的环境变量path中添加该目录)2,导出数据库:mysqldump-u用户名-p数... 查看详情

如何隐藏数据库密码?

】如何隐藏数据库密码?【英文标题】:HowtoobscureDatabasepassword?【发布时间】:2012-02-2717:08:03【问题描述】:我正在使用JPA2.0(Eclipselink)与DB进行交互,并且我有persistence.xml文件,其中包含一些DB配置。我想隐藏用于访问数据库的... 查看详情

提供 MySQL JDBC 驱动程序密码的最佳实践

...cat7服务器中部署了JSPWeb应用程序,该服务器使用MySQL作为数据库。在数据库连接中,我目前提供如下明文用户名和密码。Connectionconn=DriverManager.getConnection("jd 查看详情

如何提高mysql的安全性

一作为最流行的开源数据库引擎,MySQL本身是非常安全的。即便如此,你仍然需要添加额外的安全层来保护你的MySQL数据库不受攻击,毕竟任何经营网上在线业务的人都不想冒数据库受到损坏的风险。接下来,我们将介绍一些实... 查看详情

使用 mysql 数据库分发我的应用程序

】使用mysql数据库分发我的应用程序【英文标题】:Todistribuitemyappwithmysqldatabase【发布时间】:2019-12-0212:37:58【问题描述】:我要设计我的应用程序,将使用mysql数据库,在这样做之后,我如何让那些下载我的应用程序的人不必自... 查看详情

使用核心java程序没有密码的Mysql连接

...布时间】:2013-06-1623:39:12【问题描述】:我想连接到MySQL数据库。安装MySQL时我没有提供任何密码,所以在我的程序中我做了同样的操作,但连接时出现错误。我正在使用属性文件来获取驱动程序、URL、用户名和密码。请帮帮我... 查看详情