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

时间:2013-12-07 18:46:12

标签: c# mysql security encryption amazon-web-services

我已经构建了一个利用亚马逊托管数据库的应用程序。我正试图找到一种方法来安全地连接到整体,我已经确信我不知道我在做什么。

我最初的目的是通过加密将我的数据库凭据存储在我的应用程序中,但我一直认为使用Web服务将是一个更好的选择,因为本地存储的任何内容都不能真正得到保护。但是,我不知道如何使用Web服务以及为什么它会产生影响。

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

对我来说,最终游戏是能够将DB(和PayPal卖家凭证)存储在用户无论如何都无法访问的某个地方,但我的程序可以。它似乎比这里和其他地方的人看起来更加切割和干燥,但同样,我是一个新手。

任何方向都将不胜感激!我想在我们的组织之外部署这个以进行测试等。

谢谢,伙计们!

2 个答案:

答案 0 :(得分:1)

对我而言,给你的“应用程序”是不可想象的 - 我认为这意味着在人们的设备或某种桌面应用程序上部署“app” - 直接连接到你的数据库,除非想到把它放到把钥匙放在纸质信封里并将它贴在窗户上似乎是安全的。

应用程序应该可以对数据库执行非常少量的非常具体的操作,并且应该留下它的确切内容以及来自何处和代表的内容。应用程序可以通过https向您的应用程序服务器上运行的服务(例如REST API - “Web服务”)发出请求,然后您的应用程序服务器将调解请求并从中获取值,或者只有在应用程序说服应用程序服务器确实代表它声称代表的特定用户后,才会在适当的时候向数据库发送更新....

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

“为什么会产生影响”是“哈!我黑了一个用户的密码”和“哈!我偷了你的数据库”之间的区别。应用程序服务器可以将任何请求认证为对于所呈现的特定最终用户凭证是合法的...而数据库在很大程度上准备不做任何类型的操作。

最终用户(不是应用程序)将对应用程序服务器进行身份验证,应用程序服务器将针对数据库验证这些凭据,不提供有关身份验证失败原因的提示...发现,密码不正确,我们不知道,我们不在乎 - 抱歉,登录失败。给我们您的电子邮件地址,我们会向您发送支持电子邮件,或者如果这不是我们存档的电子邮件,我们会假装我们做了。提示帮助黑客。

  

存储... PayPal卖家凭证

好吧,你要确保section 10.1.2 of the Paypal Developer Agreement中不存在“收集,捕获,使用或存储”禁止的内容。

那么,你是怎么做到的?答案的这一部分让我们有点超出范围,因为有很多选择,景观变化,而且在很大程度上是关于“最佳”方式的意见问题,但我认为ASP或PHP将是最多的简单。

将其视为构建一个支持数据库的网站而不会让它变得漂亮,因为除了应用程序的后端之外,没有人会看到它......而且还有你的“网络服务”。

  

我得到保证,我不知道我在做什么

这让你领先于那些没有意识到他们不知道自己在做什么的可怕人数。

答案 1 :(得分:0)

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

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