Oracle数据库等级测评方法及知识点

查看版本

oracle
1
2
3
select * from v$version;
select version from v$instance;
select version FROM Product_component_version Where SUBSTR(PRODUCT,1,6)='Oracle';

身份鉴别

密码策略

Oracle默认提供了一个密码策略的sql执行文件utlpwdmg.sql

  • Linux
    $ORACLE_HOME/rdbms/admin/utlpwdmg.sql #默认位置
  • Windows
    windows路径位置可以通过搜索来获得。
    C:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN #默认位置
查看用户状态及profile文件
1
2
3
4
5
select username,account_status,profile from dba_users;
# 只查看激活的用户
select username,profile from dba_users where account_status='OPEN';
# 查看未锁定账户
select username,profile from dba_users where account_status not like '%LOCKED%';
profile设置
1
2
3
4
#只查看默认profile
select resource_name,limit from dba_profiles where profile='DEFAULT';
select resource_name,limit from dba_profiles where resource_type='PASSWORD';
select resource_name,limit from dba_profiles where resource_type='PASSWORD' and profile='DEFAULT';
resource_name 说明
PASSWORD_VERIFY_FUNCTION 复杂度设置,一般为null。
PASSWORD_LIFE_TIME 口令有效期,默认为180天。
PASSWORD_REUSE_TIME 使用过的口令多少天内不可以再次被使用,默认为UNLIMITED。
PASSWORD_REUSE_MAX 口令被修改后原有口令被修改多少次才允许被重新使用,默认为UNLIMITED。
PASSWORD_GRACE_TIME 表示用户口令使用时间超过其生命周期后,可以延续使用的天数,并且可延续时间内登录会有相应口令即将过期的提示,默认为7天;若设置为UNLIMITED会导致数据库发出警告但让用户无限期地继续连接。
FAILED_LOGIN_ATTEMPTS 登录失败次数,默认为10次。
PASSWORD_LOCK_TIME 账户锁定时间,默认为1天。
IDLE_TIME 指定会话期间允许的连续不活动时间段,以分钟为单位。长时间运行的查询和其他操作不受此限制。
最近密码修改时间
1
2
3
select name,ptime from sys.user$;
#查看指定用户
select name,ptime from sys.user$ where name='SYS';

登录超时

1
2
# 查看idle_time设置,默认为UNLIMITED。
select resource_name,limit from dba_profiles where profile='DEFAULT' and resource_type='KERNEL';

鉴别信息传输保密性

传输保密性


访问控制

oracle三种标准角色:connect、resource和dba

  • Connect角色是授予最终用户的典型权利,最基本的权利,能够连接到Oracle数据库中,并在对其他用户的表有访问权限时,做SELECT、UPDATE、INSERTT等操作,不可以创建实体,不可以创建数据库结构。
    Altersession–修改会话;
    Create cluster–建立聚簇;
    Create database link–建立数据库连接;
    Create sequence–建立序列;
    Create session–建立会话;
    Create synonym–建立同义词;
    Create view–建立视图。
  • Resoure角色是授予开发人员的,能在自己的方案中创建表、序列、视图等,拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
    Create cluster–建立聚簇;
    Create procedure–建立过程;
    Create sequence一建立序列;
    Create table–建表;
    Create trigger–建立促发器;
    Create type–建立类型。
  • DBA角色是授予数据库维护人员的。拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
基础知识
说明
V$PWFILE_USERS 查看哪些用户有sysdba或sysoper系统权限
user_sys_privs 查看当前用户系统权限
dba_sys_privs 查看所有用户系统权限
role_sys_privs 查看角色(只能查看登陆用户拥有的角色)所包含的权限
dba_role_privs 查看所有用户的角色
user_role_privs 查看当前用户的角色
dba_roles 查看所有角色
dba_tab_privs 查看所有用户对象权限
user_tab_privs 查看当前用户对象权限
all_tab_privs 查看当前用户可查看用户的对象权限
1
2
3
4
5
6
7
# 查看当前用户的缺省表空间
select username,default_tablespace from user_users;
select * from V$PWFILE_USERS;
# 查看哪些账户拥有DBA权限
select grantee,granted_role from dba_role_privs where granted_role='DBA';
# 查看某个账户的权限
select grantee,granted_role from dba_role_privs where grantee='username';

账户状态

