115
Oracle RDBMS 安全配置与设计 赵元杰 北京群环域科技有限公司 20122

1. Oracle RDBMS 安全配置与设计(116 页)

Embed Size (px)

Citation preview

Page 1: 1. Oracle RDBMS 安全配置与设计(116 页)

Oracle RDBMS

安全配置与设计

赵元杰

北京群环域科技有限公司

2012年2月

Page 2: 1. Oracle RDBMS 安全配置与设计(116 页)

2/115

内容提要

♠数据安全形势

♠ Oracle 环境安全配置

♠安全设计与设计原则

♠安全策略与安全计划

♠ Oracle 系统用户与口令

♠ Oracle 默认角色与访问控制

♠附录:几个DBA安全脚本

Page 3: 1. Oracle RDBMS 安全配置与设计(116 页)

3/115

IT安全形势

♠ 内部的危险在增长:

♠ 内部危险与Internet危险都增长!

Page 4: 1. Oracle RDBMS 安全配置与设计(116 页)

4/115

数据库泄漏数据情况

♠ Data Breach统计:从数据库泄漏的数据达75%

♠ 数据违规增加

♠ http://www.verizonbusiness.com/resources/security/re

ports/2009_databreach_rp.pdf

Page 5: 1. Oracle RDBMS 安全配置与设计(116 页)

5/115

数据库泄漏数据情况

♠ 信息防泄露的市场规模-IDC估计:

♠ 全球信息泄漏防范市场(IDC 称之为OCC,即Outbound Content Compliance=外泄内容管制 )的总值在2006 年将接近6 亿美元,并以每年约50%的速度增长,2009 年将接近19 亿美元。

Page 6: 1. Oracle RDBMS 安全配置与设计(116 页)

6/115

国内数据安全形势

♠安全目的在变化:

♠十年前的 喜好或显能

♠病毒攻击竞争对手

♠以金钱为目的的数据偷窃

♠现在发展到网络空间战争(CyberWar)

Page 7: 1. Oracle RDBMS 安全配置与设计(116 页)

7/115

数据库泄漏数据情况

♠ Data Breach统计:从数据库泄漏的数据达75%

♠ 《中国IT市场分析与预测2007-2011》中,IDC对用户投资重点调研显示:

♠ “29.8%的用户会考虑投资数据失泄密管理”

Page 8: 1. Oracle RDBMS 安全配置与设计(116 页)

8/115

国内数据安全形势

♠ 数据安全问题:

♠ 2005年,美国爆发了堪称迄今为止最大的金融数据泄密事件,有黑客侵入了为万事达、Visa、AmericanExpress和Discover服务的“信用卡第三方付款处理器”的网络系统,造成4000多万信用卡用户的数据资料被窃。

♠ 2006年2月,UT斯达康工程师程稚瀚利用之前给西藏移动安装系统的机会,盗取了370多万元的移动充值卡,并出售套利。

♠ 2006年6月份,华为公司工程师王林勇利用编写的程序盗取了70多万元的移动充值卡。

♠ 从2006年8月至2007年4月,四川省某学院综合教务管理网络化系统被黑客入侵,电脑管理系统中有130余名学生多达302科学习成绩被黑客非正常改动。

Page 9: 1. Oracle RDBMS 安全配置与设计(116 页)

9/115

国内数据安全形势

♠对安全的误区:

♠使用防火墙和入侵检测设备,网站安全了

♠安装了最新系统和数据库补丁, 网站和数据库可以不被攻击

♠使用防篡改软件,网站一定安全

♠数据库位于内网,一般不会被攻击

♠安装了防病毒软件,网站就不被攻击

♠网站被攻击了, 请马上帮我清掉我就万事大吉

Page 10: 1. Oracle RDBMS 安全配置与设计(116 页)

10/115

内容提要

♠数据安全形势

♠ Oracle 环境安全配置

♠安全设计与设计原则

♠安全策略与安全计划

♠ Oracle 系统用户与口令

♠ Oracle 默认角色与访问控制

♠附录:几个DBA安全脚本

Page 11: 1. Oracle RDBMS 安全配置与设计(116 页)

11/115

Oracle软件与存储

♠ Oracle数据库系统:

♠ $ORACLE_HOME :

♠路径与空间预留/u01/app/oracle/product/

♠ $ORACLE_BASE :

♠路径与空间预留/u01/app/oracle

♠ $LD_LIBRARY_PATH :

♠路径/u01/app/oracle/product/11.2.0/lib

♠ $NLS_LANG :

♠ american_america.US7ASCII

♠ DBA :

♠ /u01/app/oracle/admin

Page 12: 1. Oracle RDBMS 安全配置与设计(116 页)

12/115

Oracle 系统组

♠ Oracle数据库系统:

♠ ORA_ALL:所有用户运行访问ORACLE_HOME

♠ ORADBA: 映射到 OSDBA role.

♠ ORAOPER:映射到 OSOPER role.

♠ ORASTARTUP: 用户可启动实例(instance).

♠ ORAOWNER:用户可访问整个操作系统文件.

♠不考虑复杂配置,则只创建 :

♠ ORADBA

Page 13: 1. Oracle RDBMS 安全配置与设计(116 页)

13/115

Oracle 系统组的层次

ORA_ALL -750

ORASTARTUP- 6710

ORAOPER ORAOWNER-775

ORADBA

Page 14: 1. Oracle RDBMS 安全配置与设计(116 页)

14/115

Oracle 系统OS安全配置

♠ Oracle 系统路径的外部访问:

♠ utl_file配置 :

♠ revoke execute on utl_file from public;

♠设置 utl_file_dir 参数值应为空

♠禁用“匿名登录”oracle ,关键是口令文件:

♠ orapwd

file=/u01/oracle/product/10.2.0/db_1/dbs/orapworcl

password=oracle

♠ sqlnet.ora文件加内容:

#SQLNET.AUTHENTICATION_SERVICES=(NONE)

Page 15: 1. Oracle RDBMS 安全配置与设计(116 页)

15/115

Oracle 系统监听连接配置

♠ Listener.ora配置:

♠禁止

♠外部

♠口令配置:

♠口令设置

♠口令修改

Page 16: 1. Oracle RDBMS 安全配置与设计(116 页)

16/115

Oracle 系统与端口

♠ Oracle 系统端口安全:

♠ iSQL*Plus 在11g不推荐使用

♠禁止从9i/10g 使用 iSQL*Plus

♠用防火墙关闭不须要的任何端口 :

♠ 1)命令提示符下打 :

♠ echo 1 > /proc/sys/net/ipv4/icmp_ignore_all

♠ 2)用防火墙禁止(或丢弃) icmp 包

♠ iptables -A INPUT -p icmp -j DROP

Page 17: 1. Oracle RDBMS 安全配置与设计(116 页)

17/115

Linux本身安全配置

♠ 1.常看Linus系统安全记录:

♠ #more/var/log/secure|greprefused”来检查系统所受到的攻击

♠对策:如使用SSH来替换 Telnet/rlogin等

♠ 2.登录安全性 :

♠避免口令简单化

♠注释掉不需要的用户和用户组

♠限制su命令 -编辑/etc/pam.d/su文件 :

♠ authsufficient/lib/security/pam_rootok.sodebug

♠ authrequired/lib/security/pam_wheel.sogroup=isd

Page 18: 1. Oracle RDBMS 安全配置与设计(116 页)

18/115

Linux本身安全配置

♠ 3.限制网络访问 :

♠ 不允许root写权限 -编辑文件/etc/exports并加入 :

♠ /dir/to/exporthost1.mydomain.com(ro,root_squash)

♠ /dir/to/exporthost2.mydomain.com(ro,root_squash)

♠ 登录终端设置 -编辑/etc/securetty且注释掉如下的行 :

♠ tty1

♠ #tty2

♠ #tty3

♠ #tty4

♠ #tty5

♠ #tty6

Page 19: 1. Oracle RDBMS 安全配置与设计(116 页)

19/115

Linux本身安全配置

♠ 4.防止攻击 :

♠ 阻止ping -/etc/rc.d/rc.local文件中增加 :

♠ #echo1>/proc/sys/net/ipv4/icmp_echo_ignore_all

♠ 防止IP欺骗 -编辑host.conf文件并增加 :

♠ orderbind,hosts

♠ multioff

♠ Nospoofon

♠ 防止DoS攻击 -/etc/security/limits.conf中添加如下几行 :

♠ *hardcore0

♠ *hardrss5000

♠ *hardnproc20

♠ …

Page 20: 1. Oracle RDBMS 安全配置与设计(116 页)

20/115

Linux本身安全配置

♠ 5.内核参数调整 :

♠ #vi/etc/sysctl.conf

♠ sysctl-wnet.ipv4.conf.default.accept_source_route=0

♠ sysctl-wnet.ipv4.icmp_echo_ignore_broadcasts=1

♠ #sysctl-wnet.ipv4.icmp_echo_ignore_all=1

♠ sysctl-wnet.ipv4.icmp_ignore_bogus_error_responses=1

♠ sysctl-wnet.ipv4.ip_conntrack_max=65535

♠ sysctl-wnet.ipv4.tcp_syncookies=1

♠ sysctl-wnet.ipv4.tcp_syn_retries=1

♠ sysctl-wnet.ipv4.tcp_fin_timeout=5

♠ sysctl-wnet.ipv4.tcp_synack_retries=1

♠ sysctl-wnet.ipv4.tcp_syncookies=1

♠ sysctl-wnet.ipv4.route.gc_timeout=100

♠ sysctl-wnet.ipv4.tcp_keepalive_time=500

♠ sysctl-wnet.ipv4.tcp_max_syn_backlog=10000

Page 21: 1. Oracle RDBMS 安全配置与设计(116 页)

21/115

Oracle 系统安全配置

♠ Oracle 系统配置:

♠禁止外部访问( sysdba要确保参数为 FALSE ) :

♠ remote_os_authent = false

♠ o7_dictionary_accessibility=false

♠启用“口令配置文件和资源配置文件” :

♠ alter system set resource_limit=true;:

Page 22: 1. Oracle RDBMS 安全配置与设计(116 页)

23/115

内置包与授权建议

♠ Oracle 9i/10g版本下面包不要轻易授权一般用户:

♠ UTL_SMTP

♠ UTL_TCP

♠ UTL_HTTP

♠ UTL_FILE

♠ DBMS_OBFUSCATION_TOOLKIT

♠ DBMS_RANDOM

♠ DBMS_CDC_PUBLISH

♠ Oracle 11g已经不允许从外部来使用:

♠ UTL_TCP, UTL_SMTP, UTL_MAIL, UTL_HTTP等

Page 23: 1. Oracle RDBMS 安全配置与设计(116 页)

24/115

内置包使用与授权建议

♠撤销将内置包授予Public 公共帐号

♠撤销 Public 权限样例

SQL> show USER User is SYSTEM

SQL> REVOKE execute ON utl_file FROM PUBLIC;

Page 24: 1. Oracle RDBMS 安全配置与设计(116 页)

25/115

内置包使用与授权建议

♠撤销将内置包授予Public 公共帐号

♠撤销 Public 权限样例

SQL> show USER User is SYSTEM

SQL> revoke execute on utl_http from public force;

SQL> revoke execute on utl_tcp from public force;

SQL> revoke execute on utl_file from public force;

SQL> revoke execute on utl_inaddr from public force;

SQL> revoke execute on utl_smtp from public force;

SQL> revoke execute on utl_dbws from public force;

SQL> revoke execute on dbms_lob from public force;

SQL> revoke execute on dbms_random from public force;

SQL> revoke execute on dbms_obfuscation_toolkit from public force;

Page 25: 1. Oracle RDBMS 安全配置与设计(116 页)

26/115

内置包使用与授权建议

♠撤销将内置包授予Public 公共帐号

♠撤销 Public 权限样例

SQL> show USER User is SYSTEM

SQL> revoke execute on dbms_crypto_toolkit from public force;

SQL> revoke execute on dbms_advisor from public force;

SQL> revoke execute on dbms_ldap from public force;

SQL> revoke execute on dbms_ldap_utl from public force;

SQL> revoke execute on dbms_job from public force;

SQL> revoke execute on dbms_scheduler from public force;

SQL> revoke execute on dbms_ddl from public force;

SQL> revoke execute on dbms_epg from public force;

SQL> revoke execute on dbms_xmlgen from public force;

SQL> revoke execute on dbms_aw_xml from public force;

SQL> revoke execute on ctxsys.drithsx from public force;

SQL> revoke execute on ordsys.ord_dicom from public force;

Page 26: 1. Oracle RDBMS 安全配置与设计(116 页)

27/115

内置包使用与授权建议

♠ dbms_sql包在10g的处理

♠ 11g及以上已经修正

SQL> show USER User is SYS

SQL> create role ROLE_DBMSSQL;

SQL> grant execute on dbms_sql to ROLE_DBMSSQL;

SQL> spool grantdbmssql.sql

SQL> select distinct 'grant ROLE_DBMSSQL to "'||owner||'";' from

all_dependencies where referenced_name = 'DBMS_SQL' and owner not

in ('PUBLIC');

SQL> spool off

SQL> @grantdbmssql

SQL> revoke execute on dbms_sql from PUBLIC;

Page 27: 1. Oracle RDBMS 安全配置与设计(116 页)

28/115

企业Oracle 安全问题分析

♠企业安全问题分析 :

♠ System level privileges

♠ Application level privileges

♠ Data access privileges

♠ Object creation issues (structural changes)

♠ Oracle network issues and access

♠ Oracle安全问题分析 :

♠ Configurations

♠ Permissions

♠ Bugs(查询Metalink网站)

Page 28: 1. Oracle RDBMS 安全配置与设计(116 页)

29/115

企业Oracle 安全问题分析

♠如何剥开Oracle安全:

♠ ALL PRIVILEGES granted

♠ ALTER USER privilege

♠ EXECUTE ANY PROCEDURE

♠是否可执行公共包,如:

♠ CTXSYS.DRILOAD.VALIDATE_STMT(黑客借助这个包进行远程SQL Injections)—补丁或Drop user

CTXSYS

♠ DBMS_METADATA.GET_DDL

Page 29: 1. Oracle RDBMS 安全配置与设计(116 页)

30/115

企业Oracle 安全问题分析

♠ Internet:

♠ 是否存在多个默认端口处于打开,如:

♠ 外部调用或80端口

♠ 是否存在攻击的弱点

♠ Internet攻击?,如:

♠ Oracle XE 版本 ?

♠ 文件系统:

♠ 存在多种方法访问文件系统,如:

♠ UTL_FILE,DBMS_BACKUP_RESTORE, EMD_SYSTEM,

♠ DBMS_LOB, DBMS_NAMESPACE, DBMS_SCHEDULER, Java

(超过40种) …

♠ 查询带有FILE的包、存储过程、函数等

Page 30: 1. Oracle RDBMS 安全配置与设计(116 页)

31/115

企业Oracle 安全问题分析

♠搜索存在安全的范围(Google, Yahoo!,

Metalink):

♠如:http://johnny.ihackstuff.com – includes a

Google hacking database

♠ Oracle reports, Forms, OEM, iSQL*Plus

♠可能找到Oracle系统口令?

♠有些站点暴露listeners

♠检查自己的站点

Page 31: 1. Oracle RDBMS 安全配置与设计(116 页)

32/115

企业Oracle 安全问题分析

♠ Oracle口令的攻破问题:

♠可从网上找到相关攻破软件,如orabf:

♠ http://www.toolcrypt.org/index.html?orabf

♠ 1,100,000 hashes per second on 2.8ghz Pentium 4

♠现在版本 0.7.5

♠真的可攻破口令: SQL> alter user scott identified by gf4h7;

User altered.

SQL> select password from dba_users where username='SCOTT';

PASSWORD

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

EF2D6ED2EDC1036B

D:\orabf>orabf EF2D6ED2EDC1036B:SCOTT –c 3 –m 5

orabf v0.7.2, (C)2005 [email protected]

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

Trying default passwords

Starting brute force session

press 'q' to quit. any other key to see status

password found:SCOTT:GF4H7

29307105 passwords tried. elapsed time 00:00:40. t/s:715700

SQL> alter user scott identified by gf4h7;

User altered.

SQL> select password from dba_users where username='SCOTT';

PASSWORD

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

EF2D6ED2EDC1036B

D:\orabf>orabf EF2D6ED2EDC1036B:SCOTT –c 3 –m 5

orabf v0.7.2, (C)2005 [email protected]

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

Trying default passwords

Starting brute force session

press 'q' to quit. any other key to see status

password found:SCOTT:GF4H7

29307105 passwords tried. elapsed time 00:00:40. t/s:715700

Page 32: 1. Oracle RDBMS 安全配置与设计(116 页)

33/115

企业Oracle 安全问题分析

♠ Oracle存在安全问题:

♠如iSQL*Plus:

♠ 11g不支持了

