安全地连接到C#中的AWS MySQL数据库

安全地连接到C#中的AWS MySQL数据库,c#,mysql,security,encryption,amazon-web-services,C#,Mysql,Security,Encryption,Amazon Web Services,我已经构建了一个应用程序,它利用由Amazon托管的数据库。我正试图找到一种安全和全面地连接到这个系统的方法,我被保证我不知道我在做什么 我的初衷是用加密技术将数据库凭证存储在应用程序中,但我一直认为使用web服务将是一个更好的选择,因为本地存储的任何东西都不可能真正安全。然而,我不知道如何使用web服务来实现这一点,也不知道为什么它会带来不同 在使用web服务时,我是否会构建一个Windows服务器并将此“web服务”部署到它以连接到,然后连接到我的数据库?这几乎是多余的,尽管我仍然认为自己是

我已经构建了一个应用程序,它利用由Amazon托管的数据库。我正试图找到一种安全和全面地连接到这个系统的方法,我被保证我不知道我在做什么

我的初衷是用加密技术将数据库凭证存储在应用程序中,但我一直认为使用web服务将是一个更好的选择,因为本地存储的任何东西都不可能真正安全。然而,我不知道如何使用web服务来实现这一点,也不知道为什么它会带来不同

在使用web服务时,我是否会构建一个Windows服务器并将此“web服务”部署到它以连接到,然后连接到我的数据库?这几乎是多余的,尽管我仍然认为自己是一个业余爱好者。即使如此,我如何安全地对其进行身份验证

我的最终目的是能够将DB(和PayPal卖家凭证)存储在用户在任何情况下都无法访问的地方,但我的程序可以。这似乎比这里和其他地方的人们所说的要简单得多,但我还是个新手

任何方向都将不胜感激!我想很快将其部署到我们的组织之外进行测试等


谢谢,伙计们

如果您的数据库是mysql,那么您可以使用:fromMySQL。db的凭据通常保存在应用程序的web.config中。此外,我认为没有理由在您的案例中使用web服务。当您需要将数据从一个系统传输到另一个系统时,可以使用Web服务,而不是为数据库连接提供更好的安全性

编辑:
正如Michael善意地解释的那样,这种方法适用于托管在服务器上的web应用程序。对于客户端应用程序,在应用程序中保留数据库凭据(加密或不加密)是一个非常糟糕的主意。在这种情况下,应该开发额外的web应用程序,它将提供使用web服务(通过https)对用户进行身份验证的方法,并将数据从数据库传输给用户。

对我来说,将您的“应用程序”交给用户是不可想象的,我认为这意味着“应用程序”部署在人们的设备上,或者可能是某种桌面应用程序上——直接连接到数据库,除非把车钥匙放在纸信封里并贴在窗户上的想法看起来是安全的

应用程序应该能够对数据库执行极少量非常具体的操作,并且应该留下一条确切的线索,说明它执行了什么操作,从何处开始以及代表谁执行。应用程序可以通过https向运行在您的应用程序服务器上的服务(如“web服务”)发出请求,然后您的应用程序服务器将调解请求,并根据需要从数据库获取值或向数据库发送更新。。。只有在应用程序说服应用程序服务器它确实代表了它声称代表的特定用户之后

这是一个基本原则,任何你不能控制的东西,你都不能信任

“为什么会有不同”是“哈!我盗取了一个用户的密码”和“哈!我盗取了你的数据库”之间的区别。应用程序服务器可以对任何请求进行身份验证,认为它们对于提供的特定最终用户凭据是合法的。。。而数据库在很大程度上没有做好做这类事情的准备

最终用户(而不是应用程序)将向应用程序服务器进行身份验证,应用程序服务器将根据数据库验证这些凭据,不提供有关身份验证失败原因的提示。。。找不到用户,密码不正确,我们不知道,我们不关心--抱歉,登录失败。给我们您的电子邮件地址,我们会给您发送一封支持电子邮件,或者,如果我们的文件中没有这封电子邮件,我们会假装有。提示帮助黑客

商店。。。贝宝卖家凭证

好吧,你要确保这不属于禁止在中“收集、捕获、使用或存储”的内容

那么,你是如何做到这一点的?答案的这一部分让我们有点超出了范围,因为有很多选择,环境会发生变化,关于“最好”的方法大体上是一个意见问题,但我认为ASP或PHP是最简单的方法

可以将其视为构建一个支持数据库的网站,而不必麻烦地使其美观,因为除了应用程序的后端之外,没有人会看到它。。。还有你的“网络服务”

我确信我不知道自己在做什么


这让你远远领先于那些没有意识到自己不知道自己在做什么的人数惊人的人

如果我将它添加到app.config中,它在运行时不可见吗?我的印象是,如果我对它进行加密,它在部署时仍然可见,直到它被加密为止,这通常是在启动时。@JackM我认为这个答案指的是你的“应用程序”,它指的是一个应用程序服务器——提供“web服务”的东西——而不是一个“应用程序”我认为,这里的要点是,您不需要额外的web服务来从(假定的)现有web服务连接到数据库,尽管我可能弄错了。出于某种原因,我一直在考虑部署在服务器上的web应用程序,而不是客户端应用程序。对于客户端应用程序,您还应该开发web应用程序,该应用程序将对用户进行身份验证并提供web服务(通过https)。我会更新我的答案。这是非常有帮助的,它给了我所有我需要的信息,让我朝着正确的方向前进。我将研究如何设计一个与我的桌面应用程序接口的应用程序服务器,并将我所有的数据库逻辑移到该应用程序上。非常感谢你!