账户方案系统角色多管齐下保障Oracle的安全
一、账户与系统角色结合,提高了账户的安全性。
账户是定义在数据库系统中的一个名称,它是数据库的基本访问控制机制。当连接到Oracle数据库时,跟其他数据库一样,需要用户输入用户名与密码。数据库系统就是凭借这个用户名来授予其相应的数据库访问权限。不过,这跟其他数据库又有所不同。因为Oracle数据库有有一类很特殊的账户-特权账户。这些特权账户具有某些比较特殊的权限。为了数据库的安全,他们除了在数据库中要拥有某些特定的权限之外,还必须拥有操作系统对应的权限。数据库与操作系统一起,来保障数据库的安全。
如在Oracle数据库中,主要有两类特权用户,分别为SYSDBA与SYSOPER。这两类用户主要用用来执行一些特殊的作业。如启动关闭数据库、建立数据库、备份与恢复操作等等。这些作业明显会直接影响到数据库的正常作业;而且备份恢复操作还直接跟数据库数据安全息息相关。为了保障这些特权账户的安全,Oracle数据库还采用了一些特殊机制。如Oracle要求,除了在数据库中要拥有对应的权限之外,还必须在操作系统中也是某些特定角色的成员。例如,Oracle数据库若是部署在微软的操作系统下,则安全成功后,在操作系统的角色中,会多SYSDBA与OSOPER两个组。特权账户必须要属于这两个组,才能够进行如上所述的一些数据库维护作业。同理,在Linux等其他操作系统平台下,也需要具有类似的权限。通过这种策略,特权账户的安全就又多了一个保障。如数据库管理员只想使用特权账户SYSDBA来管理维护数据库,而不需要SYSOPER账户。此时,数据库管理员就有两个选择。要么在数据库中禁用这个账户;要么在操作系统中把这个账户从Oracle建立的组中剔除出去。
虽然SYSOPER与SYSDBA账户都是属于特权账户,但是他们的权限还是由差异的。如特权账户SYSDBA具备了特权账户SYSOPER的所有权限之外,还具有建立数据库、执行不完全恢复等权限。同时,前者还自动具备了DBA角色的所有权限;而后者则不具备DBA角色的权限。为了数据库库的安全,通常情况下不能够把这些特权账户的权限赋予给其他用户。虽然可以通过更改初始化参数来突破这个限制,但是出于数据库的安全考虑,我们都不建议这么处理。
可见,特权账户与操作系统固定权限结合,双管齐下,来保障数据库的安全,这是Oracle数据库的一个突破。其在很大程度上,提高了特权账户的安全性。若是普通账户,则没有这方面的限制。
二、账户与方案一一对应保障Oracle安全。
除了账户与系统角色结合,来提高账户安全性之外,Oracle数据库另外一个值得称颂的地方就是把账户与方案联系起来,进一步提高了账户的安全性。
在Oracle数据库中,方案是用户所拥有数据库对象的集合。这是因为在Oracle数据库中对象是以用户来组织的,用户与方案是一一对应的,并且两者所使用的名称相同。利用Oralce数据库与实例安装完成后,其默认情况下有两个用户,分别为SYSTEM与SCOTT。他们分别对应了两个方案SYSTEM与SCOTT。Oracle数据库就是账户与方案一起,来提高数据库访问的安全性。
如用户可以直接访问其自己的方案对象,但是如果需要访问其他用户的方案对象时,则需要具有相关的权限。如用户SCOTT,其方案SCOTT下所有的数据库对象都可以进行访问。但是,如果SCOTT用户想访问方案SYSTEM下面的数据库对象,则需要先经过用户SYSTEM进行授权。如果他没有把这个访问的权限授权给SCOTT的话,则用户SCOTT就无法访问方案SYSTE下面的任何一个数据库对象。所以,方案就好像一个个保护罩,又把数据库逻辑的分割成几个独立的区域。这个区域的主人可以任意访问内部的任何数据库对象。若其他用户想要访问这个区域的话,则必须要先经过这个区域主人的授权。这一个个区域(方案)是用户的私人领地,未经允许他人不得进入。通过这种方式,用户就可以保护自己所建立数据对象的安全。
在使用方案是,需要注意一些细节方面的问题。如在同一个方案中,不能够存在同名的对象;但是在不同的方案中,不同用户可以建立同名的对象。还有当某个用户要访问其他方案的对象时,必须加入方案名最为前缀。也就说,要在数据库对象名之前加入主人的名字。这些是硬性规则,不能够打折扣。
三、新用户没有任何数据库操作权限。
Oracle账户与SQLServer账户还有一个不同之处。就是在Oracle数据库中建立新账户后,默认情况下,这个账户不具备任何数据库操作的权限。但是,在SQLServer中则不同。在SQLServer中,若建立账户,其默认会继承一定的权限。
在Oracle数据库中,常常通过采用数据库验证的方式来建立数据库用户。采取这个方式,其优势是非常明显的。如用户账户与其身份验证都是由数据库控制,而不要借助任何的外部力量。另外,数据库系统还提供了严格的口令管理策略以加强口令的安全性,还提供了诸如账户锁定、口令有效期等安全策略。
在建立账户的时候,主要通过三个措施来提高新建账户的安全性。
一是初始建立的数据库账户并不具有任何的权限,不能够执行任何的数据库操作。如连连接数据库的权限都没有,需要另外配置权限。这虽然增加了一些维护的工作量,但是毕竟提高了初始账户的安全性能给。因为账户的建立不会经常发生,所以相比数据库安全来说,这点付出还是值得的。
二是在新建账户时,必须要为数据库账户设置密码,不能够使用空密码。这是一个很好的安全措施,因为空口令的账户是数据库安全的一个定时炸弹。据笔者所知,在SQLServer数据库中就好像没有类似的限制。数据库管理员在建立新账户时可以不设置初始化密码,这是非常危险的操作方法。
三是通过表空间配额来限制其创建数据库库对象的权利。在建立用户时,如果没有为新用户指表空间配额,则用户在特定的表空间上的配额就为0。也就是说,用户在这个表空间上没有存储的空间。为此,这个用户当然就无法在这个表空间上建立数据对象。即使后续通过权限赋予其足够的权限,其最多只是查询、使用数据库对象,而无法创建属于自己的数据库对象。这也是提高新建用户安全性的措施之一。用户不能够随便在表空间中建立数据库对象,有利于保证数据库的干净。另外需要说明的是,如果在建立账户的时候,没有给用户指定具体的表空间,则其默认的表空间为System表空间。这看起来是一个很危险的操作,其实却不然。因为上面笔者谈到过,用户若要访问其他用户所创建的方案时,必须拥有其他用户的相应授权。所以虽然新用户属于System表空间,但是不一定说其可以访问System表空间中的数据库对象。若要访问,还需要用户进行分别授权。
可见,账户与方案这一一对应的关系,在很大程度上提高了账户的安全性。而特权账户与操作系统角色结合,也限制了特权账户的操作权限。这些措施,都有利于提高数据库账户的安全。账户、方案、系统角色多管齐下,保障了Oracle数据库的安全。
相关文章: