数据库服务器安全的权限控制策略

      任何服务器,安全与性能是两个永恒的主题。作为企业的信息化安全人员,其主要任务就是如何在保障服务器性能的前提下提高服务器的安全性。而要做到这一点,服务器的访问权限控制策略无疑是其中的一个重要环节。笔者企业最近上了一台新的数据库服务器,我为他设计了一些权限控制手段。这些方法虽然不能够百分之百的保证数据库服务器的安全性,但是,这些仍然是数据库服务器安全策略中必不可少的因素。他对提高数据库服务器的安全性有着不可磨灭的作用。

  其实,这些控制策略,不但对数据库服务器有效;对其他的应用服务器仍然具有参考价值。

  一、给用户授予其所需要的最小权限

  不要给数据库用户提供比其需要的还要多的权限。换句话说,只给用户真正需要的、为高效和简洁地完成工作所需要的权限。这个道理很容易理解。这就好像防止职业贪污一样。你若只给某个员工其完成工作所必需的费用,一分都不多给,那其从哪里贪污呢?

  如从数据库服务器的角度来考虑这个问题,这就要求数据库管理员在设置用户访问权限的时候,注意如下几个方面的问题。

  一是要限制数据库管理员用户的数量。在任何一个服务器中,管理员具有最高的权限。为了让数据库维持正常的运转,必须给数据库配置管理员账户。否则的话,当数据库出现故障的时候,就没有合适的用户对其进行维护了。但是,这个管理员账户的数量要严格进行限制。不能为了贪图方便,把各个用户都设置成为管理员。如笔者企业,在一台数据库服务器中运行着两个实例,但是,只有一个数据库管理员负责数据库的日常维护。所以,就只有一个管理员账户。

  二是选择合适的账户连接到数据库。一般数据库的访问权限可以通过两种方式进行控制。一是通过前台应用程序。也就是说,其连接到数据库是一个统一的账户,如管理员账户;但是,在前台应用程序中设置了一些关卡,来控制用户的访问权限。这种方式虽然可以减少前台程序开发的工作量,但是,对于数据库服务器的安全是不利的。二是在前台程序中,就直接利用员工账户的账号登陆到数据库系统。这种做法虽然可以提高数据库的安全性,但是,其前台配置的工作量会比较繁琐。而笔者往往采用折中的方法。在数据库中有两类账户,一类是管理员账户,只有前台系统管理员才可以利用这类账户登陆到数据库系统。另外一类是普通账户,其虽然可以访问数据库中的所有非系统对象,但是,他们不能够对数据库系统的运行参数进行修改。然后具体数据对象的访问,则通过前台应用程序控制。如此,前台应用程序普通员工只需要通过同一个账户连接到数据库系统。而系统管理员若需要进行系统维护,如数据库系统备份与还原,则可以通过数据库管理员账户连接到数据库系统。则即方便了前台应用程序的配置效率,又提高了数据库服务器的安全性。总之,我们的目的就是要限制以数据库管理员身份连接到数据库的用户数量。

  在其他应用服务器中,也有管理员账户与普通账户之分。在权限分配的时候,也最好只给用户授予其需要的最小权限,以保障数据库服务器的安全。

  二、取消默认账户不需要的权限

  在建立账户的时候,服务器往往给给其一些默认的权限。如在数据库中,Public是授予每个用户的默认角色。任何用户,只要没有指定具体的角色,则其都可以授予Public组的权限。这其中,还包括执行各种SQL语句的权限。如此,用户就有可能利用这个管理漏洞,去访问那些不允许他们直接访问的包。因为这个默认权限,对于那些需要他们并且需要合适配置和使用他们的应用来说,是非常有用的,所以,系统默认情况下,并没有禁止。但是,这些包可能不适合与其他应用。故,除非绝对的需要,否则就应该从默认缺陷中删除。

  也就是说,通常某个账户的默认权限,其是比较大的。如对于数据库来说,其账户的默认权限就是可以访问所有的非系统对象表。数据库设计的时候,主要是为了考虑新建用户的方便。而且,新建用户的时候,数据库确实也无法识别这个用户到底能够访问哪些用户对象。但是,对于企业应用系统来说,若给每个员工都默认具有这么大的访问权限,那则是很不安全的。

  笔者的做法是,会把应用系统的默认用户权限设置为最小,有些甚至把默认用户权限全部取消掉。这就迫使服务器管理员在建立账户的时候,给账户指定管理员预先设定的角色。这就可以有效的防止管理员“偷懒”。在建立账户的时候,不指定角色。

      任何服务器,安全与性能是两个永恒的主题。作为企业的信息化安全人员,其主要任务就是如何在保障服务器性能的前提下提高服务器的安全性。而要做到这一点,服务器的访问权限控制策略无疑是其中的一个重要环节。笔者企业最近上了一台新的数据库服务器,我为他设计了一些权限控制手段。这些方法虽然不能够百分之百的保证数据库服务器的安全性,但是,这些仍然是数据库服务器安全策略中必不可少的因素。他对提高数据库服务器的安全性有着不可磨灭的作用。

  其实,这些控制策略,不但对数据库服务器有效;对其他的应用服务器仍然具有参考价值。

  一、给用户授予其所需要的最小权限

  不要给数据库用户提供比其需要的还要多的权限。换句话说,只给用户真正需要的、为高效和简洁地完成工作所需要的权限。这个道理很容易理解。这就好像防止职业贪污一样。你若只给某个员工其完成工作所必需的费用,一分都不多给,那其从哪里贪污呢?

  如从数据库服务器的角度来考虑这个问题,这就要求数据库管理员在设置用户访问权限的时候,注意如下几个方面的问题。

  一是要限制数据库管理员用户的数量。在任何一个服务器中,管理员具有最高的权限。为了让数据库维持正常的运转,必须给数据库配置管理员账户。否则的话,当数据库出现故障的时候,就没有合适的用户对其进行维护了。但是,这个管理员账户的数量要严格进行限制。不能为了贪图方便,把各个用户都设置成为管理员。如笔者企业,在一台数据库服务器中运行着两个实例,但是,只有一个数据库管理员负责数据库的日常维护。所以,就只有一个管理员账户。

  二是选择合适的账户连接到数据库。一般数据库的访问权限可以通过两种方式进行控制。一是通过前台应用程序。也就是说,其连接到数据库是一个统一的账户,如管理员账户;但是,在前台应用程序中设置了一些关卡,来控制用户的访问权限。这种方式虽然可以减少前台程序开发的工作量,但是,对于数据库服务器的安全是不利的。二是在前台程序中,就直接利用员工账户的账号登陆到数据库系统。这种做法虽然可以提高数据库的安全性,但是,其前台配置的工作量会比较繁琐。而笔者往往采用折中的方法。在数据库中有两类账户,一类是管理员账户,只有前台系统管理员才可以利用这类账户登陆到数据库系统。另外一类是普通账户,其虽然可以访问数据库中的所有非系统对象,但是,他们不能够对数据库系统的运行参数进行修改。然后具体数据对象的访问,则通过前台应用程序控制。如此,前台应用程序普通员工只需要通过同一个账户连接到数据库系统。而系统管理员若需要进行系统维护,如数据库系统备份与还原,则可以通过数据库管理员账户连接到数据库系统。则即方便了前台应用程序的配置效率,又提高了数据库服务器的安全性。总之,我们的目的就是要限制以数据库管理员身份连接到数据库的用户数量。

  在其他应用服务器中,也有管理员账户与普通账户之分。在权限分配的时候,也最好只给用户授予其需要的最小权限,以保障数据库服务器的安全。

  二、取消默认账户不需要的权限

  在建立账户的时候,服务器往往给给其一些默认的权限。如在数据库中,Public是授予每个用户的默认角色。任何用户,只要没有指定具体的角色,则其都可以授予Public组的权限。这其中,还包括执行各种SQL语句的权限。如此,用户就有可能利用这个管理漏洞,去访问那些不允许他们直接访问的包。因为这个默认权限,对于那些需要他们并且需要合适配置和使用他们的应用来说,是非常有用的,所以,系统默认情况下,并没有禁止。但是,这些包可能不适合与其他应用。故,除非绝对的需要,否则就应该从默认缺陷中删除。

  也就是说,通常某个账户的默认权限,其是比较大的。如对于数据库来说,其账户的默认权限就是可以访问所有的非系统对象表。数据库设计的时候,主要是为了考虑新建用户的方便。而且,新建用户的时候,数据库确实也无法识别这个用户到底能够访问哪些用户对象。但是,对于企业应用系统来说,若给每个员工都默认具有这么大的访问权限,那则是很不安全的。

  笔者的做法是,会把应用系统的默认用户权限设置为最小,有些甚至把默认用户权限全部取消掉。这就迫使服务器管理员在建立账户的时候,给账户指定管理员预先设定的角色。这就可以有效的防止管理员“偷懒”。在建立账户的时候,不指定角色。