数据库主要用于支持各种关键业务应用程序。它们可以存储多种数据类型。然而,有些内容绝对不应该保存在数据库中。
这些基础 数据库安全 技术将有助于保护你的数据:
未受保护的凭据
这可能是个显而易见的点,但在数据库中存储明文密码并不是一个好主意。
如果黑客获得对该表中数据的访问权限,他或她就会拥有所有用户的所有密码列表。这些密码是明文、可读的文本,可以用来让黑客像该用户本人一样登录系统。 这也许看起来并不是什么大问题:如果黑客已经访问了系统,为什么还需要登录?问题在于,人们往往会在多个账户中使用相同的密码。如果黑客拥有用户名和密码,他或她就可以把这些信息用于其他网站。 那么,你应该如何绕过这个问题呢?在存储之前对密码进行加密。这个过程通常称为“哈希(hashing)”,也可以与“加盐(salting)”结合使用。
哈希(Hashing) 是将某种算法应用到用户输入的密码上,从而对其进行加密。然后它可以存储在数据库中。要验证该密码,系统可以对用户输入的值执行相同的哈希过程,并将输出与先前存储的哈希值(正确密码)进行比对。 许多编程语言都提供了内置功能来为你完成这项工作。 长话短说:不要在数据库中存储明文密码。
重复数据
在数据库中存储重复数据并不是一个好主意。它会占用数据库中更多的空间;如果你的数据库很大,这种占用可能会相当可观。此外,在你需要更新数据时,重复数据也可能引发问题,因为你需要在多个位置同时更新数据。 唯一的例外是你在创建数据仓库时。此类数据库的优化重点在于快速查询,而不是更新,并且通常包含重复数据。
使用关系型数据库来存储数据的优势之一,是可以将数据存储在多个表中:每个表代表一个实体,随后再把这些表彼此关联起来。这种做法称为“规范化(normalization)”。它允许你为每个实体建立单独的一张表,并使用 ID 编号(或其他键值)来实现表与表之间的关联。
这意味着,如果你需要对某些数值进行更改,更新数据会更容易。同时,它还能节省空间,并且在对数据进行更改时,往往可以提升性能。
例如图片之类的文件
数据库允许你将文件存储在数据库中的表里,例如图片。
现在,虽然你可以创建用于存储文件的表和列(例如 Oracle 的 BLOB 数据类型),但这并不意味着你应该这么做。把文件存储在数据库表中意味着你需要使用数据库逻辑(以及可能的应用程序逻辑)来访问该文件。这会增加数据库的体积并降低其性能。它也会让备份和数据损坏更难处理。存储文件和图片的更好做法是使用文件服务器。文件服务器就是为此而设计的。这样做可以实现更快的文件访问、更容易的文件元数据访问,以及更方便的备份与还原功能。
信用卡数据
最后,除非确实有必要,否则不应将信用卡信息存储在你的数据库中。
这包括信用卡持卡人姓名、卡号、CVV 码以及到期日期。涉及的风险实在太大了。如果黑客能够从你的系统中获取信用卡数据,将会对你的公司和客户造成重大影响。你还需要进行外部审计,以确保在你存储信用卡号码的情况下符合严格的标准——也就是 PCI DSS。这样会给你的 IT 部门带来更多麻烦,并意味着额外的费用。更好的做法是使用现有的解决方案,例如 Authorize.net 或 PayPal。这些机构已经开发了相应的软件,证明了它们的合规性,且许多其他公司已经在使用并信任这些机构。最好完全避免存储信用卡数据。这样做不值得承担风险,而其他公司做得更好。
分享到
了解更多
关于作者
Ben Brumm
软件开发人员与业务分析师
Ben 是一名拥有 11 年以上经验的软件开发人员和业务分析师。常驻澳大利亚墨尔本。在全职工作期间,他一直从事数据库和 SQL 相关工作;同时,他也是 DatabaseStar.com 网站的创始人,在那里教授 Oracle 数据库主题。他对软件和数据库的热情始于 1990 年代末他在高中开始上计算机课程,从那时起这份热情就不断增长。