Page 33: 1. Oracle RDBMS 安全配置与设计(116 页)

34/115

内容提要

♠数据安全形势

♠ Oracle 环境安全配置

♠安全设计与设计原则

♠安全策略与安全计划

♠ Oracle 系统用户与口令

♠ Oracle 默认角色与访问控制

♠附录:几个DBA安全脚本

Page 34: 1. Oracle RDBMS 安全配置与设计(116 页)

35/115

设计阶段的重要性

♠数据库安全设计忽视问题:

♠计算机安全=防病毒+防火墙?

♠数据=资产?数据安全被忽略!

♠防火墙被攻破=可见;遭病毒攻击可见;数据被拷贝多次=没有见数据少!

♠数据库安全 :权限授予通病:随时需要随时授予,撤销权限很少关注

♠多次的权限授予与修补,最后DBA也搞不清楚哪些用户有哪些权限或不该拥有哪些权限

Page 35: 1. Oracle RDBMS 安全配置与设计(116 页)

36/115

设计阶段的重要性

♠数据库设计很重要:

♠安全设计也经过下面阶段

系统生命器的阶段

数据库与规范

应用

Page 36: 1. Oracle RDBMS 安全配置与设计(116 页)

37/115

哪个阶段是最关键!

Program Code

60.0%

Design

20.0%

Database

17.5%

System

2.5%

Page 37: 1. Oracle RDBMS 安全配置与设计(116 页)

38/115

设计阶段忽视导致修改困难多

Design

65%

Database

15%

System

5%

Program Code

15%

The program code problems are pretty easy to fix,

however design issues are the most difficult to repair.

Page 38: 1. Oracle RDBMS 安全配置与设计(116 页)

39/115

设计的低劣带来维护代价高

$

Plan Analyze Design Develop Accept

Page 39: 1. Oracle RDBMS 安全配置与设计(116 页)

40/115

设计原则(Design Principles)

♠ 1.最小权限原则(Principle of least Privilege)

♠ 为了完成任务而需要的权限,就是指给人们最低水平的用户权限,但他们仍然能进行他们的工作。

♠ 这一原则也适用于事物,包括程序和进程,如:

♠服务进程应该在用户闲置时运行

♠ 2.自动故障预防原则(Principle of fail-Safe Defaults)

♠ 除非给出访问对象说明,一般是不能访问,如:

♠系统管理员只能访问与管理有关的子系统;

♠当一个应用涉及它的对象时出现失败,则该程序应该该以安全的方法离开系统。

Page 40: 1. Oracle RDBMS 安全配置与设计(116 页)

41/115

设计原则(Design Principles)

♠ 3.经济的原则机制(Principle of Economy of Mechanism)

♠安全机制应尽量简单化:

♠减少复杂意味着减少攻击者的打开

♠ 4.完整的仲裁原则(Principle of Complete Mediation)

♠所有对象的访问都应该允许检查:

♠检查应该做的每个交易,不要只是启动程序时检查;

♠小心隐藏的结果。

Page 41: 1. Oracle RDBMS 安全配置与设计(116 页)

42/115

设计原则(Design Principles)

♠ 5.开放的设计原则 (Principle of Open Design)

♠安全机制不该与设计保密或实现有关,如:

♠如DVD 加密方法。

♠ 6.权限分开原则 (Principle of Separation of

Privilege)

♠一个系统不该对单个条件授予许可,如:

♠有些UNIX系统,将用户变为root 需要的口令机制,这样该用户就属于一个特殊的组 。

Page 42: 1. Oracle RDBMS 安全配置与设计(116 页)

43/115

设计原则(Design Principles)

♠ 7.普通机制最小化原则 (Principle of Least

Common Mechanism)

♠用于访问资源的机制不该共享,如:

♠所有系统使用同一个操作系统,在自己的虚拟机里有拷贝。

♠ 8.可接受原则 (Principle of Psychological

Acceptability)

♠安全机制不应该成为访问资源的障碍。

Page 43: 1. Oracle RDBMS 安全配置与设计(116 页)

44/115

内容提要

♠数据安全形势

♠ Oracle 环境安全配置

♠安全设计与设计原则

♠安全策略与安全计划

♠ Oracle 系统用户与口令

♠ Oracle 默认角色与访问控制

♠附录:几个DBA安全脚本

Page 44: 1. Oracle RDBMS 安全配置与设计(116 页)

45/115

安全策略与安全计划

♠安全策略与安全计划

♠公司需要安全策略与安全计划,要点什么?

♠安全策略与安全计划可满足公司内需要

♠公司每人都希望有一个坚固的安全策略

♠各项限制是清晰的,员工容易理解的简明规则,如:

♠吃饭前要退出系统

♠任何人不得共享口令

♠不能从家将软件带到工作机器上

Page 45: 1. Oracle RDBMS 安全配置与设计(116 页)

46/115

安全策略与安全计划

♠安全策略与安全计划

♠为了实现有意义的策略,必须提交管理的最高层,以确保机制的强制执行,安全策略可规定为:

♠任何员工不安全地离开计算机将受到处罚

♠任何员工共享一个口令将被暂停一天

♠在个人计算机上发现无许可软件(Unlicensed software)将被删除并该机器的个人将被告发

Page 46: 1. Oracle RDBMS 安全配置与设计(116 页)

47/115

安全管理注意事项

♠ 安全管理:一旦选择安全管理,则公司内每个员工或团队内的员工都需要成为定义的策略

♠ 制定安全策略要根据企业需求,没有“放之四海而皆准“安全策略

♠ 理清:

♠ 1)安全策略

♠ 2)安全策略实施

♠ 3)数据库中数据

♠ 当前你的系统提供技术与实现

Page 47: 1. Oracle RDBMS 安全配置与设计(116 页)

48/115

识别关键的成分

♠ 推荐采用电子表格展开企业内的安全计划,例如: ♠ 策略包括公司内每个分割

♠ 每个分割的平台

♠ 每个平台数据库及其功能(开发、测试、产品)

♠ 每个数据库的支持

♠ 应用的主人,个人负责的应用

♠ 每个应用(如角色或授权者)需要的安全控制

♠ 用户名与口令的构成

♠ 可访问的类型(telnet,C/S或外部验证)

♠ 授权表格的认可(电子授权、口头、emial,硬件拷贝或WWW)

♠ 个人授权在每个应用中创建

♠ 数据库可用性

♠ 需要审计的类型

♠ 谁在运行审计

♠ 如何运行审计

Page 48: 1. Oracle RDBMS 安全配置与设计(116 页)

49/115

安全计划表格

♠安全计划表格

♠ 实际情况要复杂得多,但方法一样:

项目 Database A Database B Database C

平台划分 Windows NT (Div. X) Digital UNIX (Div. Y) OpenVMS (Div. Z)

数据库/SID 名 larry/lar1 curly/cur2 moe/moe1

Port/listener 1521/lar1 1521/cur2 1521/moe1

应用程序 Accounts Payable

应付款

Human Resources

人力资源

办公设备位置

应用主人 H. Brown 人 事主管 设备管理员

用户名 用户定义 First initial/last name 3个字母, 2 数字

Page 49: 1. Oracle RDBMS 安全配置与设计(116 页)

50/115

安全计划表格

♠安全计划表格 (续):

项目 Database A Database B Database C

口令 用户定义 2 字母, 1 数字, 1 标点符号, 3 个字母

任何字母数字及标点符号组合, 可达 8 个

访问类型 C/S 登录到应用然后应用连接数据库

telnet平台直接连接数据库

授权方式 Email 纸质HR签字 电话通知

个人创建账户 应用DBA HR安全职员 数据库DBA

审计类型 连接数据库 连接数据库,SELECT

FROM salary table

Page 50: 1. Oracle RDBMS 安全配置与设计(116 页)

51/115

安全计划表格

♠安全计划表格 (续):

项目 Database A Database B Database C

备份表格 夜间导出,非归档 每周文件级备份

启用归档,夜间导出

夜间导出,非归档

恢复过程 重建数据库与导入 按照恢复文档进行恢复 重建数据库与导入

数据库可用性

周1~周5 :7:30-18:00 每周7x24小时 周1~周5 :7:30-

18:00

审计员 应付款管理员 HR安全职员 N/A

角色需求 ap_clerk

ap_manager

hr_clerk、hr_developer

hr_manager

备份表格 夜间导出,非归档 每周文件级备份

启用归档,夜间导出

夜间导出,非归档

Page 51: 1. Oracle RDBMS 安全配置与设计(116 页)

52/115

安全计划表格

♠安全计划表格 (续):

