数据库服务器安全的权限控制策略
任何服务器,安全与性能是两个永恒的主题。作为企业的信息化安全人员,其主要任务就是如何在保障服务器性能的前提下提高服务器的安全性。而要做到这一点,服务器的访问权限控制策略无疑是其中的一个重要环节。笔者企业最近上了一台新的数据库服务器,我为他设计了一些权限控制手段。这些方法虽然不能够百分之百的保证数据库服务器的安全性,但是,这些仍然是数据库服务器安全策略中必不可少的因素。他对提高数据库服务器的安全性有着不可磨灭的作用。
其实,这些控制策略,不但对数据库服务器有效;对其他的应用服务器仍然具有参考价值。
一、给用户授予其所需要的最小权限
不要给数据库用户提供比其需要的还要多的权限。换句话说,只给用户真正需要的、为高效和简洁地完成工作所需要的权限。这个道理很容易理解。这就好像防止职业贪污一样。你若只给某个员工其完成工作所必需的费用,一分都不多给,那其从哪里贪污呢?
如从数据库服务器的角度来考虑这个问题,这就要求数据库管理员在设置用户访问权限的时候,注意如下几个方面的问题。
1.是要限制数据库管理员用户的数量。在任何一个服务器中,管理员具有最高的权限。为了让数据库维持正常的运转,必须给数据库配置管理员账户。否则的话,当数据库出现故障的时候,就没有合适的用户对其进行维护了。但是,这个管理员账户的数量要严格进行限制。不能为了贪图方便,把各个用户都设置成为管理员。如笔者企业,在一台数据库服务器中运行着两个实例,但是,只有一个数据库管理员负责数据库的日常维护。所以,就只有一个管理员账户。
2.是选择合适的账户连接到数据库。一般数据库的访问权限可以通过两种方式进行控制。一是通过前台应用程序。也就是说,其连接到数据库是一个统一的账户,如管理员账户;但是,在前台应用程序中设置了一些关卡,来控制用户的访问权限。这种方式虽然可以减少前台程序开发的工作量,但是,对于数据库服务器的安全是不利的。二是在前台程序中,就直接利用员工账户的账号登陆到数据库系统。这种做法虽然可以提高数据库的安全性,但是,其前台配置的工作量会比较繁琐。而笔者往往采用折中的方法。在数据库中有两类账户,一类是管理员账户,只有前台系统管理员才可以利用这类账户登陆到数据库系统。另外一类是普通账户,其虽然可以访问数据库中的所有非系统对象,但是,他们不能够对数据库系统的运行参数进行修改。然后具体数据对象的访问,则通过前台应用程序控制。如此,前台应用程序普通员工只需要通过同一个账户连接到数据库系统。而系统管理员若需要进行系统维护,如数据库系统备份与还原,则可以通过数据库管理员账户连接到数据库系统。则即方便了前台应用程序的配置效率,又提高了数据库服务器的安全性。总之,我们的目的就是要限制以数据库管理员身份连接到数据库的用户数量。
在其他应用服务器中,也有管理员账户与普通账户之分。在权限分配的时候,也最好只给用户授予其需要的最小权限,以保障数据库服务器的安全。
二、取消默认账户不需要的权限
在建立账户的时候,服务器往往给给其一些默认的权限。如在数据库中,Public是授予每个用户的默认角色。任何用户,只要没有指定具体的角色,则其都可以授予Public组的权限。这其中,还包括执行各种SQL语句的权限。如此,用户就有可能利用这个管理漏洞,去访问那些不允许他们直接访问的包。因为这个默认权限,对于那些需要他们并且需要合适配置和使用他们的应用来说,是非常有用的,所以,系统默认情况下,并没有禁止。但是,这些包可能不适合与其他应用。故,除非绝对的需要,否则就应该从默认缺陷中删除。
也就是说,通常某个账户的默认权限,其是比较大的。如对于数据库来说,其账户的默认权限就是可以访问所有的非系统对象表。数据库设计的时候,主要是为了考虑新建用户的方便。而且,新建用户的时候,数据库确实也无法识别这个用户到底能够访问哪些用户对象。但是,对于企业应用系统来说,若给每个员工都默认具有这么大的访问权限,那则是很不安全的。
笔者的做法是,会把应用系统的默认用户权限设置为最小,有些甚至把默认用户权限全部取消掉。这就迫使服务器管理员在建立账户的时候,给账户指定管理员预先设定的角色。这就可以有效的防止管理员“偷懒”。在建立账户的时候,不指定角色。
三、正确的鉴别客户端
正确的鉴别客户端的合法性,这是提高应用服务器安全性的一个不二法则。有时候,为了服务器安全性考虑,必须要求对客户端的合法性进行鉴别。对此,我们可以通过如下措施来管理客户端。
一是对于具有管理员账户的角色进行远程鉴别。虽然从理论上说,可以对任何一台客户端都采取远程鉴别,如通过主机名或者IP地址进行合法性鉴别。但是,这么做的话,往往太过于小题大做,会增加管理上的烦恼。或者说,投入与回报不成正比。所以,在实际配置中,笔者不会对每一台客户端都进行合法性验证。而只对于利用管理员账户登陆服务器的客户端才进行合法性验证。如可以在数据库服务器上进行设置,只有哪几个IP地址才可以通过管理员角色连接到数据库系统中。通过对客户端身份的合法鉴别,就可以再进一步提高数据库服务器管理员角色账户的安全性。即使管理员账户与口令被窃取,有客户端身份验证这一功能,也不怕他们进行非法攻击。
二是不要太过于相应客户端的自我保护功能。如在某个品牌的数据库系统中,有一种远程鉴别功能。他会处理连接到数据库的远程客户的用户鉴别问题。数据库绝对信任任何客户都已经进行了正确的鉴别。但是,我们都知道,在任何情况下,我们不能够相信客户端会正确地执行操作系统鉴别。故,往往这个安全特性只是作为摆设。对于数据库服务器来说,一个比较安全的做法是,不采用这种远程鉴别功能,而是在服务器上对客户端进行统一的鉴别。如在服务器上,通过身份认证功能来确保连接到服务器上的客户端的合法性与真实性。
四、数据库系统最好不要穿透防火墙
如果把数据库服务器放置在防火墙的后面,则最好在任何情况下,都不要穿透该防火墙。否则的话,会让数据库系统失去防火墙的保护,从而把数据库暴露在互联网下,成为众多黑客茶余饭后“调戏”、“攻击”的对象。
例如,不要打开数据库的1521端口来与互联网进行连接。如果用户执意要这么做的话,则会引起很多重要的安全弱点。因为攻击者可以凭借这个弱点,打开更多的穿透防火墙的端口、多线程操作系统服务器的问题,以及泄漏防火墙后面应用服务器中的重要信息。再者,这个弱点还有可能被用来探测数据库服务器的关键细节,如利用窃听监听器来获得关键信息。因为监听器会监听该数据库的运行轨迹、登陆信息、标识信息、数据库描述服务以及服务名等等。
所以,执意把放在企业防火墙背后的应用服务器中的某个关键端口,设置成为穿透防火墙的端口是一种很不好的安全习惯。虽然其可以带来管理上的方便,但是,出于安全考虑,笔者还是不建议管理员进行如此的配置。
针对数据库应用服务器的访问与连接的权限控制,还有许多。以上四个方面,是大家在数据库服务器部署的时候,容易忽视的几个地方。希望这篇文章,能够给大家一些提醒。
其实,这些控制策略,不但对数据库服务器有效;对其他的应用服务器仍然具有参考价值。
一、给用户授予其所需要的最小权限
不要给数据库用户提供比其需要的还要多的权限。换句话说,只给用户真正需要的、为高效和简洁地完成工作所需要的权限。这个道理很容易理解。这就好像防止职业贪污一样。你若只给某个员工其完成工作所必需的费用,一分都不多给,那其从哪里贪污呢?
如从数据库服务器的角度来考虑这个问题,这就要求数据库管理员在设置用户访问权限的时候,注意如下几个方面的问题。
1.是要限制数据库管理员用户的数量。在任何一个服务器中,管理员具有最高的权限。为了让数据库维持正常的运转,必须给数据库配置管理员账户。否则的话,当数据库出现故障的时候,就没有合适的用户对其进行维护了。但是,这个管理员账户的数量要严格进行限制。不能为了贪图方便,把各个用户都设置成为管理员。如笔者企业,在一台数据库服务器中运行着两个实例,但是,只有一个数据库管理员负责数据库的日常维护。所以,就只有一个管理员账户。
2.是选择合适的账户连接到数据库。一般数据库的访问权限可以通过两种方式进行控制。一是通过前台应用程序。也就是说,其连接到数据库是一个统一的账户,如管理员账户;但是,在前台应用程序中设置了一些关卡,来控制用户的访问权限。这种方式虽然可以减少前台程序开发的工作量,但是,对于数据库服务器的安全是不利的。二是在前台程序中,就直接利用员工账户的账号登陆到数据库系统。这种做法虽然可以提高数据库的安全性,但是,其前台配置的工作量会比较繁琐。而笔者往往采用折中的方法。在数据库中有两类账户,一类是管理员账户,只有前台系统管理员才可以利用这类账户登陆到数据库系统。另外一类是普通账户,其虽然可以访问数据库中的所有非系统对象,但是,他们不能够对数据库系统的运行参数进行修改。然后具体数据对象的访问,则通过前台应用程序控制。如此,前台应用程序普通员工只需要通过同一个账户连接到数据库系统。而系统管理员若需要进行系统维护,如数据库系统备份与还原,则可以通过数据库管理员账户连接到数据库系统。则即方便了前台应用程序的配置效率,又提高了数据库服务器的安全性。总之,我们的目的就是要限制以数据库管理员身份连接到数据库的用户数量。
在其他应用服务器中,也有管理员账户与普通账户之分。在权限分配的时候,也最好只给用户授予其需要的最小权限,以保障数据库服务器的安全。
二、取消默认账户不需要的权限
在建立账户的时候,服务器往往给给其一些默认的权限。如在数据库中,Public是授予每个用户的默认角色。任何用户,只要没有指定具体的角色,则其都可以授予Public组的权限。这其中,还包括执行各种SQL语句的权限。如此,用户就有可能利用这个管理漏洞,去访问那些不允许他们直接访问的包。因为这个默认权限,对于那些需要他们并且需要合适配置和使用他们的应用来说,是非常有用的,所以,系统默认情况下,并没有禁止。但是,这些包可能不适合与其他应用。故,除非绝对的需要,否则就应该从默认缺陷中删除。
也就是说,通常某个账户的默认权限,其是比较大的。如对于数据库来说,其账户的默认权限就是可以访问所有的非系统对象表。数据库设计的时候,主要是为了考虑新建用户的方便。而且,新建用户的时候,数据库确实也无法识别这个用户到底能够访问哪些用户对象。但是,对于企业应用系统来说,若给每个员工都默认具有这么大的访问权限,那则是很不安全的。
笔者的做法是,会把应用系统的默认用户权限设置为最小,有些甚至把默认用户权限全部取消掉。这就迫使服务器管理员在建立账户的时候,给账户指定管理员预先设定的角色。这就可以有效的防止管理员“偷懒”。在建立账户的时候,不指定角色。
三、正确的鉴别客户端
正确的鉴别客户端的合法性,这是提高应用服务器安全性的一个不二法则。有时候,为了服务器安全性考虑,必须要求对客户端的合法性进行鉴别。对此,我们可以通过如下措施来管理客户端。
一是对于具有管理员账户的角色进行远程鉴别。虽然从理论上说,可以对任何一台客户端都采取远程鉴别,如通过主机名或者IP地址进行合法性鉴别。但是,这么做的话,往往太过于小题大做,会增加管理上的烦恼。或者说,投入与回报不成正比。所以,在实际配置中,笔者不会对每一台客户端都进行合法性验证。而只对于利用管理员账户登陆服务器的客户端才进行合法性验证。如可以在数据库服务器上进行设置,只有哪几个IP地址才可以通过管理员角色连接到数据库系统中。通过对客户端身份的合法鉴别,就可以再进一步提高数据库服务器管理员角色账户的安全性。即使管理员账户与口令被窃取,有客户端身份验证这一功能,也不怕他们进行非法攻击。
二是不要太过于相应客户端的自我保护功能。如在某个品牌的数据库系统中,有一种远程鉴别功能。他会处理连接到数据库的远程客户的用户鉴别问题。数据库绝对信任任何客户都已经进行了正确的鉴别。但是,我们都知道,在任何情况下,我们不能够相信客户端会正确地执行操作系统鉴别。故,往往这个安全特性只是作为摆设。对于数据库服务器来说,一个比较安全的做法是,不采用这种远程鉴别功能,而是在服务器上对客户端进行统一的鉴别。如在服务器上,通过身份认证功能来确保连接到服务器上的客户端的合法性与真实性。
四、数据库系统最好不要穿透防火墙
如果把数据库服务器放置在防火墙的后面,则最好在任何情况下,都不要穿透该防火墙。否则的话,会让数据库系统失去防火墙的保护,从而把数据库暴露在互联网下,成为众多黑客茶余饭后“调戏”、“攻击”的对象。
例如,不要打开数据库的1521端口来与互联网进行连接。如果用户执意要这么做的话,则会引起很多重要的安全弱点。因为攻击者可以凭借这个弱点,打开更多的穿透防火墙的端口、多线程操作系统服务器的问题,以及泄漏防火墙后面应用服务器中的重要信息。再者,这个弱点还有可能被用来探测数据库服务器的关键细节,如利用窃听监听器来获得关键信息。因为监听器会监听该数据库的运行轨迹、登陆信息、标识信息、数据库描述服务以及服务名等等。
所以,执意把放在企业防火墙背后的应用服务器中的某个关键端口,设置成为穿透防火墙的端口是一种很不好的安全习惯。虽然其可以带来管理上的方便,但是,出于安全考虑,笔者还是不建议管理员进行如此的配置。
针对数据库应用服务器的访问与连接的权限控制,还有许多。以上四个方面,是大家在数据库服务器部署的时候,容易忽视的几个地方。希望这篇文章,能够给大家一些提醒。
顶(0)
踩(0)
上一篇:网络钓鱼攻击技术分析及防范
下一篇:某大型企业局域网安全解决方案
- 最新评论