1.安全管理功能简介

安全功能

简介

用户标识与鉴别

可以通过登录帐户区别各用户,并通过口令方式防止用户被冒充

自主访问控制

通过权限管理,使用户只能访问自己权限内的数据对象

强制访问控制

通过安全标记,使用户只能访问与自己安全级别相符的数据对象

审计

审计人员可以查看所有用户的操作记录,为明确事故责任提供证据支持

通信、存储加密

用户可以自主的将数据以密文的形式存储在数据库中。也可以对在网络上传输的数据进行加密

加密引擎

用户可以用自定义的加密算法来加密自己的核心数据

资源限制

可以对网络资源和磁盘资源进行配额设置,防止恶意资源抢占

客体重用

实现了内存与磁盘空间的释放清理,防止信息数据的泄露

2.用户标识与鉴别

DM 数据库采用“三权分立”或“四权分立”的安全机制,将系统中所有的权限按照类型进行划分,为每个管理员分配相应的权限,管理员之间的权限相互制约又相互协助,从而使整个系统具有较高的安全性和较强的灵活性。

可在创建 DM 数据库时通过建库参数 PRIV_FLAG 设置使用“三权分立”或“四权分立”安全机制,0 表示“三权分立”,1表示“四权分立”。此参数仅在DM安全版本下提供,即仅DM安全版本提供“四权分立”安全机制,缺省采用“三权分立”安全机制。

使用“三权分立”安全机制时,DM 数据库会预设数据库管理员账号 SYSDBA、数据库安全员账号SYSSSO和数据库审计员账号SYSAUDITOR,其缺省口令都与用户名一致。

使用“四权分立”的安全机制时,在“三权分立”的基础上,新增数据库对象操作员账户 SYSDBO,其缺省口令为 SYSDBO。

windowsmysql三权分离_数据库

用SYSDBA登录执行alter user SYS IDENTIFIED BY "SYSSYSSYS";;将SYS口令修改后,登录SYS用户报错:用户名或密码错误,原因可能是这样(参考ORACLE):

所有DM的数据字典的基表和视图都存放在sys用户中,这些基表和视图对于oracle的运行是至关重要的,由数据库自己维护,任何用户都不能手动更改。

3.自主访问控制

自主访问控制(Discretionary Access Control,DAC)是这样一种访问控制方式:由数据库对象的拥有者自主决定是否将自己拥有的对象的部分或全部访问权限授予其他用户。

3.1权限管理

3.1.1数据库权限

DM 提供了 100 余种数据库权限

完整的预定义角色权限列表请参见《DM8安全管理》附录1和附录2

常用的几种数据库权限

数据库权限

说明

CREATE TABLE

在自己的模式中创建表的权限

CREATE VIEW

在自己的模式中创建视图的权限

CREATE USER

创建用户的权限

CREATE TRIGGER

在自己的模式中创建触发器的权限

ALTER USER

修改用户的权限

ALTER DATABASE

修改数据库的权限

CREATE PROCEDURE

在自己模式中创建存储程序的权限

通过INI参数ENABLE_DDL_ANY_PRIV限制DDL相关的ANY数据库权限的授予与回收:l

1:可以授予和回收DDL相关的ANY系统权限;

0:不可以授予和回收DDL相关的ANY系统权限。缺省为0。

3.1.2对象权限

表、视图、存储过程、包、类、类型、序列、目录、域

windowsmysql三权分离_DM_02

对象权限回收时不能带列清单,举例如下:

如果把某表某一列的查询权限授予了某用户,不能直接收回该列的查询权限,如下图:

windowsmysql三权分离_big data_03

解决方法:先把整个表的查询权限授予该用户,然后收回该表的查询权限。

3.2角色管理

3.2.1预定义角色

在DM数据库中有两类角色,一类是 DM 预设定的角色,一类是用户自定义的角色。DM提供了一系列的预定义角色以帮助用户进行数据库权限的管理。预定义角色在数据库被创建之后即存在,并且已经包含了一些权限,数据库管理员可以将这些角色直接授予用户。

完整的预定义角色权限列表请参见《DM8安全管理》附录1和附录2

三权分立SYSDBA下的角色:

DBA

DM数据库系统中对象与数据操作的最高权限集合,拥有构建数据库的全部特权,只有DBA才可以创建数据库结构

RESOURCE

可以创建数据库对象,对有权限的数据库对象进行数据操纵,不可以创建数据库结构

PUBLIC

不可以创建数据库对象,只能对有权限的数据库对象进行数据操纵

VTI

具有系统动态视图的查询权限,VTI默认授权给DBA且可转授

SOI

具有系统表的查询权

三权分立SYSAUDITOR下的角色:

DB_AUDIT_ADMIN

数据库审计的最高权限集合,可以对数据库进行各种审计操作,并创建新的审计用户

DB_AUDIT_OPER

可以对数据库进行各种审计操作,但不能创建新的审计用户

DB_AUDIT_PUBLIC

