知识大全 SQL Server的安全检查

Posted 数据库

篇首语:亦余心之所善兮,虽九死其犹未悔。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 SQL Server的安全检查相关的知识,希望对你有一定的参考价值。

SQL Server的安全检查  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  首先 你必须遵守的SQL Server标准化规则

   .什么是标准化?

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

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

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

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

  ◆ 第一范式的规则( NF)

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

  Computer Sofare

   Word

   Access Word Excel

   Word Excel

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

  Computer Sofare

   Word

   Access

   Word

   Excel

   Word

   Excel

  ◆ 第二范式的规则

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

  Computer Sofare

   Word

   Access

   Word

   Excel

   Word

   Excel

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

  Computer SofareID

  

  

  

  

  

  

  SofareID Sofare

   Word

   Access

   Excel

  ◆ 第三范式的规则

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

  Computer User Name User Hire Date Purchased

   Joe / / / /

   Mike / / / /

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

  Computer Purchased

   / /

   / /

  User User Name User Hire Date

   Joe / /

   Mike / /

  User User Name User Hire Date

   Joe / /

   Mike / /

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

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

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

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

  标准化优点:

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

   更好的性能

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

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

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

  标准化的缺点:

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

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

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

  总结

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

  SQL Server用户安全清单

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

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

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

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

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

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

  我们的安全检查列表:

   确认已经安装了NT/ 和SQL Server的最新补丁程序 不用说大家应该已经安装好了 但是我觉得最好还是在这里提醒一下

   评估并且选择一个考虑到最大的安全性但是同时又不影响功能的网络协议 多协议是明智的选择 但是它有时不能在异种的环境中使用

   给 sa 和 probe 帐户设定强壮的密码来加强其安全性 设定一个强壮的密码并将其保存在一个安全的地方 注意: probe帐户被用来进行性能分析和分发传输 当在标准的安全模态中用的时候 给这个帐户设定高强度的密码能影响某些功能的使用

   使用一个低特权用户作为 SQL 服务器服务的查询操作账户 不要用 LocalSystem 或sa 这个帐户应该有最小的权利 ( 注意作为一个服务运行的权利是必须的)和应该包含( 但不停止)在妥协的情况下对服务器的攻击 注意当使用企业管理器做以上设置时 文件 注册表和使用者权利上的 ACLs同时被处理

   确定所有的 SQL 服务器数据 而且系统文件是装置在 NTFS 分区 且appropraite ACLs 被应用 如果万一某人得到对系统的存取操作权限 该层权限可以阻止入侵者破坏数据 避免造成一场大灾难

   如果不使用Xp_cmdshell就关掉 如果使用 SQL 至少使用Server Options中的SQLExecutieCmdExec 账户操作限制非sa用户使用XP_cmdshell

  在任何的 isql/ osql 窗口中( 或查询分析器):

  use master

  exec sp_dropextendedproc xp_cmdshell

  如果你不需要 xp_cmdshell 那请停用它 请记住一个系统系统管理员如果需要的话总是能把它增加回来 这也好也不好 一个侵入者可能发现它不在 只需要把他加回来 考虑也除去在下面的 dll但是移除之前必须测试因为有些dll同时被一些程序所用 要找到其他的程序是否使用相同的 dll:

  首先得到该 dll

  select o name c text from dbo sysments c dbo sysobjects o where c id=o id and o name= xp_cmdshell

  其次 使用相同的 dll发现其他的扩展储存操作是否使用该dll

  select o name c text from dbo sysments c dbo sysobjects o where c id=o id and c text= xplog dll

  用户可以用同样的办法处理下面步骤中其他你想去掉的进程

   如不需要就停用对象连接与嵌入自动化储存程序 ( 警告 当这些储存程序被停用的时候 一些企业管理器功能可能丢失) 这些包括:

  Sp_OACreate

  Sp_OADestroy

  Sp_OAGetErrorInfo

  Sp_OAGetProperty

  Sp_OAMethod

  Sp_OASetProperty

  Sp_OAStop

  如果你决定停用该进程那么请给他们写一个脚本这样在以后你用到他们的时候你能够把他们重新添加回来 记住 我们在这里正在做的是锁定一个应用程序的功能 你的开发平台应该放到其他机器上

   禁用你不需要的注册表存取程序 (同上面的警告)这些包括:

  Xp_regaddmultistring

  Xp_regdeletekey

  Xp_regdeletevalue

  Xp_regenumvalues

  Xp_regremovemultistring

  注意 :我过去一直在这里列出 xp_regread/ xp_regwrite但是这些程序的移除影响一些主要功能包括日志和SP的安装 所以他们的移除不被推荐

   移除其他你认为会造成威胁的系统储存进程 这种进程是相当多的 而且他们也会浪费一些cpu时间 小心不要首先在一个配置好的服务器上这样做 首先在开发的机器上测试 确认这样不会影响到任何的系统功能 在下面是我们所推荐的有待你评估的一些列表:

  sp_sdidebug

  xp_availablemedia

  xp_cmdshell

  xp_deletemail

  xp_dirtree

  xp_dropwebtask

  xp_dsninfo

  xp_enumdsn

  xp_enumerrorlogs

  xp_enumgroups

  xp_enumqueuedtasks

  xp_eventlog

  xp_findnextmsg

  xp_fixeddrives

  xp_getfiledetails

  xp_getnetname

  xp_grantlogin

  xp_logevent

  xp_loginconfig

  xp_logininfo

  xp_makewebtask

  xp_msver xp_perfend

  xp_perfmonitor

  xp_perfsample

  xp_perfstart

  xp_readerrorlog

  xp_readmail

  xp_revokelogin

  xp_runwebtask

  xp_schedulersignal

  xp_sendmail

  xp_servicecontrol

  xp_snmp_getstate

  xp_snmp_raisetrap

  xp_sprintf

  xp_sqlinventory

  xp_sqlregister

  xp_sqltrace

  xp_sscanf

  xp_startmail

  xp_stopmail

  xp_subdirs

  xp_unc_to_drive

  xp_dirtree

   在企业管理器中 安全选项 之下禁用默认登录 (只有SQL ) 当使用整合的安全时候 这使未经认可的不在 syslogins 表中使用者无权登陆一个有效的数据库服务器

   除去数据库的guest账户把未经认可的使用者据之在外 例外情况是master和 tempdb 数据库 因为对他们guest帐户是必需的

   若非必须 请完全地禁用SQL邮件功能 它的存在使潜在的攻击者递送潜在的 trojans 病毒或是简单实现一个DOS攻击成为可能

   检查master Sp_helpstartup看有无可疑的木马进程 确定没有人已经在这里放置秘密的后门程序 使用 Sp_unmakestartup 移除任何可疑进程

   检查master Sp_password看有无trojan代码 比较你的产品scripts和一个新安装的系统的默认scripts而且方便的保存

   记录所有的用户存取访问情况 从企业管理器做这些设定或通过以sa登陆进入查询分析器的下列各项:

  xp_instance_regwrite N HKEY_LOCAL_MACHINE N SOFARE\\ Microsoft\\MSSQLServer\\MSSQLServer N AuditLevel REG_DWORD

   重写应用程序使用更多用户定义的储存和察看进程所以一般的对表的访问可以被禁用 在这里你也应该看到由于不必经常进行查询计划操作而带来的性能提升

   除去不需要的网络协议

   注意SQL 服务器的物理安全 把它锁在固定的房间里 并且注意钥匙的安全 只要有机会到服务器面前 就总是会找到一个方法进入

   建立一个计划的任务运行:

  findstr/C: Login Failed \\mssql \\log\\* *

  然后再重定向输出到一个文本文件或电子邮件 因此你监测失败的登录尝试 这也为系统管理员提供一个好的记录攻击的方法 也有很多用来分析NT日志事件的第三者工具 注意: 你可能需要将路径换成你安装SQL的路径

   设定非法访问和登陆失败日志警报 到 企业管理器中的 Manager SQL Server Messages 搜寻任何有关无权访问的消息 ( 从查找 login failed 和 denied 开始) 确定你所有感兴趣的信息被记录到事件日志 然后在这些信息上设定警报 发送一个电子邮件或信息到一个能够对问题及时响应的操作员

   确定在服务器和数据库层次上的角色都只被授给了需要的用户 当 SQL Server 安全模型 有许多增强的时候 它也增加额外的许可层 我们必须监控该层 确定没有人被授予了超过必需的权限

   经常检查组或角色全体会员并且确定用组分配权限 这样你的审计工作能够简化 确定当你在的时候 公众的组不能从系统表执行选择操作

   花些时间审计用空密码登陆的请求 使用下面的代码进行空密码检查:

  使用主体

  选择名字

  password

  from syslogins

  where password is null

  order by name

   如果可能 在你的组织中利用整合的安全策略 通过使用整合的安全策略 你能够依赖系统的安全 最大简化管理工作从维护二个分开的安全模型中分离开来 这也不让密码接近连接字串

   检查所有非sa用户的存取进程和扩充存储进程的权限 使用下面的查询定期的查询哪一个进程有公众存储权限 (在SQL Server中 使用 type 而不是 xtype ):

  Use master

  select sysobjects name

  from sysobjects sysprotects

  where sysprotects uid=

  AND xtype 在 ( X P )

  AND sysobjects id=sysprotects id

  Order by name

   当时用企业管理器的时候 使用整合的安全策略 过去 企业管理器被发现在标准的安全模态中储存 sa 密码在注册表的 plaintext 中 注意: 即使你改变模态 密码也会留在注册表中 使用 regedit 而且检查键:

  HKEY_CURRENT_USER\\SOFARE\\Microsoft\\

  MSSQLServer\\SQLEW\\ Regedi\\

  SQL

  现在数据被隐藏在

  HKEY_USERS\\yourSID\\sofare\\Microsoft\\Microsoft SQL server\\ \\tool\\SQLEW\\registered server X\\SQL server group

  ( SQL server组 是默认值但是你可能已建立用户组因此相应地改变其位置)

   发展一个审核计划而且订定每月的安全报告 对IT主管可用的报表包括任何的新exploit 成功的攻击 备份保护 和对象存取失败统计

   不要允许使用者交互式登陆到 SQL Server之上 这个规则适用任何的服务器 一旦一个使用者能够交互式进入一个服务器之内 就有能用来获得管理员的存取特权得到管理员权限

cha138/Article/program/SQLServer/201311/22431

相关参考

知识大全 SQL Server安全列表

数据库人员手边系列:SQLServer安全列表  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  确

知识大全 SQL Server 2005 安全性(图)

SQLServer2005安全性(图)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数据安全是

知识大全 Microsoft SQL Server 7.0安全问题

MicrosoftSQLServer7.0安全问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 如何提高SQL Server的安全性

如何提高SQLServer的安全性?(上)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这里介

知识大全 如何提高SQL Server的安全性

如何提高SQLServer的安全性?(下)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  限制S

知识大全 如何提高SQL Server的安全性

如何提高SQLServer的安全性?  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!安装最新的服务包

知识大全 SQL Server 安全性管理的途径

SQLServer安全性管理的途径  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  当在服务器上运

知识大全 SQL Server数据库安全规划全攻略

SQLServer数据库安全规划全攻略  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在改进SQLS

知识大全 IIS中SQL Server数据库的安全问题

IIS中SQLServer数据库的安全问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  从co

知识大全 让数据更安全 保护SQL Server的十个步骤

让数据更安全保护SQLServer的十个步骤  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这里