c++ - 在应用程序中隐藏 MySQL 凭据

标签 c++ mysql security desktop-application

我需要为一家公司创建一个应用程序,他们希望人们登录该应用程序以获得不同的权限来执行不同的任务。

我最初的想法是创建一个 MySQL 数据库,将凭据硬编码到应用程序中,然后让应用程序连接到 MySQL 数据库。 MySQL 数据库将有一个名为“users”的表,用于存储用户名、密码和权限。然后应用程序将查询服务器并执行身份验证。

最大的问题是将 MySQL 凭据硬编码到应用程序中。如果应用程序落入坏人之手,他们可能会四处窥探以查找凭据并开始删除表,从而对 MySQL 数据库造成严重损害。

所以我想到开发一个服务器作为MySQL数据库的接口(interface)。例如,客户端应用程序将通过 TCP 连接到服务器,服务器连接到 MySQL 数据库。这样,MySQL 凭据就永远不会暴露给最终用户。然而,这意味着我必须开发一个服务器应用程序,a)将更难为我的客户维护和部署(而不是仅仅设置 MySQL 服务器),b)由于我有一个额外的系统,因此有可能引入更多错误我需要制作(这与部署错误修复等相关)

所以我在想,与其在数据库中拥有一个用户表并让应用程序使用硬编码凭据直接连接到 MySQL 服务器,不如向最终用户提供实际的 MySQL 用户凭据,他们可以在其中进入应用程序连接到 MySQL 服务器。这意味着,如果有人获得该应用程序,他们不会对 MySQL 数据库造成任何损害,但最终用户仍存在将凭据提供给错误人员的风险。

让桌面应用程序连接到 MySQL 数据库的最佳方法是什么?除了我想到的3个之外还有其他的解决方案吗?或者您对我的解决方案有什么想法吗?

最佳答案

正如@Perception 所指出的。最好的选择是在 MySQL 之前实现 Web 服务。您不希望来自未知 IP 地址的未知数量的客户端都可以访问您的数据库。

通过捆绑 MySQL 连接来进行 DOS 攻击非常容易。更不用说,如果中间没有 Web 服务,您扩展后端服务以满足不断增加的客户群的需求的能力将受到严重限制。

网络服务还可以让您以多种方式控制用户身份验证和授权(用户/密码组合、基于 token 的访问、OAuth 访问等)。

关于c++ - 在应用程序中隐藏 MySQL 凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23709188/

相关文章:

c++ - C++ #define 中的结构

MySQL远程连接【不一般】

php - 在mysql查询ORDER BY中更改时间格式

android - 在应用程序中隐藏 secret 字符串的提示和技巧

c++ - 是什么阻止了这个函数接受左值?

c++ - 每个进程消耗的内存

php - sql中while循环获取不到count值?

php - 网站 : a user inputs text into a field - what do I have to watch out for?

c++ - 在用户机器上存储 key 的推荐方法

C++ 构造函数 undefined reference