项目 Database A Database B Database C

授权需求 CREATE SESSION,SELECT

FROM ap tables,

INSERT/UPDATE ON ap

tables (clerk, manager)

DELETE FROM ap tables (mgr

only)

CREATE SESSION, SELECT on

tables (clerk)

INSERT/UPDATE specific tables

(clerk)

SELECT, INSERT, UPDATE,

DELETE on all tables (manager)

CREATE TABLEs, TRIGGERs,

PROCEDUREs,(developer)

CREATE SESSION,

SELECT, INSERT,

UPDATE, DELETE ON

ANY TABLE

加密 关键表数据加密 表空间加密 数据导出加密?

防火墙

入侵检测

物理资产

Page 52: 1. Oracle RDBMS 安全配置与设计(116 页)

53/115

访问矩阵

♠访问矩阵一般为:

Table

Forms(窗口)

种类

categorie

s

客户

customers

员工

employee

s

订货详细

Orders

details

订货

orders

供应商

suppliers

产品

products

Categories CRUD

Customer

tables

R

Customers CRUD

Orders R R CRUD RU

employees CRUD CRUD

supplies CRUD

products CRUD

C=Create or Insert a record(row)

R=Read/Query or Select a row

U=Update or Modify

D=Delete

Page 53: 1. Oracle RDBMS 安全配置与设计(116 页)

54/115

♠ DAC(自主式访问控制)

与 MAC(强制访问控制)

♠ 访问矩阵模型:

♠ 特许状态( Authorized

state ): Q = (S, O, A)

♠ 条件 (依赖于)

♠ Data

♠ Time

♠ Context

♠ History

O1 Oj Om

S1 A[S1,O1] A[S1,Oj]

A[S1,Om]

Si A[Si,O1]

A[Si,Oj]

A[Si,Om]

Sn A[Sn,O1]

A[Sn,Oj]

A[Sn,Om]

Subjects(主体) Objects(客体)

安全计划

S =subjects(主体安全许可)

O=object ( 安全类别 )

A =access operations(操作访问 )

Page 54: 1. Oracle RDBMS 安全配置与设计(116 页)

55/115

安全建模

♠按照用户与对象需要对应关系列表

♠ 根据用户名称与对象列表:

Page 55: 1. Oracle RDBMS 安全配置与设计(116 页)

56/115

对象与角色许可对应表

Database Object Agent role Manager role

Tables

Agents

ContactReason

CustAgentList

Customers

LicenseStatus

Listings

Properties

SaleStatus

Select

Select

All

All

Select?

All

All

Select

All

All

All

All

All

All

All

All

Forms

AgentContacts

AgentListings

Agents

ContactReason

Customers

LicenseStatus

ListingActivity

Listings

Management

Properties

SaleStatus

Search4

Startup

All

All

None

None

All

None

All

All

None

All

None

All

All

All

All

All

All

All

All

All

All

All

All

All

All

All

Database Object Agent role Manager role

Reports

AgentSales

CustomerList

ListingsAndOffers

SalesByCityAndAgent

SalesByMonthAndAgen

t

Maybe for

self

All

All

Maybe for

self

Maybe for

self

All

All

All

All

All

Page 56: 1. Oracle RDBMS 安全配置与设计(116 页)

57/115

角色的使用对应表

♠对象与权限对照表-1.初步的规划

Page 57: 1. Oracle RDBMS 安全配置与设计(116 页)

58/115

角色的使用对应表

♠采用对象与权限对照表-2.将用户分组

Page 58: 1. Oracle RDBMS 安全配置与设计(116 页)

59/115

数据库角色定义

♠每个数据库定义角色-3.根据组创建角色

♠ 统一的,无二义性的名称与权限:

角色名称 权限 用户

Page 59: 1. Oracle RDBMS 安全配置与设计(116 页)

60/115

内容提要

♠数据安全形势

♠ Oracle 环境安全配置

♠安全设计与设计原则

♠安全策略与安全计划

♠ Oracle 系统用户与口令

♠ Oracle 默认角色与访问控制

♠附录:几个DBA安全脚本

Page 60: 1. Oracle RDBMS 安全配置与设计(116 页)

61/115

账户类型

♠ Oracle系统账户类型为(数据中心建议):

♠ DBA账户

♠安全管理员(Security Manager)

♠应用管理员(Application Manager)

♠网络管理员(Network Manager)

♠应用账户(Application Schema (User) Accounts)

♠普通用户(General User Accounts)

Page 61: 1. Oracle RDBMS 安全配置与设计(116 页)

62/115

用户与表空间

♠ Oracle系统表空间的规划:

♠应用系统使用的永久表空间的规划

♠应用系统使用的永久表空间的创建

♠应用系统使用的临时表空间规划与创建

♠ Oracle系统用户创建:

♠创建用户从规划设计文档中来

♠创建用户时要指定口令的管理选项

♠创建用户时要指定永久表空间

♠创建用户时要指定临时表空间

Page 62: 1. Oracle RDBMS 安全配置与设计(116 页)

63/115

用户与资源限制

PROFILE 子句: 用于限制数据库资源和口令策略 ,例如: CREATE PROFILE app_user LIMIT

SESSIONS_PER_USER UNLIMITED

CPU_PER_SESSION UNLIMITED

CPU_PER_CALL 3000

CONNECT_TIME 45

LOGICAL_READS_PER_SESSION DEFAULT

LOGICAL_READS_PER_CALL 1000

PRIVATE_SGA 15K

COMPOSITE_LIMIT 5000000;

CREATE USER sidney

IDENTIFIED BY out_standing1

DEFAULT TABLESPACE demo

QUOTA 10M ON demo

TEMPORARY TABLESPACE temp

QUOTA 5M ON system

PROFILE app_user

PASSWORD EXPIRE;

Page 63: 1. Oracle RDBMS 安全配置与设计(116 页)

64/115

保护默认账户

♠ Oracle系统有20多个默认账户:

♠修改默认口令,即使在安装时输入了口令;使用也要采用更健壮的口令

♠建立不可能猜中的密码

♠创建触发器,捕获登录机制

♠可能要取消connect和resource角色

♠对帐号实行锁定,只要多次口令失败等都要锁定

Page 64: 1. Oracle RDBMS 安全配置与设计(116 页)

65/115

Oracle用户密码

♠ Oracle系统用户密码:

♠采用Oracle本地验证方法(不建议OS验证口令)

♠检查弱密码或默认密码

♠密码的复杂化,如采用sys内函数来验证等

♠密码的规范化,如(创建安全的Profile来检查):

♠密码生存期

♠密码重复使用时间

♠登录失效

♠帐号锁定

♠密码验证函数

Page 65: 1. Oracle RDBMS 安全配置与设计(116 页)

66/115

Oracle用户密码

♠ Oracle 系统用户密码:

♠基本标准:

CREATE PROFILE

strong_pwd LIMIT

PASSWORD_LIFE_TIME 90

PASSWORD_GRACE_TIME 15

PASSWORD_REUSE_TIME 180

PASSWORD_REUSE_MAX_UNLIMIED

FAILED_LOGIN_ATTEMPTS 5

PASSWORD_LOCK_TIME .5

PASSWORD__VERIFY_FUNCTION is_password_strong

/

CREATE PROFILE

strong_pwd LIMIT

PASSWORD_LIFE_TIME 90

PASSWORD_GRACE_TIME 15

PASSWORD_REUSE_TIME 180

PASSWORD_REUSE_MAX_UNLIMIED

FAILED_LOGIN_ATTEMPTS 5

PASSWORD_LOCK_TIME .5

PASSWORD__VERIFY_FUNCTION is_password_strong

/

Page 66: 1. Oracle RDBMS 安全配置与设计(116 页)

67/115

内容提要

♠数据安全形势

♠ Oracle 环境安全配置

♠安全设计与设计原则

♠安全策略与安全计划

♠ Oracle 系统用户与口令

♠ Oracle 默认角色与访问控制

♠附录:几个DBA安全脚本

Page 67: 1. Oracle RDBMS 安全配置与设计(116 页)

68/115

Oracle默认角色

♠ Oracle 系统默认角色不同版本不一样多:

♠基本默认角色-CONNECT:

SELECT PRIVILEGE

FROM dba_sys_privs

WHERE grantee = 'CONNECT';

PRIVILEGE

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

CREATE VIEW

CREATE TABLE

ALTER SESSION

CREATE CLUSTER

CREATE SESSION

CREATE SYNONYM

CREATE SEQUENCE

CREATE DATABASE LINK

SELECT PRIVILEGE

