热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

让防火墙与SQLServer数据库共存

欢迎进入Windows社区论坛,与300万技术人员互动交流进入安全与性能是数据库管理员的两块心头肉。而通过防火墙来保护数据库的安全无疑是一种不错的选择。但是有时会防火墙与SQLServer数据库也会闹矛盾。防火墙如果配置不当的话,不但不能够起到其应有的

欢迎进入Windows社区论坛,与300万技术人员互动交流 >>进入 安全与性能是数据库管理员的两块心头肉。而通过防火墙来保护数据库的安全无疑是一种不错的选择。但是有时会防火墙与SQL Server数据库也会闹矛盾。防火墙如果配置不当的话,不但不能够起到其应有的

欢迎进入Windows社区论坛,与300万技术人员互动交流 >>进入

  安全与性能是数据库管理员的两块心头肉。而通过防火墙来保护数据库的安全无疑是一种不错的选择。但是有时会防火墙与SQL Server数据库也会闹矛盾。防火墙如果配置不当的话,不但不能够起到其应有的保护作用,而且还会阻止客户端的合法连接。为此如果想让防火墙与SQL Server数据库共存的话,还不是一件简单的事情。对于这个问题,笔者有如下几条建议。或许这些建议能够给各位数据库管理员在数据库与防火墙部署的时候提供一定的帮助。

  建议一:先部署数据库,再部署防火墙

  导致客户端无法连接上数据库服务器的原因有很多,而防火墙的限制无疑也是其中的一种。为了降低故障排除的复杂程度,笔者建议数据库管理员在部署的时候,最好先把防火墙关掉。即先部署数据库,然后再部署防火墙。或者说,在防火墙存在的情况下,如果发现客户端无法正常连接到数据库,最好先把防火墙关掉,然后再看看能够正常连接。这主要可以帮助数据库管理员简单的来判断,这个连接故障是不是因为防火墙的不恰当配置所造成的。在排除防火墙配置错误的时候,这个方法非常的有用。如果确实是因为防火墙的原因,而数据库管理员还一直在数据库管理系统或者客户端那边寻找原因,那就是白花力气。同理,如果确实是数据库服务器的问题而不是防火墙的配置所造成的连接故障,但是数据库管理员却是在寻找防火墙的麻烦,那也是自讨苦吃。所以笔者建议大家,在部署数据库的时候(不仅限于SQL Server数据库系统),最好先把已经存在的防火墙关闭掉。等到客户端能够正常连接到服务器后,再尝试启动防火墙。

  建议二:根据数据库开启的服务来开启防火墙的端口

  从安全上来说,数据库服务器的端口开启的越少越好。但是数据库的有些服务必须要开启某些特定的端口,否则的话某些服务就会受到影响。为此从安全与性能上综合考虑的话,就要求数据库管理员根据数据库要采用的服务来开启防火墙的端口。

  如在SQL Server数据库中启用了复制功能的话,就需要在防火墙上开启1433端口(这是数据库默认的给复制服务启用的端口)。当然数据库管理员也可以跟网络管理员商量最终所采用的端口。另外如果采用复制快照,则进行WEB同步或者FTP访问则要求在防后墙上打开其他需要的端口。如快照复制通过FTP实现的话,为了将数据文件和架构从一个位置传输到网络上的另外一个位置,则需要在防火墙上开启21端口,以允许FTP协议的数据通过这个端口。而通常情况下,为了安全起见是把这个端口关闭的。而如果在复制功能中如果需要用到HTTP或者文件和打印共享服务时,还需要打开137、138、139端口,等等。否则的话由于防火墙的阻挡这些服务将无法正常使用。

  另外SQL Server数据库中有些服务的话是没有指定端口的。数据库管理员可以根据实际需要,来确定所需要采用的端口。如数据库的镜像服务,其没有指定所需要采用的端口,而是要求数据库管理员来选择端口。此时数据库管理员就可以根据服务器端口的实际采用情况来设置到底开启哪个端口为好。在配置的时候,如果数据库服务器中还部署有其他英勇的话,就需要避免与其他服务端口的冲突。

  SQL Server数据库的相关服务有很多,如还有报表服务、Browser服务(用于侦听指向命名实例的传入连接,并为客户端提供与此命名实例对应的TCP端口号)等等。若数据库管理员以为客户端的连接故障是由于防火墙所引起的,那么数据库管理员就需要查看微软的官方文档,看看对应服务所需要开启的端口在防火墙中是否已经打开。

  建议三:管理好动态端口

  以上这些服务的端口基本上是静态的,只需要在防火墙上把这些端口打开即可,没有多大的难度。而其管理的难点是有些服务采用的是动态的端口,这会给数据库服务器上防火墙的配置带来一定的麻烦。因为端口不固定,所以有时候防火墙就无法适从了。

  如通常情况下,数据库中有一个叫做命名实例的服务,这个服务采用的就是动态端口。也就是说,每次启动数据库服务器的时候,数据库引擎都将确定一个服务器没有使用的端口作为自己的端口。即每次采用的端口都不一致。默认情况下,SQL Server数据库引擎采用的TCP端口号为1433.但是如果在这台数据库服务器上还部署有其他的数据库引擎,如Oracle数据库系统或者MySQL数据库系统,则可能这个1433端口已经被他们所采用了。则此时SQL Server数据库系统引擎将无法使用这个端口。此时数据库引擎就会另外选择一个可用的端口。可见由于数据库引擎或者数据库服务器在每次启动的时候所采用的端口都可能不同,为此很难在防火墙上启用对正确端口的访问(防火墙不会跟数据库引擎互动)。也就是说,防火墙不会去侦测数据库引擎到底启用哪些端口。所以如果在数据库服务器上配置了防火墙,则在数据库部署的时候,如果某些服务采用了动态端口,则数据库管理员需要把他们配置为固定端口或者静态端口,以保证数据库引擎每次都采用同一的端口号。

  在SQL Server数据库中把动态端口设置为固定端口,其难度不是很大。只是如果启用的服务比较多的话,工作量可不算小。下面笔者就谈谈如何通过企业管理器来设置固定端口。

  第一步:打开TCP/IP属性对话框。在数据库配置管理中,打开网络配置选项,然后单击要配置的服务器实例。此时在右面窗口中会显示相关的内容。管理员需要找到TCP/IP这项内容,并双击它,以打开TCP/IP属性对话框。

  第二步:设置可用的端口号。在TCP/IP属性对话框中,找到TCP端口页签。在这个页签中就是当前SQL Server数据库所采用的端口号。数据库管理员需要在这个地方把需要采用的端口信息加入到这个页签中。那么操作系统在分配端口的时候,会把这个端口信息预留给数据库系统。注意数据库管理员手工数据的端口最好能够采取后面一些的端口号,如此的话发生端口冲突的几率就会少许多。

  第三步:关联相关的服务。设置好端口后,此时还没有关联到具体的服务。数据库管理员还必须把新设置的端口与数据库的服务关联起来。此时就需要单击SQL Server服务。找到相关的服务后选择重新启动。当数据库引擎重新启动时,就会将新的端口给这个服务所使用。以后每次数据库引擎重新启动之后,这个服务都将采用这个端口。为此在防护墙上只需要把这个端口打开即可。

  所以说对于动态端口来说,防火墙配置有一定的难度。此时最理想的方式就是把数据库服务所采用的动态端口改为静态端口或者固定端口。上面笔者介绍得就是把数据库服务的动态端口改为静态端口的基本步骤。各位数据库管理员可以尝试利用这种方法试试看。

  建议四:出现连接故障时的排错步骤

  如果在数据库服务器上部署了防火墙,此时如果客户端发生无法连接到服务器的现象,那么此时最佳的排错步骤是什么呢?如何才能够在最短时间内找到问题的原因呢?为此,笔者有如下这个建议。

  首先,数据库管理员必须先保证服务器与客户端之间网络的连通性。数据库管理员可以利用ping命令或者求助网络管理员,来判断服务器与客户端之间的连接是否有问题。有则改之,没有的话则进行下面一个步骤。

  第二,把防火墙先禁用掉。如果服务器与客户端之间的网络连通没有问题,那么此时数据库管理员就需要判断是防火墙的问题还是数据库服务器本身的问题。要判断这个故障的起点,最简单的方法就是把防火墙禁用掉。如果防火墙禁用后,客户端访问服务器正常了,那么就说明是防火墙在作怪;而过此时故障还依旧,那么就是数据库本身的问题了。不过此时也先不要急着把防火墙启用起来。等到故障修复后再重新启用防火墙为好。这么处理就是让数据库环境尽量的简单,以加速排错的过程。

  第三,如果是防火墙的问难,那么就先查看SQL Server数据库所需要采用的端口,并在防火墙中全部打开。因为有些服务的话可能需要很多个端口;而某些服务又会引用其他的服务,而这被引用的服务也需要新的端口。为此及时是数据库专家也很难一下子说清楚某个服务到底需要哪些端口。为此就把用到的端口先一一打开,然后再逐渐的关闭。从而可以确定某个服务需要引用哪些服务、采用哪些端口。


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 推荐一个ASP的内容管理框架(ASP Nuke)的优势和适用场景
    本文推荐了一个ASP的内容管理框架ASP Nuke,并介绍了其主要功能和特点。ASP Nuke支持文章新闻管理、投票、论坛等主要内容,并可以自定义模块。最新版本为0.8,虽然目前仍处于Alpha状态,但作者表示会继续更新完善。文章还分析了使用ASP的原因,包括ASP相对较小、易于部署和较简单等优势,适用于建立门户、网站的组织和小公司等场景。 ... [详细]
  • 本文介绍了如何在MySQL中将零值替换为先前的非零值的方法,包括使用内联查询和更新查询。同时还提供了选择正确值的方法。 ... [详细]
  • 在数据分析工作中,我们通常会遇到这样的问题,一个业务部门由若干业务组构成,需要筛选出每个业务组里业绩前N名的业务员。这其实是一个分组排序的 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
author-avatar
我喜欢吕继宏
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有