ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 七 保护ORACLE数据库的安全

七 保护ORACLE数据库的安全

原创 Linux操作系统 作者:treesofthehill 时间:2012-04-20 18:06:55 0 删除 编辑

1、  调整默认的安全设置

最小权限原则

1.1   默认的用户

查询用户及用户账号状态

Select username, account_status from dba_users;

SYS, SYSTEM, DBSNMP, SYSMAN 这四个默认账号一般为可用,其他都不可用。

1.2   Public权限

Publicoracle的伪用户。只要为public授予权限,那么所有的用户都会被授予此权限。

取消权限:

Revoke execute on utl_file from public;

1.3   危险的程序包

UTL_FILE:允许用户读写操作系统用户可访问的,运行oracle进程的任何文件和目录。

UTL_TCP:允许用户为了连接网络中所有可访问的地址而打开服务器机器上的tcp端。

UTL_SMTP:允许用户发送邮件信息。

UTL_HTTP:允许用户发送http消息和接收响应。

2、  实例参数

2.1 UTL_FILE_DIR(default: null):允许PLSQL通过UTL_FILE来访问服务器的系统。

2.2 REMOTE_OS_AUTHENT(default: false) AND OS_AUTHENT_PREFIX(default: ops$)

   REMOTE_OS_AUTHENT:控制某个用户是否能够在不需要给出口令的情况下从远程计算机上连接数据库。这个已过时了。

   OS_AUTHENT_PREFIX:操作系统名被映射为oracle用户名之前必须应用这个前缀。

2.3 O7_DICTIONARY_ACCESSIBILITY(default: false):控制使用ANY关键字授予对象权限的效果。

2.4 REMOTE_LOGIN_PASSWORDFILE:控制具有SYSDBA权限的用户是否能够通过网络连接实例。

3、  口令配置文件

口令配置文件是否启用与RESOURCE_LIMIT设置为TRUE无关。这个参数与资源配置文件有关。

3.1 口令配置文件的限制

查询口令配置文件

Select * from dba_profiles where profile=’default’;

口令限制参数

FAILED_LOGIN_ATTEMPS:连接使用不正确口令请求连接的次数达到这个限制后,账户会被锁定。

PASSWORD_LOCK_TIME:账户被锁定的天数。

PASSWORD_LIFE_TIME:提示用户修改口令之前需要经过的天数。

PASSWORD_GRACE_TIME:宽限期。

PASSWORD_REUSE_TIME:需要多长时间才能重用某口令

PASSWORD_REUSE_MAX:口令被重用的次数。

PASSWORD_VERIFY_FUNCTION:对修改的口令进行复杂度检查。

3.2 口令验证功能

   需要执行utlpwdmg.sql命令

3.3创建、指派和修改口令配置文件

示例:

创建口令配置文件

SQL> CREATE PROFILE "STRICT" LIMIT CPU_PER_SESSION DEFAULT

  2  CPU_PER_CALL DEFAULT

  3  CONNECT_TIME DEFAULT

  4  IDLE_TIME DEFAULT

  5  SESSIONS_PER_USER DEFAULT

  6  LOGICAL_READS_PER_SESSION DEFAULT

  7  LOGICAL_READS_PER_CALL DEFAULT

  8  PRIVATE_SGA DEFAULT

  9  COMPOSITE_LIMIT DEFAULT

 10  PASSWORD_LIFE_TIME 14

 11  PASSWORD_GRACE_TIME 3

 12  PASSWORD_REUSE_MAX 1

 13  PASSWORD_REUSE_TIME UNLIMITED

 14  PASSWORD_LOCK_TIME 1/1440

 15  FAILED_LOGIN_ATTEMPTS 2

 16  PASSWORD_VERIFY_FUNCTION DEFAULT

 17  /

 

配置文件已创建

 

指派和修改配置文件

SQL> ALTER USER "TIM" PROFILE "STRICT" PASSWORD EXPIRE;

 

用户已更改。

 

4、  审计

无论策略多么完善,总是存在使用一个策略并不足够的场合。

4.1 SYSDBA审计:为了使雇主相信dba不会滥用权利,有必要对dba进行审计。

   AUDIT_SYS_OPERATIONS参数设置为TRUE,DBA就会被审计,审计的记录会被写入到操作系统的审计追踪。