FROM dba_sys_privs

WHERE grantee = 'CONNECT';

PRIVILEGE

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

CREATE VIEW

CREATE TABLE

ALTER SESSION

CREATE CLUSTER

CREATE SESSION

CREATE SYNONYM

CREATE SEQUENCE

CREATE DATABASE LINK

Page 68: 1. Oracle RDBMS 安全配置与设计(116 页)

69/115

Oracle默认角色

♠ Oracle 系统默认角色不同版本不一样多:

♠基本默认角色-RESOURCE:

SQL> SELECT PRIVILEGE

2 FROM dba_sys_privs

3 WHERE grantee = 'RESOURCE';

PRIVILEGE

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

CREATE TRIGGER

CREATE SEQUENCE

CREATE TYPE

CREATE PROCEDURE

CREATE CLUSTER

CREATE OPERATOR

CREATE INDEXTYPE

CREATE TABLE

已选择8行。

SQL> SELECT PRIVILEGE

2 FROM dba_sys_privs

3 WHERE grantee = 'RESOURCE';

PRIVILEGE

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

CREATE TRIGGER

CREATE SEQUENCE

CREATE TYPE

CREATE PROCEDURE

CREATE CLUSTER

CREATE OPERATOR

CREATE INDEXTYPE

CREATE TABLE

已选择8行。

Page 69: 1. Oracle RDBMS 安全配置与设计(116 页)

70/115

Oracle默认角色

♠ Oracle 系统默认角色-DBA:

♠授予DBA角色是遵循最多权限的原则,如:

♠撤销授予默认角色的所有权限。不要给用户授予过多的角色,如DBA角色。

♠删除默认角色,要查阅原版文档。

♠不要授予用户DBA、CONNECT或者RESOURCE角色。

Page 70: 1. Oracle RDBMS 安全配置与设计(116 页)

71/115

Oracle公共权限

♠ Oracle 系统public用户:

♠ PUBLIC 方便用户的授权

♠ 很难知道给PUBLIC授予权限是否带来安全风险

♠ 当在开发应用时,需要谨慎地决定给PUBLIC授予什么样的权限—如果需要授予权限的话

♠应用中public用户:

♠ 程序中的PUBLIC权限

SELECT table_name

FROM dba_tab_privs

WHERE grantee = 'PUBLIC'

AND owner = 'SYS'

AND PRIVILEGE = 'EXECUTE'

AND table_name LIKE 'DBMS%'

OR table_name LIKE 'UTL%'

ORDER BY 1;

SELECT table_name

FROM dba_tab_privs

WHERE grantee = 'PUBLIC'

AND owner = 'SYS'

AND PRIVILEGE = 'EXECUTE'

AND table_name LIKE 'DBMS%'

OR table_name LIKE 'UTL%'

ORDER BY 1;

Page 71: 1. Oracle RDBMS 安全配置与设计(116 页)

72/115

Oracle系统访问限制- PRODUCT_USER_PROFILE

♠ PRODUCT_PROFILE使用场合 :

♠ 非常喜欢学习的初学者:可能在具有实际应用的Oracle系统上学习各种SQL命令

♠ 在应用环境上学习各种SQL命令非常危险,可能学习DROP TABLE看看!

♠ 无意间可能删除了个别应用系统对象

♠ PRODUCT_PROFILE使用:

♠ 禁止一些业务系统的数据库用户执行sqlplus命令 SQL命令

♠ 具体现在SQL*Plus部分命令、SQL部分命令、PL/SQL的BEGIN,DECLARE命令

Page 72: 1. Oracle RDBMS 安全配置与设计(116 页)

73/115

Oracle系统访问限制- PRODUCT_USER_PROFILE

♠ 在11g版本-默认已经安装

♠ PRODUCT_USER_PROFILE

C:\>sqlplus system/Zhaoyuan123

SQL*Plus: Release 11.2.0.1.0 Production on 星期二 4月 19 09:33:36 2011

Copyright (c) 1982, 2010, Oracle. All rights reserved.

连接到:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> desc PRODUCT_USER_PROFILE

名称 是否为空? 类型

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

PRODUCT NOT NULL VARCHAR2(30)

USERID VARCHAR2(30)

ATTRIBUTE VARCHAR2(240)

SCOPE VARCHAR2(240)

NUMERIC_VALUE NUMBER(15,2)

CHAR_VALUE VARCHAR2(240)

DATE_VALUE DATE

LONG_VALUE LONG

SQL> select * from product_user_profile;

未选定行

Page 73: 1. Oracle RDBMS 安全配置与设计(116 页)

74/115

Oracle系统访问限制- PRODUCT_USER_PROFILE

♠ 在11g版本-默认已经安装

♠ PRODUCT_USER_PROFILE

/*

SQL> conn / as sysdba

Connected.

SQL> @?/sqlplus/admin/pupbld.sql

*/

SQL> desc product_user_profile

Name Null? Type

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

PRODUCT NOT NULL VARCHAR2(30) -- 产品名称,如"SQL*Plus"

USERID VARCHAR2(30) -- 被禁止的用户名

ATTRIBUTE VARCHAR2(240) --被禁止的命令,如"delete"

SCOPE VARCHAR2(240) --NULL

NUMERIC_VALUE NUMBER(15,2) --NULL

CHAR_VALUE VARCHAR2(240) --禁用时值应为"DISABLED"

DATE_VALUE DATE --NULL

LONG_VALUE LONG --NULL

Page 74: 1. Oracle RDBMS 安全配置与设计(116 页)

75/115

Oracle系统访问限制- PRODUCT_USER_PROFILE

♠ 在11g版本-默认已经安装

♠ 1.向product_user_profile 插入现在DELETE操作的值

SQL> insert into product_user_profile(PRODUCT,USERID,ATTRIBUTE,CHAR_VALUE)

values ('SQL*Plus','SCOTT','DELETE','DISABLED');

1 row created.

SQL> commit;

Commit complete.

SQL> col PRODUCT for a10

SQL> col USERID for a20

SQL> col ATTRIBUTE for a10

SQL> col CHAR_VALUE for a10

SQL> select PRODUCT,USERID,ATTRIBUTE,CHAR_VALUE from product_user_profile;

PRODUCT USERID ATTRIBUTE CHAR_VALUE

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

SQL*Plus SCOTT DELETE DISABLED

Page 75: 1. Oracle RDBMS 安全配置与设计(116 页)

76/115

Oracle系统访问限制- PRODUCT_USER_PROFILE

♠ 在11g版本-默认已经安装

♠ 2.用SCOTT登录,试图用DELETE操作

--连接到SCOTT

SQL> conn SCOTT/Zhao_scott

Connected.

SQL> select * from emp;

...

SQL> delete from emp;

SP2-0544: Command "delete" disabled in Product User Profile

Page 76: 1. Oracle RDBMS 安全配置与设计(116 页)

77/115

Oracle系统访问限制-SYS_CONTEXT

♠ 用触发器限制system或SYS从某个IP地址登录

♠ 用SYS_CONTEXT

CREATE OR REPLACE TRIGGER restrict_dba_logon

AFTER LOGON ON DATABASE

ip_string varchar2(30);

Username varchar2(30);

BEGIN

select SYS_CONTEXT('userenv','ip_address'),

SYS_CONTEXT('userenv','session_user')

into ip_string , Username

from dual;

if (Username = 'SYSTEM' or Username ='SYS') and ip_str<>'10.10.10.10' then

