服务器 频道

SQL Server的安全检查(上)

  【IT168 服务器学院】首先,你必须遵守的SQL Server标准化规则

  什么是标准化?

  标准化就是涉及数据模型,以便有效地在数据库中存储数据。最终结果就是消除了冗余数据,只有与属性相关的数据被存储在表中。

  例如,我们要为客户在同一个表中存储城市、州和邮政编码数据,其他客户也有同样的数据。通过这种方式,我们就会为在同一个城市的所有客户重复输入相同的城市、州,以及邮政编码数据。为了不一次又一次地存储同样的数据,我们应该将数据标准化,然后创建一个名为city的相关表。City这个表用来存储城市、州、邮政编码,以及ID号,这个ID号与客户表中的ID号相关,这样我们就可以删除客户表中的三个列,然后只添加一个新的ID列。

  标准化规则分解为几种形式。当谈论到数据库设计的时候,人们经常倾向于使用第三范式(3NF)。这是大多数数据库设计人员想要得到的:在概念阶段,数据是分段的,并且尽可能的标准化,但是为了实用的目的,这些分段在数据模型的修改中发生变化。可以在数据模型的不同部分引入各种范式来处理你可能面对的独特的情况。

  无论你是否听说过标准化,你的数据库都会遵循一些规则,除非你所有的数据都是存储在一个庞大的表中。下面我们看一下三个范式中的第一范式,以及决定不同范式的规则。

  第一范式的规则(1NF)

  消除重复的组。下面这个表在软件列中包含了重复的数据组。

  Computer Software

  1 Word

  2 Access, Word, Excel

  3 Word, Excel

  为了遵循第一范式,我们在每个记录中只存储了一种软件类型。

  Computer Software

  1 Word

  2 Access

  2 Word

  3 Excel

  3 Word

  3 Excel

  第二范式的规则

  消除第一范式中的冗余数据。下面这个表包含了冗余的软件名字。

  Computer Software

  1 Word

  2 Access

  2 Word

  3 Excel

  3 Word

  3 Excel

  为了消除存储的冗余数据,我们创建了两个表。第一个表存储参考SoftwareID ,指向新表中惟一的软件名称。

  Computer SoftwareID

  1 1

  2 2

  2 1

  3 3

  3 1

  3 3

  SoftwareID Software

  1 Word

  2 Access

  3 Excel

  第三范式的规则

  消除第一、第二范式中不依赖于键值的列。在这个表中,同时含有有关计算机和用户的数据。

  Computer User Name User Hire Date Purchased

  1 Joe 4/1/2000 5/1/2003

  2 Mike 9/5/2003 6/15/2004

  为了消除不依赖于键的列,我们创建了以下的表。现在,存储在computer表中的数据只与计算机相关,存储在user表中的数据只与用户相关。

  Computer Purchased

  1 5/1/2003

  2 6/15/2004

  User User Name User Hire Date

  1 Joe 5/1/2003

  2 Mike 6/15/2004

  User User Name User Hire Date

  1 Joe 5/1/2003

  2 Mike 6/15/2004

  SQL Server标准化必须要做什么?

  说实话,答案是没有。SQL Server,与其他的关系型数据库管理系统一样,毫不关心你的数据模型是否遵循任何一个范式。你可以创建一个表,所有数据都存储在一个表里面,或者你也可以创建许多个小的,没有关系的表来存储数据。SQL Server支持你决定做的任何事情。你可能遇到的惟一的一个限制因素就是SQL Server在一个表内支持的最大列数。

  SQL Server没有强迫或者加强任何你以任何一种范式创建数据库方面的规则。你可以混和并匹配你需要的任何规则,但是尽可能地在你设计数据库的时候就将其标准是一个好主意。人们倾向于花费大量时间创建一个标准化的数据模型,但是一旦需要添加新的列或者表的时候,他们就会忘记最初在努力创建一个优美的干净的模型方面所做的努力。

  为了辅助数据模型的设计,你可以使用SQL Server企业管理器中自带的DaVinci 工具。

  标准化优点:

  1、 更小的数据库:消除了重复的数据之后,你可以缩减数据库的整体规模。

  2、 更好的性能。

  A、 缩小的表:拥有更加调整良好的表可以让你的表拥有较少的列,并且在每个数据页中装载更多的记录。

  B、 每个表拥有更少的索引意味着更快的维护任务,例如索引的重建。

  C、 只在需要的时候进行表连接。

  标准化的缺点:

  1、 需要连接的表更多:通过将你的数据散布到更多的表中,增加了连接表的需求。

  2、 表中包含更多的代码,而不是数据:重复的数据以代码的形式存储,而不是有意义的数据。因此,总是需要查看表中的数值。

  3、 数据模型查询困难:数据模型为了应用程序而进行优化,而不是为了特别的查询。

  总结

  你的数据模型设计同样是艺术的和科学的。最好地平衡两者以支持将要使用数据库的应用程序,并且以有效的和结构化的方式存储数据。对于基于事务的系统,高度标准化的数据库设计是必经之路;它确保了整个数据库中数据的一致性,并且能很好的运行。对于基于报告的系统,标准化程度较低的数据库通常是最好的方式。你可以消除连接许多个表的需求,并且查询也更快了。另外,数据库对于特别的报告需求也会用户友好得多。

  SQL Server用户安全清单

  作为数据库管理员,安全一般来说不是最基本的问题。连通性和可用性是更直接一些的关注点,但是如果你不想让你的安全管理员对你大发雷霆,那么安全就应该添加到考虑范围之内。下面是SearchSecurity.com 的编辑Mike Chapple 推荐给安全管理员锁定SQL Server时使用的清单;它同样也可以被数据库管理员纳入考虑范围。

  -------------------------------------------------------------------------------

  以下是你今天就可以执行的4个动作,能够帮助你确保SQL Server安全:

  限制数据库管理员的数量。这是一个常识性的规则,但是经常被违反。确保只有需要管理权力(并且知道怎么去使用这个权力!)的一个人具有数据库管理员权限。SQL Server与Windows的紧密耦合使得数据库管理员权力被想当然地释放给所有的域管理员。这是一个严重的错误。

  应用最小权限规则。确保具有管理权限(和用户级别访问权限,实际上)只拥有最小的必要的权限子集来执行他们的工作任务。

  避免将密码硬编码,这就像一场灾难。数据库开发人员喜欢在他们的程序中将密码硬编码,因为这种方式非常简单。不要让他们那么做!使用SQL Server的集成认证模式来约束Windows的安全,或者强迫用户自己到数据库上去认证。如果你听到了下面这句话,“我们没法改变密码或者XYZ被破解了,”那么你可以认为自己看到了一面大红旗在面前飘荡!

  利用角色。SQL Server提供了一些预先定义的用户角色,它们具有一些特定的管理权限。你还可以为你的特定环境需求创建定制的角色。在你的数据库上分配权限给这些角色,然后根据人们工作职责的变化从这些角色中添加和删除用户/群。这有利于非常严格的安全环境,并且允许你对访问权限控制的记录。

0
相关文章