4.2 数据库审计:能够跟踪特定权限的使用、特定命令的执行、对特定表的访问以及登陆尝试。

   设置AUDIT_TRAIL,就可以使用数据库审计来捕获登陆尝试、系统权限和对象权限的使用以及sql命令的执行。

   使用audit命令配置数据库审计。

   Audit create any trigger;

   使用DBA_AUDIT_TRAIL, DBA_AUDIT_OBJECT, DBA_AUDIT_STATEMENT, DBA_AUDIT_SESSION视图来查看审计记录。

4.3 基于值的审计:使用了触发器。在插入、更新和删除记录时,就会运行一个包括记录事件全部细节的PLSQL代码块。

    使用触发器扑捉这些实际的值。

4.4 细粒度审计(FGA):允许根据所访问的记录来跟踪对表的访问。

需要程序包DBMS_FGA的过程ADD_POLICY

使用视图DBA_FGA_AUDIT_TRAIL查看。

示例:

数据库审计

1、设置audit_trail参数

audit_trail参数是静态的,必须使用scope子句并重启实例

SQL> alter system set audit_trail=db scope=spfile;

 

系统已更改。

SQL> startup force;

ORACLE 例程已经启动。

 

Total System Global Area  532676608 bytes

Fixed Size                  1249968 bytes

Variable Size             234884432 bytes

Database Buffers          289406976 bytes

Redo Buffers                7135232 bytes

数据库装载完毕。

数据库已经打开。

2、创建表和插入表数据

SQL> create table audit_test(name varchar2(20),sal number);

 

表已创建。

 

SQL> insert into audit_test values('mcgraw',100);

 

已创建 1 行。

 

SQL> insert into audit_test values('hill',200);

 

已创建 1 行。

3、开始审计

SQL> audit select, update on system.audit_test;

 

审计已成功。

SQL> select * from audit_test;

 

NAME                        SAL

-------------------- ----------

mcgraw                      100

hill                        200

 

SQL> update audit_test set sal=50 where name='mcgraw';

 

已更新 1 行。

4、查询审计

SQL> select username, userhost, os_username, ses_actions, obj_name from dba_audi

t_trail;

 

USERNAME  USERHOST   OS_USERNAME  SES_ACTIONS  OBJ_NAME

----------    -------------------- -------------------- -------------------- --------------------

SYSTEM  WORKGROUP\CON CON\con     ----SS-----     AUDIT_TEST

 

FGA审计

1、  创建FGA策略

SQL> exec dbms_fga.add_policy(-

> object_schema=>'system',-

> object_name=>'audit_test',-

> policy_name=>'high_sal',-

> audit_condition=>'sal>100',-

> audit_column=>'sal',-

> statement_types=>'select')

 

PL/SQL 过程已成功完成。

2、  开始FGA审计

       SQL> select * from audit_test;

 

NAME                        SAL

-------------------- ----------

mcgraw                       50

hill                        200

 

SQL> select sal from audit_test where name='hill';

 

       SAL

----------

       200

 

SQL> select sal from audit_test where name='mcgraw';

 

       SAL

----------

        50

 

SQL> select name from audit_test;

 

NAME

--------------------

mcgraw

hill

3、  查询审计追踪

       SQL> select os_user,db_user,sql_text from dba_fga_audit_trail;

 

OS_USER                DB_USER         SQL_TEXT

------------------------          ----------    -------------------------------------------------------

CONGTQ-169733AD\congtq  SYSTEM  select * from audit_test

CONGTQ-169733AD\congtq  SYSTEM  select sal from audit_test where name='hill'

4、  取消审计                          

   SQL> noaudit select,update on system.audit_test;

 

审计未成功。

SQL> exec dbms_fga.drop_policy(object_name=>'audit_test',-

> policy_name=>'high_sal');

 

PL/SQL 过程已成功完成。

5、  安全更新

通过EM进行安全补丁的更新(my oracle support –- metalink

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9537053/viewspace-721835/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 八 配置oracle互联
请登录后发表评论 登录
全部评论

注册时间:2008-06-11

  • 博文量
    97
  • 访问量
    173956