RAISE_APPLICATION_ERROR(-20001, 'User SYS/SYSTEM can not logon from

IP:'||ip_str);

end if;

end;

/

Page 77: 1. Oracle RDBMS 安全配置与设计(116 页)

78/115

Oracle系统访问限制-sqlnet.ora

♠ 从9i开始,运行在sqlnet.ora限制某些IP登录

♠在sqlnet.ora中设置下列参数,可以限制/允许用户从特定的客户机连接到数据库中 :

♠ tcp.validnode_checking=yes|no

♠ tcp.invited_nodes=(ipaddress|hostname)

♠ tcp.excluded_nodes=(ipaddress|hostname)

♠其中tcp.validnode_checking参数确定是否对客户机IP地址进行检查;

♠ tcp.invited_nodes参数列举允许连接的客户机的IP地址;

♠ tcp.excluded_nodes参数列举不允许连接的客户机的IP

地址

Page 78: 1. Oracle RDBMS 安全配置与设计(116 页)

79/115

Oracle系统访问限制- sqlnet.ora

♠ sqlnet.ora限制某些IP登录

♠ $ORACLE_HOME/network/sqlnet.ora中增加:

#开启对ip地址的检查

tcp.validnode_checking=yes

#允许访问的ip

tcp.invited_nodes=(172.28.65.13)

#禁止访问的ip

ip.excluded_nodes= (172.27.65.15)

重启监听!

$ lsnrctl reload

Page 79: 1. Oracle RDBMS 安全配置与设计(116 页)

80/115

Oracle 11g 网络有关包

♠ 10g或9i 访问 TCP 协议

♠ Oracle允许使用几个PL/SQL API(UTL_TCP, UTL_SMTP,

UTL_MAIL, UTL_HTTPUTL_INADDR)访问外部网络服务,这些API都使用TCP协议

♠ 9i/10g 通过是否被授予用户执行某个包的许可,从而实现执行包的目的

♠ 11g引入了细粒度访问网络服务,通过在XML DB 数据库中使用访问控制列表(ACL)来实现,允许控制哪个用户能够访问哪个网络资源,而不关心包的授权

♠ 使用FTP或WebDav可以直接在XML DB 数据库中创建、修改和删除访问控制列表,Oracle提供了DBMS_NETWORK_ACL_ADMIN

和 DBMS_NETWORK_ACL_UTILITY程序包允许从PL/SQL管理访问控制列表。

Page 80: 1. Oracle RDBMS 安全配置与设计(116 页)

81/115

DBMS_NETWORK_ACL_ADMIN包

♠ 11g访问控制列表-包中的程序

♠ CREATE_ACL 为第1个用户创建ACL

♠ assign_acl 分配给Network服务

♠ add_privilege 授权用户访问 ACL

♠ delete_privilege 删除访问权限

♠ unassign_acl 停止 Network服务

♠ 11g访问控制列表-相关视图

♠ DBA_NETWORK_ACLS – ACL中有哪些Network服务

♠ DBA_NETWORK_ACL_PRIVILEGES – 在 ACL中有哪些用户?

Page 81: 1. Oracle RDBMS 安全配置与设计(116 页)

82/115

DBMS_NETWORK_ACL_ADMIN包

♠ 11g访问控制列表

♠ 访问控制列表是使用DBMS_NETWORK_ACL_ADMIN程序包来操作

♠ CREATE_ACL存储过程使用下面的参数来创建一个新的访问控制列表:

♠ acl - 访问控制列表XML文件的名字,产生在XML DB 数据库中的/sys/acls目录下

♠ description - 访问控制列表的描述信息

♠ principal - 第一个被授予或拒绝的用户账号,大小写敏感

♠ is_grant - TRUE意味着授予了权限,FALSE意味着权限被拒绝

♠ privilege - 给UTL_TCP, UTL_SMTP, UTL_MAIL和UTL_HTTP授予connect权限,给UTL_INADDR名称/ip解析授予resolve权限,大小写敏感

♠ start_date - 默认值是NULL,当指定了一个值后,访问控制列表只有在指定的日期到达时或到达后才被激活

♠ en_date - 访问控制列表结束日期

Page 82: 1. Oracle RDBMS 安全配置与设计(116 页)

83/115

DBMS_NETWORK_ACL_ADMIN包

♠在 11g 版本上-例子0:

♠创建ACL和查询视图 :

begin

dbms_network_acl_admin.create_acl(

acl => 'smtp-access.xml',

description => 'ACL for SMTP service',

principal => 'MAILAGENT',

is_grant => TRUE,

privilege => 'connect');

dbms_network_acl_admin.assign_acl(

acl => 'smtp-access.xml',

host => 'smtp-host.oracle.com',

lower_port => 25);

end;

/

commit;

begin

dbms_network_acl_admin.create_acl(

acl => 'smtp-access.xml',

description => 'ACL for SMTP service',

principal => 'MAILAGENT',

is_grant => TRUE,

privilege => 'connect');

dbms_network_acl_admin.assign_acl(

acl => 'smtp-access.xml',

host => 'smtp-host.oracle.com',

lower_port => 25);

end;

/

commit;

SQL> select * from dba_network_acls;

HOST LOWER_PORT UPPER_PORT ACL

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

smtp-host.oracle.com 25 25 /sys/acls/smtp-

access.xml

SQL> select * from dba_network_acl_privileges;

ACL PRINCIPAL PRIVILEGE

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

/sys/acls/smtp-access.xml MAILAGENT connect

SQL> select * from dba_network_acls;

HOST LOWER_PORT UPPER_PORT ACL

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

smtp-host.oracle.com 25 25 /sys/acls/smtp-

access.xml

SQL> select * from dba_network_acl_privileges;

ACL PRINCIPAL PRIVILEGE

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

/sys/acls/smtp-access.xml MAILAGENT connect

Page 83: 1. Oracle RDBMS 安全配置与设计(116 页)

84/115

DBMS_NETWORK_ACL_ADMIN包

♠在 11g 版本上-例子1:

♠对 SCOTT创建访问控制列表-允许SCOTT访问www.us.oracle.com :

BEGIN

DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl => 'www.xml',

description => 'WWW ACL',

principal => 'SCOTT',

is_grant => true,

privilege => 'connect');

DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl => 'www.xml',

principal => 'SCOTT',

is_grant => true,

privilege => 'resolve');

DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl => 'www.xml',

host => 'www.us.oracle.com');

END;

/

COMMIT;

BEGIN

DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl => 'www.xml',

description => 'WWW ACL',

principal => 'SCOTT',

is_grant => true,

privilege => 'connect');

DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl => 'www.xml',

principal => 'SCOTT',

is_grant => true,

privilege => 'resolve');

DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl => 'www.xml',

host => 'www.us.oracle.com');

END;

/

COMMIT;

Page 84: 1. Oracle RDBMS 安全配置与设计(116 页)

85/115

DBMS_NETWORK_ACL_ADMIN包

♠在 11g 版本上-例子2 :

♠授予解析权限(resolve )给ADAMS :

BEGIN

DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl =>

'www.xml',

principal => 'ADAMS',

is_grant => true,

privilege => 'resolve');

END;

/

COMMIT;

BEGIN

DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl =>

'www.xml',

principal => 'ADAMS',

is_grant => true,

privilege => 'resolve');

END;

/

COMMIT;

Page 85: 1. Oracle RDBMS 安全配置与设计(116 页)

86/115

DBMS_NETWORK_ACL_ADMIN包

♠在 11g 版本上-例子3 :

♠分配ACL www.xml 给 www-proxy.us.oracle.com ,使得SCOTT 与 ADAMS 也能访问 www-proxy.us.oracle.com :

BEGIN

DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl =>

'www.xml',

host => 'www-proxy.us.oracle.com');

END;

/

COMMIT;

BEGIN

DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl =>

'www.xml',

host => 'www-proxy.us.oracle.com');

END;

/

COMMIT;

Page 86: 1. Oracle RDBMS 安全配置与设计(116 页)

87/115

DBMS_NETWORK_ACL_ADMIN包

♠在 11g 版本上-例子4:

♠取消分配ACL www.xml ,使得不能访问

www.us.oracle.com :

BEGIN

DBMS_NETWORK_ACL_ADMIN.UNASSIGN_ACL(host =>

'www.us.oracle.com');

END;

/

COMMIT;

BEGIN

DBMS_NETWORK_ACL_ADMIN.UNASSIGN_ACL(host =>

'www.us.oracle.com');

END;

/

COMMIT;

Page 87: 1. Oracle RDBMS 安全配置与设计(116 页)

88/115

DBMS_NETWORK_ACL_ADMIN包

♠在 11g 版本上-例子5:

♠查询SCOTT允许访问 的网站:

SELECT host, lower_port, upper_port, acl,

DECODE(

DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE_ACLID(aclid, 'SCOTT', 'connect'),

1, 'GRANTED', 0, 'DENIED', null) privilege

FROM dba_network_acls

WHERE host IN

(SELECT * FROM

TABLE(DBMS_NETWORK_ACL_UTILITY.DOMAINS('www.us.oracle.com')))

ORDER BY DBMS_NETWORK_ACL_UTLITITY.DOMAIN_LEVEL(host) desc, lower_port,

upper_port;

HOST LOWER_PORT UPPER_PORT ACL PRIVILEGE

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

www.us.oracle.com 80 80 /sys/acls/www.xml GRANTED

www.us.oracle.com 3000 3999 /sys/acls/www.xml GRANTED

www.us.oracle.com /sys/acls/www.xml GRANTED

*.oracle.com /sys/acls/all.xml

* /sys/acls/all.xml

SELECT host, lower_port, upper_port, acl,

