Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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# 如何在SQL Server 2012中加密特定行的特定列_C#_Asp.net_Security_Encryption_Sql Server 2012 - Fatal编程技术网

C# 如何在SQL Server 2012中加密特定行的特定列

C# 如何在SQL Server 2012中加密特定行的特定列,c#,asp.net,security,encryption,sql-server-2012,C#,Asp.net,Security,Encryption,Sql Server 2012,我有一个应用程序,出于安全原因,需要对某些数据列进行模糊处理或加密。不是所有的行都需要加密这些列,只有一定数量的行需要加密 任何有权访问数据库的人都无法读取数据,但显然需要在应用程序中显示。即便如此,它也只能向某些人展示。所有用户都通过LDAP进行身份验证 我的做法如下: 数据进入: 数据是否来自需要加密的数据源 然后使用安全密钥加密所有相关列并输入数据库 应用程序中出现的数据: 用户是否经过身份验证 该用户是否启用了相关的安全标志 显示每个数据行时,检查该数据行是否包含加密数据 如果有,则使用

我有一个应用程序,出于安全原因,需要对某些数据列进行模糊处理或加密。不是所有的行都需要加密这些列,只有一定数量的行需要加密

任何有权访问数据库的人都无法读取数据,但显然需要在应用程序中显示。即便如此,它也只能向某些人展示。所有用户都通过LDAP进行身份验证

我的做法如下:

数据进入:

  • 数据是否来自需要加密的数据源
  • 然后使用安全密钥加密所有相关列并输入数据库
  • 应用程序中出现的数据:

  • 用户是否经过身份验证
  • 该用户是否启用了相关的安全标志
  • 显示每个数据行时,检查该数据行是否包含加密数据
  • 如果有,则使用安全密钥解密并显示在屏幕上
  • 这种方法会引发有关密钥存储在何处、如何存储以及谁有权访问密钥的问题

    即使是开发人员或DBA也无权访问这些数据,除非他们获得授权

    我不想对应用程序的性能造成太大的影响,尤其是当它必须一次显示几百条记录时

    该应用程序采用C#语言,带有SQL Server 2012后端


    实现此方案的最佳方法是什么?

    您可以将密钥存储在注册表中并使用加密。要使密钥更安全,应使用用户而不是系统DAPI版本。看见您还应该设置注册表项的权限,以限制哪些用户可以读取注册表项。您还可以将DAPI加密字符串存储在一个文件(web.config)中

    请注意,当您以用户身份登录时,必须加密计算机上的字符串。这使得发布密钥更加困难,因为您不能简单地从开发服务器复制DAPI保护的密钥

    将应用程序池用户设置为,使其能够访问注册表项,并且是用于使用DAPI加密注册表项的同一用户

    通过将授权和加密/解密放在一个单独的服务中,您可能会使一切更加安全。将服务设置为使用DAPI用户名而不是应用程序池用户。棘手的部分是服务和网站之间的安全通信

    最后,在使用DAPI解密密钥后,您可以使用for key transport使一切更加安全。您可能希望使用字符串开发所有内容,并切换到SecureString,以便进行调试。这里有一个问题有一个答案


    对于开发,只需使用与生产不同的密钥即可。开发人员将能够测试信息的编码和解码,但不能解码任何生产数据。您的开发人员确实不应该访问未经清理的生产数据

    “一次几百张唱片”绝对没什么好担心的。(虽然一个通常不会批发非透明加密数据。)同时,请考虑超级机密信息可能被限制为单独的系统/数据库/服务;这样,甚至只允许那些具有适当权限的人访问此类内容,或者阻止访问,除非通过特定的探测。