我想通过这篇文章,提醒Oracle数据库管理员,在规划与实现Oracle数据库安全性方面需要注意的地方,向他们提一些可行的建议。希望这些内容能够帮助他们提高Oracle数据库的安全性。
一、 锁定不用的帐户。
在Oracle安装的时候,会自动建立几个默认的数据库服务器帐户。当Oracle数据库安装完成后,系统会自动把某些帐户锁定或者设置为过期;但同时也会打开一些有用的帐户,如SYS、SYSTEM、SYSMAN等等。如果安装了数据库实例,可能还会建立scott帐户。为了Oracle数据库的安全性考虑,我们最好能够把一些不用的帐户锁定掉。一般来说,若是系统提供的帐户,我们只需要保留SYS、SYSTEM、SYSMAN这三个用户名即可,其他的系统自建的用户名可以锁定掉。
另外,在数据库维护中,我们还会建立自己的管理员帐户。如笔者在维护数据库系统的时候,就不喜欢用系统提供的管理员帐户。而是会先利用他们的帐户登陆进去,然后建立自己喜欢的用户名与密码。所以,当数据库系统理有你前任数据库管理员留下来的用户名而你又不想用的时候,请各位高抬贵手,及早把它锁定掉。这可以提高数据库的安全性。可惜的是,笔者有时候给客户进行数据库有偿维护的时候,发现数据库中有很多莫名其妙的管理员帐户。问他们数据库管理员这些帐户有什么用时,他们说是前任留下来的,他们也不知道。对于这些帐户,笔者的建议是,尽快的把他们锁定掉或者过期掉。不然的话,对于Oracle系统来说,是一颗定时炸弹。一旦爆炸,就会给这个数据库带来不可换回的损失。
二、 实施口令管理。
这准确来说,不是笔者的建议,而是Oracle官方的建议。我在参加Oracle培训的时候,他们的教授就跟我们说,应该将数据库所提供的基本口令管理准则,如口令长度历史纪录、复杂性等等,应用于所有的用户密码中,并要求所有的管理员帐户养成定期更改密码的习惯。
依赖于密码管理的数据库系统来说,需要保证密码在任何时候都是保密的。可是在实际工作中,密码可能会泄露,如在输入密码的时候被人看到或者被人利用密码窃取工具窃取到密码等等。故为了更好的控制数据库的安全,Oracle数据库中通过概要文件来保障数据库口令的安全。这可以说是Oracle数据库的一个独创的功能了。
具体的来说,Oracle在口令管理上,有如下规则。
1、口令历史。这跟微软操作系统中的口令历史一致。主要是用来指定在一个时间间隔内用户不能使用相同的密码。我们可以利用CREATE语句创建一个用户概要文件,虽然利用REUSE_TIME与REUSE_MAX参数指定间隔天数。TIME参数用来指定在多久后可以采用相同的密码;而MAX参数则指定,在可以再次使用当前口令之前,用户必须改变该口令的次数。
2、口令的期限。若一个密码时间越长,其泄露的几率越长。最理想的状态是,每用过一次后,就修改一次密码。但是,这显然不怎么容易实现。所以,我们需要根据一定的情况,设置一个密码有效的最长期限。当这个期限过后,原来的密码就失效,用户必须重新修改密码。我们可以利用CREATE语句为某一个用户创建一个概要文件,然后利用LIFE?_TIME参数指定口令的最长有效时间。当然,也可以为到期的密码指定延长期。当用户的口令到期后,用户第一次登陆数据库的时候,用户需要输入延长期。在这个延长期内,用户仍然可以使用原有的密码,只是每次登录数据库,系统都会提醒用户修改密码,直到延长期结束。当延长期满后,用户必须更改原有的口令。否则的话,系统会一直提醒用户更改密码,而拒绝登陆系统。另外,口令的期限往往跟上面的口令历史一起使用,从而把密码的安全性提高到一个新的层次。
3、密码的复杂性管理。我们都知道,纯数字的密码要比数字、字符混合的密码好破解的多。故为了加强用户名密码的安全性,设置一定的复杂性密码管理规则是必须的。Oracle数据库系统中,提供了很多的密码复杂性检查。如可以规定密码的最小长度;可以设置密码不能与用户名相同;可以规定密码中必须包含字符、数字、标点符号等等;还可以设定密码不能为简单的单词以及密码的前面几个字符不能够相同等等。通过这些复杂性管理,可以最大程度的保障密码的安全性。如此的话,若想要通过数字字典破解密码的话,难度就会比较大。不过,密码虽然复杂了,但是用户最好不要随便拿张纸记一下,这样的话,密码仍然容易泄露。最好把密码记熟了,然后把纸撕掉或者烧掉,以确保密码不会被泄露。
三、 帐户自动锁定。
我们在利用银行卡帐户的时候,当密码输入错误超过一定的次数时,这卡就会被锁住。其实,在Oracle数据库中,也可以实现这个目的。当某个管理员帐户,或者普通的帐户,其失败的登陆次数超过了我们指定的次数时,服务器就会自动锁定那个用户帐号。
一般来说,我们只需要给管理员帐户设置自动锁定策略即可。因为相对于普通用户来说,由于其不怎么熟悉操作,所以密码输入错误的几率会比较高。若我们为他们设置密码锁定策略的话,那我们很大一部分工作就是给他们进行解锁。所以,没有特殊必要的话,不要给普通帐户设置自动锁定策略,或者说,至少要把这个密码输入错误次数设置的高一点。
另外,若是前台应用程序直接连接到数据库的话,也会有用户名与密码。这个用户名与密码笔者建议是不要设置密码锁定策略,否则的话,我们维护起来会很麻烦。
四、 合理分配终端用户的权限。
终端用户就是企业员工实际用的帐户。针对普通员工的权限控制,一般有两种方式。一是通过前台的应用软件来控制;二是通过数据库的用户权限来实现。
如果我们是利用数据库自身的权限管理器来管理帐户权限的话,则我们需要考虑对终端用户进行分组,然后为这些用户组创建不同的角色。数据库管理员可以先给每个角色赋予必要的权限,然后再将这些角色赋予相应的用户组。也就是说,我们不建议直接给用户赋予相关的权限,而是通过角色与组来管理数据库的访问权限。在特殊的情况下,如某个权限只有一个特定的帐户具有时,则可以直接把权限赋予这个帐户。否则的话,我们不建议给用户直接赋予权限。
上一篇 新手站长应该从借鉴中快速成长