Oracle 11g实施数据库的安全性

数据库的安全性主要通过用户、权限和角色进行管理。

一 用户管理

1 数据库用户账户

要访问数据库,用户必须指定有效的数据库用户账户,而且还要根据该用户账户的要求成功通过验证,每个数据库用户都有一个唯一的数据库账户。Oracle建议这样做是为了避免潜在的安全漏洞以及为特定的审计活动提供有意义的数据。但是,有时候若干用户会共享一个公用数据库账户,每个用户账户都包括以下项:
  • 唯一的用户名:用户名不能超过30个字节,不能包含特殊字符,而且必须以字母开头;
  • 验证方法:最常见的验证方法是口令,但是Oracle 11g支持口令、全局和外部验证方法;
  • 默认表空间:如果用户未指定其他表空间,则可在这个位置创建对象。请注意,具有默认表空间并不意味着用户在该表空间具有创建对象的权限,也不意味这用户在该表空间中具有用于创建对象的空间限额,这两项需要另外授权;
  • 临时表空间:这是实例代表用户创建临时对象(如排序和临时表)的位置,临时表空间没有限额;
  • 用户概要文件:分配给用户的一组资源和口令限制;
  • 初始使用者组:有资源管理器使用;
  • 账户状态:用户只可访问“打开”的账户。
方案:方案是数据库用户拥有的数据库对象的集合。方案对象是直接引用数据库数据的逻辑结构,方案对象包括表、视图、序列、存储过程、同义词,索引和数据库链接等结构。通常,方案对象包括应用程序在数据库中创建的所有内容。

2 预定义管理账户

默认情况下,sys和system账户被授予DBA角色,另外,sys账户还具有带admin option的所有权限并拥有数据字典。要连接到sys账户,对于数据库实例,必须使用as sysdba子句,对于ASM实例,必须使用as sysasm子句。授予了sysdba权限的任何用户都可以通过使用as sysdba子句连接到sys账户。仅允许授予了sysdba、sysoper或sysasm权限的特权用户启动和关闭实例。system账户不具有sysdba权限,system还被授予aq_administrator_role和mgmt_user角色。sys和system账户是数据库所必须的账户,不能将其删除。

Oracle Enterprise Manager的管理代理使用dbsnmp账户来监视和管理数据库,sysman账户用于执行OEM管理任务,dbsnmp和sysman都没有sysdba权限。

3 创建用户

给每一个用户分配默认表空间和临时表空间,如果用户在创建对象时未指定表空间,则将在分配给对象所有者的默认表空间中创建对象,这样,可以控制用户对象的创建位置,如果为选择默认表空间,则使用系统定义的默认永久表空间,对于临时表空间也是如此,如果未指定表空间,则使用系统定义的临时表空间。

4 验证用户

验证表示验证要使用数据库、资源或应用程序的默认或某事物的身份。通过对该身份进行验证可建立一种信任关系,以进行进一步的交互。通过验证可将访问和操作与特定的身份联系起来,从而增强安全性。完成验证后,授权进程会允许或限制该实体能够执行的访问和操作的级别。

创建用户时,必须确定要使用的验证方法。
  • 口令验证:又称为Oracle DB验证。创建的每一个用户都有一个关联口令,用户尝试建立连接时,必须提供这个口令;
  • 外部验证:使用数据库外部(操作系统、Kerberos或Radius)的方法执行的验证;
  • 全局验证:使用Oracle高级安全选件时,可使用Oracle Internet Directory通过全局验证来识别用户。

5 管理员验证

操作系统安全性:在Unix和Linux中,DBA默认情况下属于oinstall操作系统组,该组具有创建和删除数据库文件所需的权限;
管理员安全性:只有在使用口令文件或操作系统权限进行验证后,才允许授权用户sysdba、sysoper和sysasm建立连接。如果使用操作系统验证,则数据库不适用提供的用户名和口令。当口令文件不存在,或者该文件中不存在提供的用户名和口令,或者提供用户名和口令时,将使用操作系统验证。默认情况下,Oracle Database 11g中的口令文件使用区分大小写的口令。
但是,如果成功使用口令文件成功完成了验证,则使用用户名记录连接,如果使用操作系统成功完成了验证,则表示这是一个connect / 连接,这种连接不记录具体用户。

