我如何保密信息?

时间:2011-01-05 02:23:01

标签: c# database authentication

我想编写一个C#应用程序,它需要连接到数据库并获取一些信息。我想是否只是直接在我的C#应用​​程序中的连接字符串,那么用户可能很容易获得连接字符串并直接登录我的sql服务器,一旦发生这种情况,他们就可以选择他们想要的所有信息!
对此有什么好的解决方案吗? 提前谢谢!

3 个答案:

答案 0 :(得分:6)

唯一的解决方法是使用三层体系结构,您的客户端软件不会直接连接到数据库,而是连接到应用程序服务器,后者控制数据库凭据以及SQL发布的内容。

也可能(不太可能)限制客户端软件的数据库用户必须只能选择客户端应用程序真正需要的数据(而不是其他任何内容)的权限。使用此方法,您将创建特定视图,并仅授予对这些视图的选择权限。存储过程是另一种工具。但是,这可能无法涵盖所有​​情况,如果您不小心授予太多或数据库中的错误允许权限提升,则有点危险。

但如果担心安全问题,我会去三层。

答案 1 :(得分:1)

您需要在web.config中加密连接字符串。这是Encrypt。此外,使用Windows身份验证(trusted connection = true)。这样可以确保即使用户拥有凭证,如果没有将其ID添加到ActiveDirectory / Domain,他仍然无法登录。

答案 2 :(得分:1)

我实际上有类似的要求。我通过获取连接字符串并使用Rijndael加密逻辑加密它来解决它(在System.Security.Cryptography中检查它)。它非常易于使用。我的一个朋友在过去的19个月里一直试图破解这个问题,使用了一系列彩虹表 - 是的,他手上有太多时间 - 而且告诉我“我的太阳系可能会在我之前变暗可以进去。“我笑了。太多的空闲时间。

我只是接受了我的连接字符串,我将其存储在XML文件中(因此我可以根据需要将其更改)并对其进行加密。我的应用程序,作为其初始化过程的一部分,读取此值 - 解密它 - 然后,连接并打开数据库。

像“我是一块要加密的数据”之类的东西......一旦加密就会结束像......“V27AsTNsJA + BEwoGR2PbiZum5puwiLbfMa41ens8r8sSiEnn6FiT + k8ImEft Qba8ziCpie94s3bEwcPekqRfhO1Noc8lVeERyezmtqN9 / 0ZgmzJbNbl / 3emTLLfb0Qpj“......对于试图闯入的人来说,这显然不会有用。

值得指出的是,即使使用低128位加密(这也支持256位),请记住有2个可能值增加到128个,或者3.4 e + 38。想想这是一个多么大的数字:

340,000,000,000,000,000,000,000,000,000,000,000,000

如果你试图破解这一点,例如,以每秒1万亿次尝试(1,000,000,000,000 /秒)的速度破解它,它可能需要300万亿年才能获得它。当然,你可能会在第一次猜测时得到它......但可能不是。

256位密钥为1.15 e + 77,512位密钥为1.34 e + 154个可能的值。