【发布时间】:2017-07-15 03:03:34
【问题描述】:
我们的数据库中有一个表,比如 tbl_X。该表在 PROD 中存在相当长的一段时间,大约有 2000 行。行仅偶尔更新一次并插入到该表中。创建此表时,未考虑保护和安全性。但是,此表包含我们认为需要某种程度保护的数据。
我们现在想在保存任何内容之前加密表中某些列的值。我们希望在 UI 上显示之前(或执行任何其他操作之前)解密该值。
所以场景是:
数据库服务器:SQL SERVER 2008
tbl_X 架构:
Id int not null,
Name varchar(100) not null,
CustAccount varchar(100) not null,
CustPrefText varchar(200) not null,
CreatedBy int not null
我们希望对 CustAccount 和 CustPrefText 列进行加密。
我们使用 Linq2SQL 来获取和设置表中的数据。所以我们正在考虑实现上述要求的东西,比如this:
public partial class tbl_X
{
public string CustAccount
{
get
{
return Crypter.Decrypt(this.CustAccount)
}
set
{
this.CustAccount= Crypter.Encrypt(value)
}
}
}
问题:
- 有没有更好的方法来处理更改?
- 表中的现有数据在手动更新时是否可能会导致任何问题?
- 是否需要更改上述列的数据类型?
提前致谢。如果需要任何其他详细信息,请告诉我。
【问题讨论】:
-
为什么不用SQL Server自己的加密呢?这回答了#1。对于 #2 - 使用自定义加密可能会导致 较弱 加密。如果没有您的课程,您也无法查询数据。 #3。你的
Crypter.Encrypt返回什么?不是字符串吗?多长时间? -
我们正在使用 LinqToSql。如何确保我从表中读取的内容被解密?
-
@PanagiotisKanavos:我们在整个项目中使用了LinqToSql,但是要使用SQL Server自己的加密,我们必须编写Stored procs来读写,这是我们不想要的。你能告诉我一些我可以阅读的材料吗?
标签: asp.net sql-server sql-server-2008 encryption linq-to-sql