不能进行审计设置,但可以查询审计相关字典表

DB_AUDIT_VTI

具有系统动态视图的查询权限,DB_AUDIT_VTI默认授权给 DB_AUDIT_ADMIN且可转授

DB_AUDIT_SOI

具有系统表的查询权限

强制访问控制功能仅在DM安全版中提供

DB_POLICY_ADMIN

数据库强制访问控制的最高权限集合,可以对数据库进行强制访问控制管理,并创建新的安全管理用户

DB_POLICY_OPER

可以对数据库进行强制访问控制管理,但不能创建新的安全管理用户

DB_POLICY_PUBLIC

不能进行强制访问控制管理,但可以查询强制访问控制相关字典表

DB_POLICY_VTI

具有系统动态视图的查询权限,DB_POLICY_VTI默认授权给DB_POLICY_ADMIN且可转授

DB_POLICY_SOI

具有系统表的查询权限

3.2.2角色的启用与禁用

某些时候,用户不愿意删除一个角色,但是却希望这个角色失效,此时可以使用DM系统过程SP_SET_ROLE来设置这个角色为不可用,将第二参数置为0表示禁用角色。比如:

SP_SET_ROLE('BOOKSHOP_ROLE1',0);

注意:

1.只有拥有ADMIN_ANY_ROLE权限的用户才能启用和禁用角色,并且设置后立即生效;

2.凡是包含禁用角色A的角色M,M中禁用的角色A将无效,但是M仍有效;

3.系统预设的角色是不能设置的,如:DBA、PUBLIC、RESOURCE。

4.审计

DM审计信息存储在审计文件中。审计文件默认存放在数据库的SYSTEM_PATH指定的路径,即数据库所在路径。用户也可在dm.ini文件中添加(dm.ini里原本没有这个参数)参数AUD_PATH来指定审计文件的存放路径。

审计文件命名格式为“AUDIT_GUID_创建时间.log”,其中“GUID”为DM给定的一个唯一值。

审计文件的大小可以通过DM的INI参数AUDIT_MAX_FILE_SIZE指定。当单个审计文件超过指定大小时,系统会自动切换审计文件,自动创建新的审计文件,审计记录将写入新的审计文件中。AUDIT_MAX_FILE_SIZE为动态系统级参数,缺省值为100M,DBA用户可通过系统过程SP_SET_PARA_VALUE对其进行动态修改,有效值范围为1~4096M。

dm.ini文件中只能搜到框起来的四个参数,(前两个是只读):

windowsmysql三权分离_强制访问控制_04

select PARA_NAME,PARA_TYPE from V$dm_INI where "V$DM_INI".PARA_NAME like '%AUD%';

windowsmysql三权分离_windowsmysql三权分离_05

 

windowsmysql三权分离_数据库_06

若系统审计人员已对历史审计信息进行了充分分析,不再需要某个时间点之前的历史审计信息,可使用下面的系统过程删除指定时间点之前的审计文件,但是不会删除DM当前正在使用的审计文件。

SP_DROP_AUDIT_FILE(
TIME_STR VARCHAR(128),
TYPE INT
);

TIME_STR:指定的时间字符串

TYPE:审计文件类型,0 表示删除普通审计文件,1 表示删除实时审计文件

SP_DROP_AUDIT_FILE('2015-12-6 16:30:00',0);

审计记录内容包括操作者的用户名、所在站点、所进行的操作、操作的对象、操作时间、当前审计条件等。审计用户可以通过动态视图SYSAUDITOR.V$AUDITRECORDS查询系统默认路径下的审计文件的审计记录。

4.1审计开关

在DM系统中,专门为审计设置了开关,要使用审计功能首先要打开审计开关。审计开关由过程VOID SP_SET_ENABLE_AUDIT(param int);控制,过程执行完后会立即生效,param有三种取值:

0:关闭审计

1:打开普通审计

2:打开普通审计和实时审计

查看审计开关参数值:

SELECT * FROM V$DM_INI WHERE PARA_NAME='ENABLE_AUDIT';

4.2审计的设置与取消

数据库审计员指定被审计对象的活动称为审计设置,只有具有AUDIT DATABASE权限的审计员才能进行审计设置。DM提供审计设置系统过程来实现这种设置,被审计的对象可以是某类操作,也可以是某些用户在数据库中的全部行踪。只有预先设置的操作和用户才能被DM系统自动进行审计。

审计设置存放于DM字典表SYSAUDITOR.SYSAUDIT中,进行一次审计设置就在SYSAUDIT中增加一条对应的记录,取消审计则删除SYSAUDIT中相应的记录。

如果用户执行的一条语句与设置的若干审计项都匹配,只会在审计文件中生成一条审计记录。

在进行数据库审计时,审计员之间没有区别,可以审计所有数据库对象,也可取消其他审计员的审计设置。

审计级别

说明

系统级

系统的启动与关闭,此级别的审计无法也无需由用户进行设置,只要审计开关打开就会自动生成对应审计记录