DECODE(

DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE_ACLID(aclid, 'SCOTT', 'connect'),

1, 'GRANTED', 0, 'DENIED', null) privilege

FROM dba_network_acls

WHERE host IN

(SELECT * FROM

TABLE(DBMS_NETWORK_ACL_UTILITY.DOMAINS('www.us.oracle.com')))

ORDER BY DBMS_NETWORK_ACL_UTLITITY.DOMAIN_LEVEL(host) desc, lower_port,

upper_port;

HOST LOWER_PORT UPPER_PORT ACL PRIVILEGE

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

www.us.oracle.com 80 80 /sys/acls/www.xml GRANTED

www.us.oracle.com 3000 3999 /sys/acls/www.xml GRANTED

www.us.oracle.com /sys/acls/www.xml GRANTED

*.oracle.com /sys/acls/all.xml

* /sys/acls/all.xml

Page 88: 1. Oracle RDBMS 安全配置与设计(116 页)

89/115

DBMS_NETWORK_ACL_ADMIN包

♠在 11g 版本上-例子6:

♠查询SCOTT能解析 的网站:

SELECT host, acl,

DECODE(

DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE_ACLID(aclid, 'SCOTT', 'resolve'),

1, 'GRANTED', 0, 'DENIED', NULL) privilege

FROM dba_network_acls

WHERE host IN

(SELECT * FROM

TABLE(DBMS_NETWORK_ACL_UTILITY.DOMAINS('www.us.oracle.com'))) and

lower_port IS NULL AND upper_port IS NULL

ORDER BY DBMS_NETWORK_ACL_UTILITY.DOMAIN_LEVEL(host) desc;

HOST ACL PRIVILEGE

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

www.us.oracle.com /sys/acls/www.xml GRANTED

*.oracle.com /sys/acls/all.xml

* /sys/acls/all.xml

SELECT host, acl,

DECODE(

DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE_ACLID(aclid, 'SCOTT', 'resolve'),

1, 'GRANTED', 0, 'DENIED', NULL) privilege

FROM dba_network_acls

WHERE host IN

(SELECT * FROM

TABLE(DBMS_NETWORK_ACL_UTILITY.DOMAINS('www.us.oracle.com'))) and

lower_port IS NULL AND upper_port IS NULL

ORDER BY DBMS_NETWORK_ACL_UTILITY.DOMAIN_LEVEL(host) desc;

HOST ACL PRIVILEGE

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

www.us.oracle.com /sys/acls/www.xml GRANTED

*.oracle.com /sys/acls/all.xml

* /sys/acls/all.xml

Page 89: 1. Oracle RDBMS 安全配置与设计(116 页)

90/115

Oracle 安全建议-常见问题

♠国内Oracle系统安全常见:

♠应用系统用户口令简单

♠ DBA口令多人知道

♠ Profile 都采用默认的Default

♠表空间使用不受限制

♠维护方工程师具有很高的权限

♠不遵从“最小权限原则”,可能源于开发时的方便

Page 90: 1. Oracle RDBMS 安全配置与设计(116 页)

91/115

Oracle 安全建议-Network&OS

♠ Network:

♠ 10g/11g 的监听默认下为即开即用

♠ 10g Listeners的启动不需要口令

♠ SQLNET.ora:

♠ tcp.valid_node_checking = YES

