Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于Windows应用程序的安全数据库后端,用户可以';Don’不要轻易侵入_C#_Security_Postgresql_Backend_Localsystem - Fatal编程技术网

C# 用于Windows应用程序的安全数据库后端,用户可以';Don’不要轻易侵入

C# 用于Windows应用程序的安全数据库后端,用户可以';Don’不要轻易侵入,c#,security,postgresql,backend,localsystem,C#,Security,Postgresql,Backend,Localsystem,我正在编写一个数据库驱动的windows应用程序,可执行文件和数据库都需要安装在客户的计算机上 是否有一个数据库可以用作我的应用程序的后端,即使用户使用的是存储数据库的同一台机器,用户也无法进入该数据库 据我所知,Postgres对此不起作用,我尝试过的access版本很容易破解密码 我的应用程序必须能够安装在笔记本电脑上,并且即使在没有互联网接入的情况下也可以使用,所以通常的客户机-服务器数据库模型根本不起作用 我曾考虑过在某些版本的linux上安装带有Postgres的VMWare虚拟设备,

我正在编写一个数据库驱动的windows应用程序,可执行文件和数据库都需要安装在客户的计算机上

是否有一个数据库可以用作我的应用程序的后端,即使用户使用的是存储数据库的同一台机器,用户也无法进入该数据库

据我所知,Postgres对此不起作用,我尝试过的access版本很容易破解密码

我的应用程序必须能够安装在笔记本电脑上,并且即使在没有互联网接入的情况下也可以使用,所以通常的客户机-服务器数据库模型根本不起作用

我曾考虑过在某些版本的linux上安装带有Postgres的VMWare虚拟设备,但这会带来相当大的系统负载


我希望不必使用加密文本文件或类似的东西。

数据有多重要?使用标准RSA或AES加密系统上的数据,并在应用程序中存储和加密密钥,这将使您的父母远离您的用户

但是,如果你不能将这个秘密隐藏在客户端应用程序之外,那么你将在这里遇到麻烦。

由于用户(或黑客)拥有这台机器,你无法确保它的安全。你尝试的任何东西都属于一个名为的类别


最好的办法是加密数据库,并尝试将密钥隐藏在二进制文件中某个模糊的位置。因为这是一个已安装的应用程序,所以不要使用数据库服务器。只要使用像Postgres这样的数据库库。

根据您的预算,您可以选择几个选项

首先,我使用.NET程序对本地数据库进行加密。好消息是,该文件已加密,只有在您拥有密码的情况下才能访问。当然,坏消息是你的密码可能会在你的连接字符串中,除非你做一些像种子PRNG的事情来为你生成密码。此外,SSCE要求独立于您的应用程序进行安装——如果出于任何原因,用户通过控制面板卸载它,您的应用程序将无法运行

其次,我还使用了一个名为的商业产品,它还支持加密的本地数据库文件。VistaDB与其他数据库引擎有一些比较功能——但它们提供的另一个功能是它们没有必须预先安装的运行时——您只需向发行版添加另一个程序集(它们声称您可以静态链接它,但我个人没有尝试过)。磁盘上的本地文件也使用VistaDB加密,没有密码,您无法访问底层数据库


祝你好运

它不是像银行信息之类的超关键数据。我知道我可能无法阻止任何真正认真的人。目标主要是防止用户破坏数据库,构建自己的应用程序连接到数据库,等等。我可以在数据库中添加一些字段,但这并不能解决试图阻止用户手动添加或删除内容的问题。啊,但确实如此。您可以向每行添加一个“salt”并加密数据。如果您想真正做到这一点,您甚至可以对行和表名称进行加密,那么可以使用预编译脚本来实现这一点,以便在名称和设计名称集之间建立映射。另外,如果您有salt,您可以阻止用户添加或修改行。显然,您无法停止删除,因为您执行的任何安全操作都可以作为本地管理员覆盖。