1
2
# 查看未锁定账户
select username,account_status from dba_users where account_status not like '%LOCKED';
账户状态 说明
OPEN 正常账户
EXPIRED 账户过期
EXPIRED(GRACE) 账户在口令过期后的有效期内,仍可登录,但需及时修改口令
LOCKED(TIMED) 因口令输入错误过多而锁定账户,具体错误次数由FAILED_LOGIN_ATTEMPTS设置
LOCKED 账户已锁定
EXPIRED & LOCKED(TIMED) 账户已过期且口令输入错误过多而锁定
EXPIRED(GRACE) & LOCKED(TIMED) 账户在口令过期后的有效期内,同时因口令输入错误次数过多而锁定
EXPIRED & LOCKED 账户已过期且已锁定
EXPIRED(GRACE) & LOCKED 账户在口令过期后的有效期内同时已被DBA手工锁定

强制访问控制

  • 使用catols.sql脚本创建Oracle Label Security
1
2
3
4
5
6
7
8
# 安装脚本
@?/rdbms/admin/catols.sql
# 安装后会关闭数据库实例,需要手动启动
startup
# 确认脚本创建的数据库对象均有效
select object_type,object_name from dba_objects where owner='LBACSYS' and status='INVALID';
# 探查LBACSYS用户中涉及到的数据库对象信息
select object_type,count(*) from dba_objects where owner='LBACSYS' group by object_type;
  • 查看Oracle Label Security设置
1
2
3
4
5
6
7
8
9
10
# 查看是否存在LBACSYS用户
select username from dba_users where username like 'LBACSYS';
# 查看是否创建了策略
select policy_name,status from dba_sa_policies;
# 查看是否创建了级别
select * from dba_sa_levels order by level_num;
# 查看标签创建情况
select * from dba_sa_labels;
# 查看策略与模式、表的对应关系
select * from dba_sa_tables_policies;



安全审计

查看日志

1
2
3
4
5
6
7
8
9
10
11
#查看日志
show parameter audit;
# 日志存存储类型,若为os,则保存在系统中,windows系统在事件查看器中。
show parameter audit_trail;
# 是否启用对以sysdba或sysoper角色登录的用户进行审计
show parameter audit_sys_operations;

# 查看是否启用日志,select方式
select name,value from v$parameter where name like '%audit%';
select name,value from v$parameter where name='audit_trail';
select name,value from v$parameter where name='audit_sys_operations';
  • audit_trail
选项 说明
none 禁用标准审计。AUDIT_TRAIL如果该参数未在初始化参数文件中设置,或者您使用数据库配置助手以外的方法创建了数据库,则此值为默认值。如果您使用数据库配置助手创建数据库,则默认值为db.
os 将所有审计记录定向到操作系统文件。Oracle 建议您使用该os设置,尤其是在您使用超安全数据库配置时。
db 将审计记录定向到数据库审计跟踪(SYS.AUD$表),但始终写入操作系统审计跟踪的记录除外。将此设置用于通用数据库以提高可管理性。如果数据库以只读模式启动并AUDIT_TRAIL设置为db,则 Oracle 数据库内部设置AUDIT_TRAIL为os。检查警报日志以获取详细信息。
db, extended 执行AUDIT_TRAIL=的所有操作db,并填充表的 SQL 绑定和 SQL 文本 CLOB 类型列(SYS.AUD$如果可用)。仅当指定此参数时才会填充这两列。如果数据库以只读模式启动并AUDIT_TRAIL设置为db, extended,则 Oracle 数据库内部设置AUDIT_TRAIL为os。检查警报日志以获取详细信息。
xml 以 XML 格式写入操作系统审核记录文件。记录除操作系统 XML 审计文件之外的所有AuditRecord节点元素。Sql_TextSql_Bind
xml, extended 执行AUDIT_TRAIL=的所有操作xml,并在审计跟踪中包含 SQL 文本和 SQL 绑定信息。
更改设置
1
2
3
4
5
alter system set audit_sys_operations=TRUE scope=spfile;
alter system set audit_trail=os scope=spfile;
# 设置完需要重启
shutdown immediate
startup

审计策略

等级 说明
Statement 审核影响特定类型数据库对象的特定 SQL 语句或语句组。例如,AUDIT TABLE审计CREATE TABLE、TRUNCATE TABLE、COMMENT ON TABLE和DELETE [FROM] TABLE语句。
Privilege 审核由指定系统权限授权的 SQL 语句。例如,AUDIT CREATE ANY TRIGGER审计使用CREATE ANY TRIGGER系统权限发出的语句。
Object 审核特定对象,对象操作的审计,比如 Alter Table On The hr.employees
Network 审核网络协议中的意外错误或网络层中的内部错误。
1
2
3
4
5
6
# 查看Statement审计
select * from dba_stmt_audit_opts;
# 查看Privilege审计
select * from dba_priv_audit_opts;
# 查看Object审计
select * from dba_obj_audit_opts;
  • dba_stmt_audit_opts&dba_priv_audit_opts字段说明