♠ tcp.invited_nodes=(I/P#1,I/P#2, I/P#3…)

♠ tcp.excluded_nodes=(I/P#1,I/P#2,I/P#3…)

♠ OS:

♠ REMOTE_OS_AUTHENT=false

Page 91: 1. Oracle RDBMS 安全配置与设计(116 页)

92/115

Oracle 安全建议-应用口令

♠口令建议:

♠ 口令大小写敏感

♠ 口令复杂度

♠ 口令登录失败次数

♠ 口令不能包含USERID

♠ 口令最小长度

♠ 口令的重复使用问题

Page 92: 1. Oracle RDBMS 安全配置与设计(116 页)

93/115

Oracle 安全建议-应用口令

♠口令避免猜测的建议:

♠ 避免使用家庭成员的名字,如儿子的名字

♠ 避免出生日期,如儿子的的生日

♠ 避免地方名称,如Beijing

♠口令使用建议:

♠ 口令字可考虑来自其他的语言,组合相应的字符

Page 93: 1. Oracle RDBMS 安全配置与设计(116 页)

94/115

Oracle 安全建议-应用超时参数

♠建议使用应用超时参数:

♠当从桌面离开时可保护应用

♠避免长时间应用被人接管

♠某些电子商务可选择下面参数:

♠会话超时为 30 分钟

♠现在小时数 4 小时

♠连接时间:2000 秒

♠非交互的超时为30分钟

Page 94: 1. Oracle RDBMS 安全配置与设计(116 页)

95/115

Oracle 安全建议-基于角色的访问控制

♠建议使用角色:

♠授予专业用户访问特别数据

♠授予专门用户给安全策略

♠数据安全策略(Data Security Policies):

♠管理专门的数据访问,可以是实例数据、数据组

♠在责任区外不能看到数据

Page 95: 1. Oracle RDBMS 安全配置与设计(116 页)

96/115

Oracle 安全建议-10g/11g层面

♠ 建议使用角色:

♠ 基于唯一ID 的 访问

♠ 能对表进行的操作 : ♠ ALTER

♠ CREATE

♠ DROP

♠ BECOME USER

♠ UPDATE

♠ EXECUTE

♠ LOCK

♠ INSERT

♠ 仔细检查:

♠ DBA_USERS

♠ DBA_SYS_PRIVS

♠ DBA_ROLE_PRIVS

♠ DBA_TAB_PRIVS

Page 96: 1. Oracle RDBMS 安全配置与设计(116 页)

97/115

Oracle 系统安全建议- 10g/11g层面

♠了解Oracle 系统各文件:

♠这些文件的路径?

♠这些文件的许可 如何?

♠路径的所有者:

♠属于DBA或SYSTEM?

♠初始参数中的UTL_FILE_DIR参数设置合理?

路径与文件 750 或更低

$ORACLE_HOME/bin 755 或更低?

Listener.ora 与 SQLNET.ora 755 或更低?

TNSNAMES.ora 755 或更低?

Page 97: 1. Oracle RDBMS 安全配置与设计(116 页)

98/115

Oracle 系统安全建议- 数据库层面

♠了解Oracle 系统:

♠应用系统与职责

♠数据库读角色

♠数据库系统权限

♠数据库角色权限

♠数据库表的权限

Page 98: 1. Oracle RDBMS 安全配置与设计(116 页)

99/115

Oracle 系统安全建议-数据层面

♠数据混乱:

♠非出示(不需显示)环境:

♠银行账户

♠信用卡号

♠工资单

♠员工初始、电话等

♠考虑出示环境的各部分

♠分析有意的行为

♠浏览关键项目的某些数据

Page 99: 1. Oracle RDBMS 安全配置与设计(116 页)

100/115

Oracle 系统安全建议-应用层审计

♠应用层审计:

♠概要审计:

♠从站点登录审计

♠审计跟踪(实时)

♠审计报告:

♠完成的登录审计

♠审计可信赖性

♠失败的登录

♠审计的用户

Page 100: 1. Oracle RDBMS 安全配置与设计(116 页)

101/115

Oracle 系统安全建议-DB层审计

♠数据库层审计-SYS.DBA_AUDIT_TRAIL:

♠静态表审计

♠测试是否为首次出现

♠基于关键应用的表

♠对审计表的审计

♠更新活动情况

♠可信赖账户

Page 101: 1. Oracle RDBMS 安全配置与设计(116 页)

102/115

内容提要

♠数据安全形势

♠ Oracle 环境安全配置

♠安全设计与设计原则

♠安全策略与安全计划

♠ Oracle 系统用户与口令

♠ Oracle 默认角色与访问控制

♠附录:几个DBA安全脚本

Page 102: 1. Oracle RDBMS 安全配置与设计(116 页)

103/115

附录1:DBMS_METADATA.GET_GRANTED_DDL

♠可导出对象依赖关系:

♠使用 GET_DEPENDENT_DDL

♠得到相关的DDL

SELECT DBMS_METADATA.GET_DEPENDENT_DDL('OBJECT_GRANT',

'EMPLOYEES','HR') FROM DUAL;

GRANT SELECT ON "HR"."EMPLOYEES" TO "OE"

GRANT REFERENCES ON "HR"."EMPLOYEES" TO "OE"

SELECT DBMS_METADATA.GET_DEPENDENT_DDL('OBJECT_GRANT',

'EMPLOYEES','HR') FROM DUAL;

GRANT SELECT ON "HR"."EMPLOYEES" TO "OE"

GRANT REFERENCES ON "HR"."EMPLOYEES" TO "OE"

Page 103: 1. Oracle RDBMS 安全配置与设计(116 页)

104/115

附录1:DBMS_METADATA.GET_GRANTED_DDL

♠可用GET_GRANTED_DDL导出权限:

♠使用 GET_GRANTED_DDL 列出系统权限

CREATE USER PLSQL_USER IDENTIFIED BY PLSQL_USER;

GRANT CONNECT, RESOURCE, DBA TO PLSQL_USER;

GRANT SELECT ON SCOTT.EMP TO PLSQL_USER;

SELECT

DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT','PLSQL_USER')

FROM DUAL;

GRANT UNLIMITED TABLESPACE TO "PLSQL_USER"

SELECT DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT','PLSQL_USER')

FROM DUAL;

GRANT "CONNECT" TO "PLSQL_USER"

GRANT "RESOURCE" TO "PLSQL_USER"

GRANT "DBA" TO "PLSQL_USER"

CREATE USER PLSQL_USER IDENTIFIED BY PLSQL_USER;

GRANT CONNECT, RESOURCE, DBA TO PLSQL_USER;

GRANT SELECT ON SCOTT.EMP TO PLSQL_USER;

SELECT

DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT','PLSQL_USER')

FROM DUAL;

GRANT UNLIMITED TABLESPACE TO "PLSQL_USER"

SELECT DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT','PLSQL_USER')

FROM DUAL;

GRANT "CONNECT" TO "PLSQL_USER"

GRANT "RESOURCE" TO "PLSQL_USER"

GRANT "DBA" TO "PLSQL_USER"

Page 104: 1. Oracle RDBMS 安全配置与设计(116 页)

105/115

附录1:DBMS_METADATA.GET_GRANTED_DDL

♠可用GET_GRANTED_DDL导出权限:

♠使用 GET_GRANTED_DDL 列出对象权限

SELECT

DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT','PLSQL_USER')

FROM DUAL;

GRANT SELECT ON "SCOTT"."EMP" TO "PLSQL_USER"

SELECT DBMS_METADATA.GET_GRANTED_DDL('DEFAULT_ROLE','PLSQL_USER')

FROM DUAL;

ALTER USER "PLSQL_USER" DEFAULT ROLE ALL

--

SELECT DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT', 'DBA')

FROM DUAL;

GRANT "SELECT_CATALOG_ROLE" TO "DBA" WITH ADMIN OPTION;

GRANT "EXECUTE_CATALOG_ROLE" TO "DBA" WITH ADMIN OPTION;

GRANT "DELETE_CATALOG_ROLE" TO "DBA" WITH ADMIN OPTION;

SELECT

DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT','PLSQL_USER')

FROM DUAL;

GRANT SELECT ON "SCOTT"."EMP" TO "PLSQL_USER"

SELECT DBMS_METADATA.GET_GRANTED_DDL('DEFAULT_ROLE','PLSQL_USER')

FROM DUAL;

ALTER USER "PLSQL_USER" DEFAULT ROLE ALL

--

SELECT DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT', 'DBA')

FROM DUAL;

GRANT "SELECT_CATALOG_ROLE" TO "DBA" WITH ADMIN OPTION;

GRANT "EXECUTE_CATALOG_ROLE" TO "DBA" WITH ADMIN OPTION;

GRANT "DELETE_CATALOG_ROLE" TO "DBA" WITH ADMIN OPTION;

Page 105: 1. Oracle RDBMS 安全配置与设计(116 页)

106/115

附录1:DBMS_METADATA.GET_GRANTED_DDL

♠可用GET_GRANTED_DDL导出权限:

♠使用 GET_GRANTED_DDL 列出DBA拥有的权限

SELECT DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT', 'DBA')

FROM DUAL;

GRANT ALTER ON "SYS"."MAP_OBJECT" TO "DBA";

GRANT SELECT ON "SYS"."MAP_OBJECT" TO "DBA";

GRANT FLASHBACK ON "SYS"."MAP_OBJECT" TO "DBA";

GRANT EXECUTE ON "SYS"."DBMS_FLASHBACK" TO "DBA";

SELECT DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT', 'DBA')

FROM DUAL;

GRANT CREATE ANY SQL PROFILE TO "DBA" WITH ADMIN OPTION;

GRANT ADMINISTER ANY SQL TUNING SET TO "DBA" WITH ADMIN OPTION;

GRANT DROP ANY SQL PROFILE TO "DBA" WITH ADMIN OPTION;

GRANT MANAGE SCHEDULER TO "DBA" WITH ADMIN OPTION;

SELECT DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT', 'DBA')

FROM DUAL;

GRANT ALTER ON "SYS"."MAP_OBJECT" TO "DBA";

GRANT SELECT ON "SYS"."MAP_OBJECT" TO "DBA";

GRANT FLASHBACK ON "SYS"."MAP_OBJECT" TO "DBA";

GRANT EXECUTE ON "SYS"."DBMS_FLASHBACK" TO "DBA";

SELECT DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT', 'DBA')

FROM DUAL;

GRANT CREATE ANY SQL PROFILE TO "DBA" WITH ADMIN OPTION;

GRANT ADMINISTER ANY SQL TUNING SET TO "DBA" WITH ADMIN OPTION;

GRANT DROP ANY SQL PROFILE TO "DBA" WITH ADMIN OPTION;

GRANT MANAGE SCHEDULER TO "DBA" WITH ADMIN OPTION;

Page 106: 1. Oracle RDBMS 安全配置与设计(116 页)

107/115

附录2:10g/11g 安全问题快速参考

♠ 1.默认用户与默认口令:

♠ 默认口令可用SQL>Alter USER <name> Inendified By <password>;修改

♠ 默认口令从Select * from sys.dba_users_with_defpwd;查询(11g )

♠ http://www.integrigy.com

♠ Version 2.0 – April 2011

♠ Oracle Database versions 9.2, 10.1,

10.2, 11.1, 11.2

♠ Copyright © 2011 Integrigy

Corporation

Page 107: 1. Oracle RDBMS 安全配置与设计(116 页)

108/115

附录2:10g/11g 安全问题快速参考

♠ 2. 口令控制与Profile:

♠ $ORACLE_HOME/rdbms/admin/utlpwdmg.sql样例

♠ 用PASSWORD_VERIFY_FUNCTION函数验证复杂口令

♠ 设置SEC_CASE_SENSITIVE_LOGON=TRUE

♠ SQL> alter profile <profile_name> Limit

♠ <resource name> <value>;

Page 108: 1. Oracle RDBMS 安全配置与设计(116 页)

109/115

附录2:10g/11g 安全问题快速参考

♠ 3. Oracle 系统补丁检查:

♠ SQL> select * from sys.registry$history;

♠ OS>opatch lsinventory -detail

Page 109: 1. Oracle RDBMS 安全配置与设计(116 页)

110/115

附录2:10g/11g 安全问题快速参考

♠ 4. Oracle 系统审计信息查询:

♠ 查询审计数据字典与视图

♠ 查询权限相关视图

Page 110: 1. Oracle RDBMS 安全配置与设计(116 页)

111/115

附录2:10g/11g 安全问题快速参考

♠ 5. Oracle 系统文件的许可配置:

♠ 默认的许可有些高,建议为:

Page 111: 1. Oracle RDBMS 安全配置与设计(116 页)

112/115

附录2:10g/11g 安全问题快速参考

♠ 6. Oracle 系统初始化参数:

♠ 默认的初始化参数存在不合理问题,建议为:

Page 112: 1. Oracle RDBMS 安全配置与设计(116 页)

113/115

附录2:10g/11g 安全问题快速参考

♠ 7. Oracle 系统安全语句:

♠ 建议DBA用下面语句进行设置:

Page 113: 1. Oracle RDBMS 安全配置与设计(116 页)

114/115

附录2:10g/11g 安全问题快速参考

♠ 8. Oracle 系统-系统与对象权限:

♠ 建议系统权限设置为:

Page 114: 1. Oracle RDBMS 安全配置与设计(116 页)

115/115

附录2:10g/11g 安全问题快速参考

♠ 8. Oracle 系统-系统与对象权限:

♠ 建议对象权限设置为:

Page 115: 1. Oracle RDBMS 安全配置与设计(116 页)

116/115

附录2:10g/11g 安全问题快速参考

♠ 9. Oracle 系统-审计配置建议:

♠ 不同版本审计设置的不同: