Oracle是以关系数据库为数据存储和管理作为构架基础,构建出的数据库管理系统。
1.数据库基础
数据库由一批数据构成有序的集合,这些数据被存放在结构化的数据表里。数据表之间相互关联,反映了客观事物间的本质联系。数据库系统提供对数据的安全控制和完整性控制。
1.1 什么是数据库
数据库(DataBase,DB) 是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。它是一个按数据结构来存储和管理数据的计算机软件系统。即数据库包含两层含义:保管数据的“仓库”,以及数据管理的方法和技术。
数据库的种类大概有3种:层次式数据库、网络式数据库和关系式数据库。不同种类的数据库按不同的数据结构来联系和组织。
数据库的特点包括:实现数据共享,减少数据冗余;采用特定的数据类型:具有较高的数 据独立性;具有统一的数据控制功能。
1.2 表
在关系数据库中,数据表是一系列二维数组的集合,用来存储数据和操作数据的逻辑结构。它由纵向的列和横向的行组成,行被称为记录,是组织数据的单位;列被称为字段,每一列表示记录的一个属性,都有相应的描述信息,如数据类型、数据宽度等。
1.3 数据类型
数据类型决定了数据在计算机中的存储格式,代表不同的信息类型。常用的数据类型有:整数数据类型、浮点数数据类型、精确小数类型、二进制数据类型、日期/时间数据类型、字 符串数据类型。
1.4 主键
主键(PRIMARY KEY)又称主码,用于唯一地标识表中的每一条记录。可以定义表中的一列或多列为主键,主键列上不能有两行相同的值,也不能为空值。
2.数据库技术构成
数据库系统由硬件部分和软件部分共同构成,硬件部分主要用于存储数据库中的数据,包括计算机、存储设备等;软件部分则主要包括DBMS、支持DBMS运行的操作系统,以及支持多种语言进行应用开发的访问技术等。
2.1数据库系统
数据库系统有3个主要的组成部分:
数据库:用于存储数据的地方。
数据库管理系统:用于管理数据库的软件。
数据库应用程序:为了提高数据库系统的处理能力所使用的管理数据库的软件补充。
数据库(DataBase) 提供了一个存储空间用以存储各种数据,可以将数据库视为一个存储数据的容器。一个数据库可能包含许多文件,一个数据库系统中通常包含许多数据库。
数据库管理系统(DataBase Management System,DBMS) 是用户创建、管理和维护数据库时所使用的软件,位于用户与操作系统之间,对数据库进行统一管理。DBMS能定义数据存储结构,提供数据的操作机制,维护数据库的安全性、完整性和可靠性。
数据库应用程序(DataBase Application) ,虽然已经有了DBMS,但是在很多情况下,DBMS无法满足对数据管理的要求。数据库应用程序的使用可以满足对数据管理的更高要求,还可以使数据管理过程更加直观和友好。数据库应用程序负责与DBMS进行通信,访问和管理DBMS 中存储的数据,允许用户插入、修改、删除DB中的数据。
2 SQL语言
对数据库进行查询和修改操作的语言叫做SQL。SQL的含义是结构化查询语言(Structured Query Language)。
SQL语言包含以下4个部分:
①数据定义语言(DDL):DROP、CREATE、ALTER等语句。
②数据操作语言(DML):INSERT(插入)、UPDATE(修改)、DELETE(删除)语 句。
③数据查询语言(DQL):SELECT语句。
④数据控制语言(DCL):GRANT、REVOKE、COMMIT、ROLLBACK等语句。
3 Oracle账户介绍
Oracle安装会自动的生产sys用户和system用户
用户描述
sys用户 是超级管理员,具有最高权限,具有sysdba,有create database权限,默认的密码change_on_install。(安装时设定.用户手动给的),输入口令:sys as sysdba。
system用户 是普通管理员,权限也很大.具有sysoper角色,没有create database。默认密码是manager。一般讲,对数据库维护,使用system永固登录就可以登录就可以。
普通用户 用户名:scott; 密码:tiger(默认)安装时内置好,默认锁定的。
注意:也就是说sys和system这两个用户最大的区别是在于有没有create database的权限。
4 Oracle使用
oracle自带的SQL PLUS
PL/SQL Developer 集成开发程序
PLSQL可以在局域网其他主机上对数据库远程进行管理。
一、身份鉴别
a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;
sysdba是Oracle数据库的最高权限管理员。PL/SQL 为第三方管理软件,但SQL查询语句一样。
注:sysdba如果是本地管理,乱输密码也能登录成功,需要改sqlnet.ora文件。
1. 管理员登录数据库时是是否需要输入用户名/口令,不存在空口令;
2. 通过命令查看用户身份标识,用户名、用户id、用户状态:select username,user_id,account_status from dba_users;那些是open那些是locked,UID是否唯一
3.查询:select LIMIT from dba_profiles where RESOURCE_NAME='FAILED_LOGIN_ATTEMPTS' AND PROFILE ='DEFAULT';
若有设置应为
(1)PASSWORD_LOGIN_ATTEMPTS = 登录尝试次数;
(2)PASSWORD_LIFE_TIME = unlimited 未设置口令有效期;
(3)PASSWORD_ROUSE_MAX = unlimited 未设置重新启用一个先前用过的口令前必须对该口令进行重新设置的次数(重复用的次数);
(4)PASSWORD_VERIFY_FUNCITON = NULL,未设置口令复杂度校验函数;
(5)PASSWORD_GRACE_TIME=,口令修改的宽限期天数:7;
b) 应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施;
1. 查看是否启用登录失败限制策略,执行:select LIMIT from dba_profiles where RESOURCE_NAME='FAILED_LOGIN_ATTEMPTS' AND PROFILE ='DEFAULT';
查询结果若为’UNLIMITED’则无登录重试次数限制,超过此值用户被锁定。可以通过ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS 10(重试次数10次)
2.这条命令不是很好查询,建议使用下面这条查看配置策略:select lower(limit),lower(resource_name) from dba_profiles;
-
failed_login_attempts //登录失败次数
-
password_lock_time //失败锁定时间,单位天
-
idle_time //登录连接超时
3. 通过输入 SELECT LIMIT FROM DBA_PROFILES WHERE PROFILE=‘DEFAULT’ AND RESOURCE_NAME=‘IDLE_TIME’;, 查询结果若为’UNLIMITED’则无登录超时限制。
c) 当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听;
首先在服务器中查找sqlnet.ora的配置文件,打开:
查找以下策略:
QLNET.ENCRYPTION_SERVER = REQUIRED ----加密级别
SQLNET.ENCRYPTION_TYPES_SERVER = RC4_256 ----加密算法
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED --- 一致性能校验
采用sqlplus或PL/SQL连接数据库,对数据库进行管理,客户端与服务器端之间通信是加密的,故Oracle该项默认符合。
d) 应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现。
默认不符合。
二、访问控制
a) 应对登录的用户分配账户和权限;
通过输入**Select username,account_status from dba_users;**语句,主要查看数据库存在那些可用用户,至少得有两个,该测评项就需要Oracle中存在至少两个账户,且这两个账户的权限不一样。
1.为用户分配了账户和权限及相关设置情况,主要看可用账户(例如采用“用户权限列表”);
2.是否已禁用或限制匿名、默认账户的访问权限。如只有MGMT_UIEW,SYSTEM,SYS,DBSNMP为启用状态,其他均为启用状态,则为符合。
b) 应重命名或删除默认账户,修改默认账户的默认口令
在Oracle中默认用户最常用的就是SYS和SYSTEM这两个账户。
1.是否已经重命名SYS、SYSTEM、DBSNMP等默认帐户名或已修改默认口令,sys默认口令为CHANGE_ON_INSTALL;SYSTEM:MANAGER;DBSNMP的默认口令为:DBSNMP。可以登录测试。
c) 应及时删除或停用多余的、过期的账户,避免共享账户的存在
访谈管理员是否存在多余或过期账户,管理员用户与账户之间是否一一对应通过输入**Select username,account_status from dba_users;**查看是否存在默认帐户SCOTT/OUTLN/ORDSY等用户,不存在acount_status为expired的账户。访谈管理员是否存在共享账户等。示例不符合。
d) 应授予管理用户所需的最小权限,实现管理用户的权限分离
1. 通过输入**Select username,account_status from dba_users;**查看状态为open的用户的用途。
2. 通过输入 **select * from dba_tab_privs where grantee=‘SYS’ ORDER BY GRANTEE;询问是否由不同员工分别担任操作系统管理员与数据库管理员
3. 通过访谈管理员、管理用户权限是否为其工作任务所需的最小权限,是否存在相应的用户权限表。
4. 通过输入select granted_role from dba_role_privs where grantee=‘PUBLIC’; 返回值( ) 得知public是否被授权给用户,有就不符合 ;
5. 通过在命令窗口输入Show parameter O7_DICTIONARY_ACCESSIBILITY;返回值(是否为false);(该参数设置为false为符合,如果用户具有了any table权限,则可以访问除sys用户之外的其他用户的对象,也就无权访问数据字典基表。)
TIPS: sql语句在 PL/sql的文件–》sql窗口执行,show等命令语句在命令窗口执行。sqlplus则不区分。
综上判断符合程度。
e) 应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则
通过访谈管理员,是否由特定账户为登录用户分配角色和权限。是否存在具体的访问规则。
f) 访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级
此项默认符合。
g)应对重要主体和客体设置安全标记,并控制主体对有安全标记信息资源的访问
通过访谈数据库管理员: 是否对重要主体和客体设置安全标记。oracle自身应该不具备这个功能,可能要依靠操作系统或者第三方的什么软件如Oracle_Label_Security来实现了。该项一般默认都不符合。
三、安全审计
a) 应启用安全审计功能,审计覆盖到每个用 户,对重要的用户行为和重要安全事件进行审计
Oracle自带有审计功能,可以通过audit_trail参数来开启使用。
1. 通过输入 show parameter audit_trail;返回值默认为DB,即为普通用户开启审计功能,若为none则为未开启状态;
2. 通过输入 **select * from dba_stmt_audit_opts;和select * from dba_priv_audit_opts;**返回结果如User_Name为空值,对这些重要事件开启审计,并且这个审计是针对所有用户的,符合要求。
3. 通过输入 **show parameter audit_sys_operations;**返回结果 audit_sys_operations boolean FALSE 则未对SYSDBA或SYSOPER特权连接时直接发出的SQL语句进行审计,需要开启,默认为false。
综上分析判断符合程度。
b) 审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息
通过输入 **select * from aud$; 查看审计日志的格式,默认符合。(输入show parameter dump_dest 得出backgroup_dump_dest的值为日志文件的位置。)。下图没有显示完全。
c) 应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等
1. 通过访谈管理员, 是否采取技术措施对审计记录进行定期备份,是否有日志服务器。
2. 是否普通用户无法访问审计记录。
d) 应对审计进程进行保护,防止未经授权的中断
Oracle默认符合此项。
1. 通过查看sysdba、sysoper权限被授予给了谁,非管理员账户是否可以中断审计进程,审计进程是否进行了保护。
2. 通过输入**alter system set audit_trail=none; **得出无法成功即符合。示例为sysdba最高权限管理员登录,能够进行操作。需要通过一个普通用户登录,查看此条命令是否能够执行,若能此项就不符合。
四、入侵防范
a) 应遵循最小安装的原则,仅安装需要的组件和应用程序
通过输入**select * from v$option;**得知安装的组件是否多余。value为true为安装了。
b) 应关闭不需要的系统服务、默认共享和高危端口
此项不适用,数据库不涉及此项。
c) 应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制
通过查看oracle的安装路径中的sqlnet.ora文件查看tcp.validnode_checking/tcp/invited_nodes的配置是否为:
tcp.validnode_checking=yes
tcp,invited_nodes=() 得知是否设置了远程连接IP。
大部分未设置,基本都是通过远程管理操作系统间接远程数据库。
d) 应提供数据有效性检验功能,保证通过人机接口输入或通过通信接口输入的内容符合系统设定要求。
数据库不涉及此项。
e) 应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞
1、 访谈管理员是否定期或不定期进行漏洞扫描或渗透测试。
2、通过本次漏洞扫描是否发现与数据库相关的高危漏洞,若存在,是否及时进行漏洞修补。
f) 应能够检测到对重要节点进行入侵的行为,并在发生严重入侵事件时提供报警
数据库不涉及此项。
五、恶意代码防范
应采用免受恶意代码攻击的技术措施或主动免疫可信验证机制及时识别入侵和病毒行为,并将其有效阻断
此项不适用,数据库不涉及此项。
六、可信验证
可基于可信根对计算设备的系统引导程序、 系统程序、重要配置参数和应用程序等进行可信验证,并在应用程序的关键执行环节进行动态可信验证,在检测到其可信性受到破坏后进行报警,并将验证结果形成审计记录送至安全管理中心
通过访谈管理员,是否采取了可信技术,一般都是未采取。
七、数据完整性
a) 应采用校验技术或密码技术保证重要数据在传输过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等
核查数据库远程管理是否采用 SSL 安全连接等安全加密协议
b)应采用校验技术或密码技术保证重要数据在存储过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等
核查是否采用了 SM3、SHA256、SHA512等摘要算法对鉴别口令数据进行完整性计算后存储在数据表中
八、数据保密性
a) 应采用密码技术保证重要数据在传输过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等;
核查数据库在传输过程中是否采用了加密协议
b)应采用密码技术保证重要数据在存储过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等
核查数据库系统用户鉴别信息(如口令)是否以密文形式存储,Oracle数据库系统一般对用户口令进行 SHA 加密后存储。
九、数据备份
a) 应提供重要数据的本地数据备份与恢复功能;
核查是否按照备份策略对重要数据进行定期本地备份
b) 应提供异地实时备份功能,利用通信网络将重要数据实时备份至备份场地;
核查是否通过网络将重要配置数据、重要业务数据实时备份至异地
c) 应提供重要数据处理系统的热冗余,保证系统的高可用性。
核查数据库是否采用RAC,MHA等形式的高可用方案,冗余部署必须以双活、双机、热备的形式来实现