语句级

导致影响特定类型数据库对象的特殊SQL或语句组的审计。如AUDIT TABLE将审计CREATE TABLE、ALTER TABLE和DROP TABLE等语句

对象级

审计作用在特殊对象上的语句。如test表上的INSERT语句

4.2.1语句级

设置:

SP_AUDIT_STMT(
TYPE VARCHAR(30),
USERNAME VARCHAR (128),
WHENEVER VARCHAR (20)
)

TYPE:语句级审计选项

USERNAM:用户名,NULL表示不限制

WHENEVER:审计时机,可选的取值为:

ALL:所有的

SUCCESSFUL:操作成功时

FAIL:操作失败时

例如:

SP_NOAUDIT_STMT('TABLE','NULL', 'ALL');

取消:

SP_NOAUDIT_STMT(
TYPE VARCHAR(30),
USERNAME VARCHAR(128),
WHENEVER VARCHAR(20)
)

语句级审计选项包括:

ALL,USESR,TABLESPACE,SCHEMA,TABLE,SELECT TABLE,DELETE TABLE,UPDATE TABLE,INSERT TABLE,REVOKE,GRANT,VIEW,INDEX,PROCEDURE,EXCUTE PROCEDURE,TRIGGER,SEQUENCE,CRANT,RECOKE,DIMP,DEXP,FLDR,CONTEXT等。

4.2.2对象级

windowsmysql三权分离_windowsmysql三权分离_07

对于UPDATE和DELETE操作,因为也需要做SELECT操作,所以只要设置审计SELECT操作时,UPDATE和DELETE也会作为SELECT操作被审计。

SP_AUDIT_OBJECT(
TYPE VARCHAR(30),
USERNAME VARCHAR (128),
SCHNAME VARCHAR (128),
TVNAME VARCHAR (128),
COLNAME VARCHAR (128),
WHENEVER VARCHAR (20)
)

TVNAME:表、视图、存储过程名不能为空

COLNAME:列名(这个参数可以不写)

例如:

SP_AUDIT_OBJECT('INSERT','SYSDBA','PERSON','ADDRESS','SUCCESSFUL');

取消对象级审计:SP_NOAUDIT_OBJECT(参数和上面完全一样);

4.2.3语句序列审计

DM还提供了语句序列审计功能,作为语句级审计和对象级审计的补充。语句序列审计需要审计员预先建立一个审计规则,包含N条SQL语句(SQL1,SQL2……),如果某个会话依次执行了这些SQL语句,就会触发审计。

第一步:

SP_AUDIT_SQLSEQ_START(
NAME VARCHAR (128)
)

第二步(若干次):

SP_AUDIT_SQLSEQ_ADD(
NAME VARCHAR (128),
SQL VARCHAR (8188)
)

第三步:

SP_AUDIT_SQLSEQ_END(
NAME VARCHAR (128)
)

例如:

SP_AUDIT_SQLSEQ_START('AUDIT_SQL1');
SP_AUDIT_SQLSEQ_ADD('AUDIT_SQL1', 'SELECT NAME FROM TEST1;');
SP_AUDIT_SQLSEQ_ADD('AUDIT_SQL1', 'SELECT ID FROM TEST2;');
SP_AUDIT_SQLSEQ_ADD('AUDIT_SQL1', 'SELECT * FROM TEST3;');
SP_AUDIT_SQLSEQ_END('AUDIT_SQL1');

删除:

SP_AUDIT_SQLSEQ_DEL(
NAME VARCHAR (128)
)

4.2.4审计文件管理

审计文件命名格式为“AUDIT_GUID_创建时间.log”,其中“GUID”为DM给定的一个唯一值。

通过设置DM的INI参数AUDIT_FILE_FULL_MODE进行配置。当将AUDIT_FILE_FULL_MODE置为1时,将删除最老的审计文件,直至有足够的空间创建新审计文件。若将所有可以删除的审计文件都删除后空间仍旧不够,则数据库会挂起不再处理任何请求,直至磁盘空间被清理出足够创建新审计文件的空间;当将AUDIT_FILE_FULL_MODE置为2时,将不再写审计记录,默认值为1。AUDIT_FILE_FULL_MODE为静态参数,可通过系统过程SP_SET_PARA_VALUE进行修改,但是修改需要重新启动DM数据库服务器才能生效。

两种策略都会导致审计记录的缺失,因此,管理员应该及时对审计文件进行备份。

4.2.5审计信息查阅

当使用 DM 提供的审计机制进行了审计设置后,这些审计设置信息都记录在数据字典表SYSAUDITOR.SYSAUDIT 中。

windowsmysql三权分离_数据库_08

审计记录内容包括操作者的用户名、所在站点、所进行的操作、操作的对象、操作时间、当前审计条件等。审计用户可以通过动态视图 SYSAUDITOR.V$AUDITRECORDS查询系统默认路径下的审计文件的审计记录。该视图的结构如下:

windowsmysql三权分离_数据库_09