字段 说明
USER_NAME 用户,null标识所有用户
PROXY_NAME 代理用户,null表示所有用户
AUDIT_OPTION 审计动作,记录哪些操作
SUCCESS 操作成功时如何记录,by access记录每个操作,by session记录每个会话的同一个操作
FAILURE 操作失败时如何记录,参数与success一致
配置策略
1
2
3
4
5
6
7
8
# 审计scott用户alter system的行为
audit alter system by scott;
# 只审计scott用户成功的alter system行为
audit alter system by scott whenever successful;
# 不审计scott用户失败的alter system操作
noaudit alter system by scott whenever not successful;
# 不审计scott用户成功和失败的alter system行为
noaudit alter system by scott;
  • dba_obj_audit_opts
字段 说明
OWNER 对象的所有者
OBJECT_NAME 对象名称
OBJECT_TYPE 对象类型
ALT 审计ALTER成功和失败的操作
AUD 审计AUDIT成功和失败的操作
COM 审计COMMENT成功和失败的操作
DEL 审计DELETE成功和失败的操作
GRA 审计GRANT成功和失败的操作
IND 审计INDEX成功和失败的操作
INS 审计INSERT成功和失败的操作
LOC 审计LOCK成功和失败的操作
REN 审计RENAME成功和失败的操作
SEL 审计SELECT成功和失败的操作
UPD 审计UPDATE成功和失败的操作
REF 此列已过时并为向后兼容而维护。此列的值始终为-/-
EXE 审计EXECUTE成功和失败的操作
CRE 审计CREATE成功和失败的操作
REA 审计READ成功和失败的操作
WRI 审计WRITE成功和失败的操作
FBK 审计FLASHBACK成功和失败的操作

除OWNER、OBJECT_NAME、OBJECT_TYPE外,其他均为-/-格式,左边为成功的操作,右边为失败的操作。如S/S表示记录在同一次会话中相同所有成功失败的操作,S/A表示记录一次同一次会话中相同的成功的操作,并且对所有失败的操作进行记录,-/S表示记录同一次会话中失败的记录且相同操作只记录一次

1
2
3
4
5
6
7
8
9
10
# 审计所有成功的对emp表中的操作类型,并且每个会话中相同语句只记录一次
audit all on scott.emp by session whenever successful;
# 审计所有对emp表中失败的操作
audit all on scott.emp by access whenever not successful;
# 不审计对emp表所有失败的操作
noaudit all on scott.emp whenever not successful;
# 关闭对emp表的审计
noaudit all on scott.emp;
# 仅审计对emp表成功和失败的查询操作
audit select on scott.emp by access;

查看日志记录字段

1
desc aud$

其他

1
2
3
4
5
6
# 日志文件路径
select * from v$logfile;

# 查看最近所作的操作
select * from v$sql;
select * from v$sqlarea;

入侵防范

  • 组件
1
select * from v$option;
  • 地址限制
    windows:C:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\sqlnet.ora
    Linux:$ORACLE_HOME/NETWORK/ADMIN/sqlnet.ora
sqlnet.ora
1
2
3
tcp.validnode_checking=yes #表示启用地址限制;
tcp.invited_nodes=(ip1,ip2,···) #允许访问的IP地址;
tcp.excluded_nodes=(ip1,ip2,···) #不允许访问的。

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))中的TCP若为TCPS则表示采用SSL协议

数据保密性

鉴别信息传输保密性

oracle默认对鉴别信息进行加密传输,Oracle9默认采用DES对鉴别信息进行加密,Oracle10和11采用AES对鉴别信息进行加密。

  • SSL
SSL
1
lsnrctl status
大致内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
PS C:\Users\Administrator> LSNRCTL.EXE status

LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 03-3月 -2022 17:22:48

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

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
启动日期 03-3月 -2022 14:02:36
正常运行时间 0 天 3 小时 20 分 12 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 C:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora
监听程序日志文件 c:\app\administrator\diag\tnslsnr\WIN-2M1S71D5V7T\listener\alert\log.xml
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
服务摘要..
服务 "CLRExtProc" 包含 1 个实例。
实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "orcl.localdomain" 包含 1 个实例。
实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orclXDB.localdomain" 包含 1 个实例。
实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功
  • 配置文件listener.ora路径
    linux$ORACLE_HOME/NETWORK/ADMIN/listener.ora
    windows:C:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora

鉴别信息存储保密性

Oracle7-10g默认采用DES对鉴别信息加密存储,Oracle11g改为SHA1。

其他

1
2
3
4
5
show user;                #查看当前用户
select * from user_users; #查看当前用户
select * from dba_users; #查看数据库的所有用户
select * from all_users; #列出当前用户可见的数据库的所有用户
select name from v$tablespace; #查看oracle所有表空间