6 概要文件

概要文件是用于限制数据库使用和实例资源的一组资源限制条件。通过概要文件还可以管理账户状态并对用户的口令进行限制(长度、到期时间等)。每个用户都分配有一个概要文件,而且该用户在指定时间只属于一个概要文件。如果在更改用户概要文件时用户已经登录,则所做的更改在用户下一次登录时才生效。

Default概要文件用作其他所有概要文件的基础。只有当resource_limit初始化参数设置为true,概要文件才能对用户强制实行资源限制,如果该值为false,则忽略概要文件的资源限制,概要文件的口令设置始终会强制执行。

管理员使用概要文件可控制系统资源和密码安全功能:
  • CPU:可按会话或调用限制CPU资源。将cpu/session(CPU/会话)限制为1000表示,如果使用此概要文件的任一会话占用10秒以上的CPU时间(CPU时间限制以百分之一秒为单位),该会话就会收到错误消息并被注销:ORA-02392:exceeded session limit on CPU usage,you are being logged off ,对每个调用所做的限制也起相同作用,但它不是限制用户的整个会话,而是防止任一命令占用过多cpu。如果cpu/call(CPU调用)受到限制,并且用户超出了该限制,则命令会终止,用户将收到如下错误消息:ORA-02393:exceeded call limit on CPU usage .
  • 网络/内存:每个数据库会话都会占用系统内存资源和网络资源(如果会话不是来自服务器的本地用户),可以指定以下参数:
    • 连接时间:指示用户在自动注销前可以保持连接的分钟数;
    • 空闲时间:指示用户会话在自动注销前可以保持空闲的分钟数。只会计算服务器进程的空闲时间,空闲时间不考虑应用程序活动,Idle_time限制不受长时间进行的查询和其他操作的影响;
    • 并行会话:指示使用数据库用户账户可以创建多少并行会话;
    • 专用SGA:限制在系统全局区SGA中执行排序、合并位图等操作所占用的空间量,此限制尽在会话使用共享服务器时才生效;
  • 磁盘I/O:限制用户在每个会话级或每个调用级可读取的数据量。“读取/会话”和“读取/调用”可限制内存和磁盘的总读取次数,这样做可确保执行大量I/O操作的语句不会过度使用内存和磁盘;
  • 账户锁定:如果用户在指定的次数内尝试登录系统失败,系统会在设置的持续时间内自动锁定账户:
    • failed_login_attempts:指定在锁定账户前尝试登录的失败次数;
    • password_lock_time:指定尝试登录失败达到了指定的次数后锁定账户的天数;
  • 口令失效和到期:使用口令具有生存期,口令在此生存期后会到期,必须对其进行更改;
    • password_life_time:确定口令生存期(天),之后该口令就会到期;
    • password_grace_time:指定首次成功登录后更改口令的宽限期(天),之后该口令就会到期;
  • 口令历史记录:通过核对新口令可确保在指定的时间内或在指定的口令更改次数内不重复使用口令;
    • password_reuse_time:指定用户不能在指定天数内重复使用口令;
    • password_reuse_max:指定在可重复使用当前口令之前口令更改需达到的次数;
  • 口令复杂性验证:通过对口令进行复杂性检查可验证口令是否符合特定的规则,这种检查一定要确保口令足够复杂,才能防止入侵者通过猜测口令尝试闯入系统。password_verify_function函数指定一个PL/SQL函数,以便在分配口令之前指定口令复杂性检查。口令验证函数必须由sys用户拥有,而且必须返回布尔值(TRUE或FALSE),位于以下目录中的utlpwdmg.sql脚本提供了模型口令验证函数:
    • Unix和Linux平台:$ORACLE_HOME/rdbms/admin;
    • Windows平台:%ORACLE_HOME% dbmsadmin。
