[ORACLE] ORACLE 安全性 【用户管理 权限管理 配置文件 数据库审计】
- 用户账号的管理与创建
- 用户权限的授予与撤销
- 角色的创建与管理
- 配置文件的管理与创建
- 安全管理的原则--最小权限原则
- 数据库审核
1.用户账号的管理与创建
账号的属性 :用户名/身份验证方法/默认表空间/表空间配额/临时表空间/配置文件/账号状态
用户名: <30 字母/数字/$/_ 创建后不可更改用户名
create user pan identified by pw44wo$d default tablespace TEST temporary tablespace TEMP;
默认表空间和配额
select username,DEFAULT_TABLESPACE,temporary_TABLESPCE from dba_users where username='pan' alter user pan quota 10m on users; alter user pan quota unlimited on example; select tablespace_name,bytes,max_bytes from dba_ts_quotas where username='pan' select property_name,property_value from database_proerties where proerty_name like'%tablespace' alter user pan temporary tablespace temp; #用户不需要临时表空间配额
账号状态: OPEN/LOCKED/EXPIRED/EXPIRED &lOCKED/EXPIRED GRACE/LOCKED TIMED/EXPIRTED & LOCKED TIMES/EXPIRED GRACE &LOCKED TIMED)
alter user pan account lock alter user pan password expire
alter user pan account unlock
身份验证方法
grant [sysdba|sysoper] to username #操作系统和口令文件身份验证
#v$pwfile_users 查询授予sysdba 和sysoper 的用户 connect username / password [@db_alias] as [sysdba|sysoper] #口令文件身份验证 connect / as [sysdba| sysoper] #操作系统 不需要口令 connect username / password [@db_alias] # 口令身份验证 select value from v$parameter where name ='os_authent_prefix';# 查询OPS$ 字符串的值,如果值为空字符串,则允许数据库管理员和OS账号管理员在使用外部身份验证使用相同的用户名。 create user ops$pan identified externally; grant create sesion to ops$pan sqlplus / #linux外部身份验证登录 creeate user "OPS$TT\pan" identified externally;# windows 外部身份验证登录 TT是域名,pan账号
账号管理
create user pan identified by tiger default tablespace users temporary tablespace temp quota 100 on users,quota unlimited on example profile devloper_profile password expire account unlock; alter user pan profile product_profile; drop user pan cascade;
2.用户权限的授予与撤销
grant/revoke/grantor/grantee
系统权限(撤销不可级联) 数据字典: system_privilege_map dba_sys_privs session_privs role_sys_privs
create session
restricted session
alter database
alter system
create tablespace
create database link
create table
create any table
grant any object privilege
create any table
drop any table
insert any table/update any table/delete any table
select any table
audit system
create any index
create profile
create procedure
create user
create view
create synonym
create any synonym
create public sysnonym
grant create session ,alter session,create table,create view,create synonym,create cluster,craete database link,create sequence,
create tigger,create type,create procedure,create operator to user with admin option;#允许被授权人将权限传递给第三方 #dba_sys_privs
对象权限(撤销将会级联) 数据字典: dba_tab_privs dba_col_privs session_privs role_tab_privs
ANY权限针对数据库中的每个用户账号中的每个对象授权,是系统权限,而不是对象权限。
在列级别授权是一种错误的做法,如需要限制用户对特定列的访问权限,创建只显示这些列的视图是更好的替代做法
SELECT/INSERT/UPDATE/DELETE on table/view/sequence
ALTER on table and sequence
EXECUTE on 过程/函数/包/同义词
grant select on store.customers to scott; grant update (order_status) on store.orders to scott; grant on store.regions to scott with grant option #使用户将其对象传给第三方
3.角色的创建与管理
角色的创建与授予
create role hr_manager; grant create session to hr_manager; grant select on hr.regions to hr_manager with admin option;
预定义角色
connect/resource/dba/select_catalog_role/scheduler_admin/public
启用角色
create role rolename identified using procedure_name;
4.配置文件的管理与创建
profile 的功能:实施口令策略并限制会话可以占用的资源
口令策略(强制实施) linux: $ORACLE_HOME/rdbms/admin/utlpwdmg.sql windows: %ORACLE_HOME%\rdbms\admin\utlpwdmg.sql 这个脚本会创建VERIFY_FUNCTION和VERIFY_FUNCTION_11G 函数
FAILED_LOGIN_ATTEMPTS
PASSWORD_LOCK_TIME
PASSWORD_LIFE_TIME
PASSWORD_GRACE_TIME
PASSWORD_REUSE_TIME
PASSWORD_REUSE_MAX
PASSWORD_VERIFY_FUNCTION
资源限制(resource_limit=true) ALTER SYSTEM SET RESOURCE_LIMITED=TRUE
SESSIONS_PER_USER
CPU_PER_SESSION
CPU_PER_CALL
LOGICAL_READS_PER_SESSION
LOGICAL_READS_PER_CALL
PRIVATE_SGA
CONNECT_TIME
IDLE_TIME
COMPOSITE_LIMIT #以服务为单位划分的总资源成本,作为CPU_PER_SESSION/CONNECT_TIME/LOGICAL_READS_PER_SESSION 和PRIVATE_SGA 的组合加权和 resource_cost
配置文件的创建和分配
select username,profile from dba_users; select * from dba_profiles where profile='DEFAULT'; alter profile default limit session_per_user 1; create profile dba_profile limit sessions_per_user unlimited password_life_time 10 passsword_grace_time 1; alter user system profile dba_profile; drop profile dba_profile cascade;
#默认情况下所有的资源成本为0
select * from resource_cost;
alter rescource cost cpu_per_session 50 connect_time 2;
5. 安全管理的原则--最小权限原则
最小权限原则 :用户应当只拥有执行其任务所需的最小权限,并且禁止所有未被特别允许的权限。SYS 和system 拥有所有权限
PUBLIC权限
select table_name from dba_tab_privs where grantee='PUBLIC' and privilege='EXECUTE' and table_name like'UTL%'; revoke execute on utl_file from public; #UTL_FILE 这个包允许用户读写OS oracle 所有者可以访问的任何文件和目录,其中包括所有的数据库文件和ORALCE_HOME目录 #UTL_TCP 这个包允许用户为了连接网络中所有可访问的地址而打开服务器的TCP端口 #UTL_SMTP允许用户发送邮件的 #UTL_HTTP
对安全性至关重要的实例参数,需要重启实例才可以更改
UTL_FILE_DIR default is null,允许PL/SQL 通过UTL_FILE包来访问服务器计算机的文件系统。
alter system set utl_file_dir ='oracle/tmp','oracle/innterface' scope=spfile;
REMOTE_OS_AUTHENT default is FALSE,控制某个用户是否能够不需要口令的情况下从远程计算机上连接数据库
OS_AUTHENT_PREFIX default is "OPS$"
alter system set os_authent_prefix='' scope=spfile
O7_DICTIONARY_ACCESSIBILITY default is FALSE :ANY 权限不被授予SYS拥有的对象、
REMOTE_LOGIN_PASSWORDFILE default is NON,有SYSDBA和SYSOPER 权限的用户不可通过网络连接实例,
REMOTE_LOGIN_PASSWORDFILE 参数值为SHARED时,多个数据库共享一个秘密文件,但只有SYS用户使用密码文件来验证身份,并且不可以改变SYS密码。
REMOTE_LOGIN_PASSWORDFILE 参数值为EXCLUSIV时,将密码文件只绑定到一个数据库,并且其他数据库用户账号可以存在于密码文件中。一但创建密码文件,使用这个值可最大化SYSDBA和SYSDOPER连接的安全性。
uninx: $ORACLE_HOME/dbs/orapwinstance_name.ora
windows:%ORACLE_HOME%\database\PWDinstance_name.ora
6 标准数据库审核
SYSDBA审核:实例参数AUDIT_SYS_OPERATIONS =TRUE.作为SYSDBA 或SYSOPER连接数据库的用户所发布的每一条语句都会被写入OS的审核跟踪。
审计(Audit)用于监视用户所执行的数据库操作,审计信息可存储于数据字典表,称为审计记录。审计记录存储在SYSTEM表空间中的SYS.AUD$表中,可通过视图DBA_AUDIT_TRAIL查看。审计记录也可以存储在操作系统文件中(默认位置为$ORACLE_BASE/admin/$ORACLE_SID/adump/)。若审计表不存在,则可以通过脚本$ORACLE_HOME/rdbms/admin/cataudit.sql来创建。审计的内容主要包括对数据库连接、SQL语句执行以及数据库对象访问等操作的跟踪记录。Oracle系统对任何用户所做的登录、操作数据库对象进行自动记录,以便使DBA在事后可以进行监督和检查。Oracle 11g默认启用审计,AUDIT_TRAIL参数的缺省值为DB,这意味着审计数据将记录在数据库中的AUD$审计字典基表上。
数据库审计的一些数据字典
DBA_PRIV_AUDIT_OPTS;
DBA_STMT_AUDIT_OPTS;
DBA_OBJ_AUDIT_OPTS;
DBA_FGA_AUDIT_TRAIL;
DBA_AUDIT_OBJECT;
DBA_AUDIT_SESSION;
SYS.AUD$;
DBA_AUDIT_TRAIL;
ALL_DEF_AUDIT_OPTS;
DBA_AUDIT_POLICIES;
名称 |
说明 |
SYS.AUD$ |
唯一保留审计结果的表,其它均为视图。 |
STMT_AUDIT_OPTION_MAP |
包含有关审计选项类型代码的信息,由SQL.BSQ脚本在CREATE DATABASE时创建。 |
AUDIT_ACTIONS |
包含审计跟踪动作类型代码的描述,例如INSERT、DROP VIEW、DELETE、LOGON和LOCK。 |
ALL_DEF_AUDIT_OPTS |
包含默认对象审计选项。 |
USER_OBJ_AUDIT_OPTS |
描述当前用户拥有的所有对象上的审计选项。 |
DBA_AUDIT_TRAIL |
包含标准审计跟踪条目,USER_AUDIT_TRAIL只包含已连接用户的审计行。 |
USER_AUDIT_TRAIL |
显示与当前用户有关的审计跟踪条目。 |
DBA_AUDIT_OBJECT |
包含系统中所有对象的审计跟踪记录。 |
DBA_AUDIT_SESSION |
列出涉及CONNECT和DISCONNECT的所有审计记录。 |
USER_AUDIT_SESSION |
列出涉及当前用户的CONNECT和DISCONNECT的所有审计跟踪记录。 |
DBA_AUDIT_STATEMENT |
列出涉及数据库全部的GRANT、REVOKE、AUDIT、NOAUDIT和ALTER SYSTEM语句的审计跟踪记录。 |
DBA_AUDIT_EXISTS |
列出BY AUDIT NOT EXISTS产生的审计跟踪条目。 |
DBA_AUDIT_POLICIES |
记录了数据库中的细粒度审计策略定义。 |
DBA_FGA_AUDIT_TRAIL |
列出基于值的审计跟踪记录。 |
DBA_STMT_AUDIT_OPTS |
对语句生效的审计选项。 |
DBA_PRIV_AUDIT_OPTS |
对系统权限生效的审计选项。 |
DBA_OBJ_AUDIT_OPTS |
对数据库生效的审计选项。 |
处理SYSDBA审核外,ORACLE提供了下列三种审核技术
数据库审核 实例参数AUDIT_TRAIL view DBA_AUDIT_TRAIL(子集DBA_AUDIT_OBJECT,DBA_AUDIT_STATEMENT,DBA_AUDIT_SESSION)
NONE/FALSE 禁用数据库审核
OS:审核记录写入OS的审核跟踪(windows :windows Application log 文件夹,Linux :AUDIT_FILE_DEST 目录)
DB:审核记录写入SYS.AUT$
DB_EXTENDED:与DB作用大体相同,不过包含具有绑定变量的SQL语句
XML:与OS相同,但使用XML标记设置格式
XML_EXTENDED: 与XML相同,但使用SQL语句和绑定变量
audit create any trigger; audit select any table by session; audit insert on hr.regions whenever successful; audit all on hr.regionsl; autid session whenever not successful;
使用触发器执行基于值的审核
细粒度审核(fine-grained auditing)FGA 视图DBA_FGA_AUDIT_TRAIL ##DBA_COMMON_AUDIT_TRAIL 显示OS审核和FGA审核
涉及包DBMS_FGA,ADD_POLICY的参数(OBJECT_SCHEMA,OBJECT_NAME.POLICY_NAME,AUDIT_CONDITION,AUDIT_COLUM,HANDLER_SCHEMA,HANDLER_MODULE,ENABLE,STATEMENT_TYPES,AUDIT_TRAIL,AUDIT_COLUMN_OPTS)
execute dbms_fga.add_policy(object_schema=>'HR',object_name=>'employees',policy_name=>'POL1',audit_condition=>‘department_id=90',audit_column='SALARY');