7 空间限额

限额是允许给特定表空间具有的空间,默认情况下,对于任何表空间用户都没有限额,可使用以下三个选项为用户提供表空间限额:
  • 无:允许用户最大限度地使用表空间中的可用空间;
  • 值:用户可以使用的空间(以KB或MB为单位),这并不保证一定会为用户保留该空间,因为,此值可能大于或小于表空间中的当前可用空间;
  • unlimited tablespace系统权限:覆盖所有单独的表空间配额,对于所有表空间(包括system和sysaux),为用户提供无限制的限额,授予此权限时必须谨慎。注:授予resource角色包括授予此权限。




二 权限管理

权限是用户执行特定类型的SQL语句或访问其他用户的对象的一组权限,Oracle DB允许控制用户在数据库中能够(或无法)执行的操作。权限可分为系统权限和对象权限。


1 系统权限

每种系统权限都允许用户执行一个特定的数据库操作或一类数据库操作。例如,创建表空间的权限就是一种系统权限。系统权限可由管理员授予,或者由被显式授权管理权限的用户授予,有170多种不同的系统权限,很多系统权限都包含any子句;

请在授予系统权限之前仔细考虑安全要求,因为某些系统权限通常只授予给管理员:
  • restricted session:使用这个权限可以登录,即使数据库是在受限模式打开的;
  • sysdba和sysoper:使用这两个权限可以在数据库中执行关闭、启动、恢复及其他管理任务。用户使用sysoper可执行基本操作任务,但不能查看用户数据。这个权限包括以下系统权限:
    • startup和shutdown;
    • create spfile;
    • alter database open/mount/backup;
    • alter database archivelog;
    • alter database recover(仅限完全恢复。任何形式的不完全恢复,如until time|change|cancel|controlfile,都需要以sysdba身份建立连接);
    • restricted session;
    • 除此之外,sysdba系统权限还允许执行不完全恢复和删除数据库,用户使用sysdba系统权限可以sys用户身份有效地建立连接;
  • sysasm:使用此权限可以启动、关闭和管理asm实例;
  • drop any object:用户使用drop any权限可删除其他用户拥有的对象;
  • create、manage、drop和alter tablespace:这些权限允许进行表空间管理,包括创建、删除和更改表空间的属性;
  • create library:Oracle DB允许开发人员在PL/SQL内创建和调用外部代码(例如C库),词库必须由数据库中的library对象指定。create library权限允许用户创建可以从PL/SQL执行的任意代码库;
  • create any directory:作为一种安全措施,代码所在的操作系统目录必须链接到一个虚拟Oracle目录对象,使用create any directory权限时,有可能会调用不安全的代码对象。用户使用create any directory权限可以在Oracle软件所有者能够访问的任何目录中创建目录对象(具有读写访问权限),这意味着用户可以访问这些目录中的外部过程。用户可以尝试直接读写任何数据库文件,如数据文件、重做日志和审计日志。确保您的组织采用了安全策略,以防止此类强大的权限被误用;
  • grant any object privilege:使用此权限可以对其他人拥有的对象授予对象权限;
  • alter database和alter system:这些权限的功能很强,可用于修改数据库和Oracle实例,例如,重命名数据文件或刷新缓冲区高速缓存。

2 对象权限

用户可以使用对象权限对特定对象(如表、视图、序列、过程、函数或程序包)执行特定的操作。在没有特定权限的情况下,用户只能访问他们自己拥有的对象,对象权限可以由对象的所有者或管理员授予,也可以由被显式授予了权限,可以为其他人员分配对某个对象的权限的人员授予;

3 权限授予

授予系统权限的SQL语法:grant <system_privilege> to <grantee clause> [with admin option];
授予对象权限的SQL语法:grant <object_privilege> on <object> to <grantee clause> [with grant option]。

4 权限撤销

撤销系统权限的SQL语法:revoke <system_privilege> from <grantee clause>
撤销对象权限的SQL语法:revoke <object_privilege> on <object> from <grantee clause>

注:撤销系统权限不会产生级联影响,撤销与数据操纵语言(DDL)或带有grant option的对象权限时会产生级联影响。



三 角色管理

1 角色概述

角色是一组权限的集合,将角色赋给一个用户或其他角色,这个用户和其他角色就拥有了这个角色中的所有权限。

2 角色的优点

使用角色有以下优点:
  • 简化权限管理:使用角色可简化权限管理,可以将一组权限授予给某个角色,然后将该角色授予给每个用户,而不是将同一组权限授予给多个用户;
  • 进行动态权限管理:如果修改了与某个角色关联的权限,则所有被授予该角色的用户都会立即自动获得修改后的权限;
  • 有选择地提供权限:通过启动或禁用角色可以暂时打开或关闭权限,这样便可以在指定情形下控制用户的权限。

3 角色特性

在大多数系统中,将必要的权限分别授予给每个用户是一项很耗时的工作,而且很容易出错,Oracle软件通过角色提供了简单且受控的权限管理方式,角色是可授予给用户或其他角色的、由相关权限组成的指定组。设计角色是为了简化数据库中的权限管理,从而增强数据库的安全性。角色有以下特性:
  • 角色就像用户,可以授予角色权限或撤销角色权限;
  • 角色就像系统权限一样,可以将其授予给授予用户或其它角色,也可以从用户或其它角色撤销;
  • 角色可以由系统权限和对象权限组成;
  • 可以对授予了某一角色的每个用户启用或禁用该角色;
  • 可能需要口令才能启用角色;
  • 角色不归由任何用户拥有,也不属于任何方案。

4 预定义角色

预定义角色是在数据库安装后,系统自动创建的一些常用的角色,主要看以下预定义角色及其包括的权限:
角色
权限
CONNECT
CREATE SESSION
RESOURCE
CREATE CLUSTER、CREATE PROCEDURE、CREATE SEQUENCE、CREATE OPERATOR、CREATE TRIGGER、CREATE TABLE、CREATE INDEXTYPE、CREATE TYPE
SCHEDULER_ADMIN
CREATE EXTERNAL JOB、EXECUTE ANY CLASS、EXECUTE ANY PROGRAM、CREATE ANY JOB、CREATE JOB、MANAGE SCHEDULER
DBA
大多数系统权限:几个其他角色,不要授予非管理员
SELECT_CATALOG_ROLE
无系统权限:HS_ADMIN_ROLE以及对数据字典的1700多个对象权限;

5 角色管理

参照试验

四 数据字典视图

1 用户相关的数据字典视图
  • dba_users:用户信息;
  • dba_ts_quotas:表空间配额信息;
  • v$session:会话信息;
  • v$open_cursor:用户SQL语句;
2 权限相关的数据字典视图
  • dba_role_privs:授予的角色权限;
  • dba_sys_privs:授予的系统权限;
  • dba_tab_privs:授予的对象权限;
  • dba_col_privs:授予的列权限;
  • role_sys_privs:角色对应的权限;
3 角色相关的数据字典视图
  • role_sys_privs:角色对应的权限信息(预定义角色);
  • role_tab_privs:角色对应的对象信息;
  • dba_roles:定义的角色信息;
  • dba_role_privs:授予的角色权限;
4 查看某个用户所有的权限和角色
select privilege
from dba_sys_privs
where grantee = 'SCOTT'
union
select privilege
from dba_tab_privs
where grantee = 'SCOTT'
union
select privilege
from dba_sys_privs
where grantee in
(select granted_role from dba_role_privs where grantee = 'SCOTT')
union
select privilege
from dba_tab_privs
where grantee in
(select granted_role from dba_role_privs where grantee = 'SCOTT');
原文地址:https://www.cnblogs.com/alen-liu-sz/p/12975648.html