DM 数据库安装后会预设若干管理用户。安全机制不同,管理员职责划分也不同。
三权分立下主要有:
SYSDBA:数据库管理员,负责数据库建设、维护、备份恢复、性能管理等。
SYSSSO:数据库安全员,负责安全策略和强制访问控制相关管理。
SYSAUDITOR:数据库审计员,负责设置审计策略、查看和分析审计记录。
四权分立在三权分立基础上增加SYSDBO,即数据库对象操作员。四权分立下,SYSDBA更偏向系统管理与维护,数据对象的创建和数据操作职责会进一步拆给SYSDBO。
审计员预定义用户名为SYSAUDITOR,安全管理相关脚本中应保持名称一致。
(1)创建用户与修改密码
示例:创建普通用户testuser001。
创建用户:CREATE USER testuser001 IDENTIFIED BY Welcome_1;
修改密码:ALTER USER testuser001 IDENTIFIED BY Welcome_2;
创建完成后,使用disql验证登录。新用户能登录,但没有建表权限,直接创建表会报权限不足,赋予权限:
disql testuser001/Welcome_2
SELECT USER();
CREATE TABLE test1(tid NUMBER,tname VARCHAR2(20));
(2)锁定与解锁用户
用户锁定和解锁使用ALTER USER:
ALTER USER testuser001 ACCOUNT LOCK;
ALTER USER testuser001 ACCOUNT UNLOCK;
用户状态可以从数据字典视图中查询,例如查看用户名、账号状态和概要文件:
SELECT USERNAME, ACCOUNT_STATUS, PROFILE FROM DBA_USERS WHERE USERNAME = ‘TESTUSER001’;
DM提供多种用户身份验证模式来保护对数据库访问的安全,包括数据库身份验证、基于操作系统的身份验证、LDAP 身份验证、SSL 双因子身份验证、KERBEROS 身份验证、UKEY 身份验证和 RADIUS 身份验证。
数据库身份验证需要利用数据库口令进行身份验证,即在创建或修改用户时指定用户口令,用户在登录时输入对应口令进行身份验证。
基于操作系统的身份验证支持本机验证和远程验证
本机验证需要将 DM 配置文件 dm.ini 的 ENABLE_LOCAL_OSAUTH 参数设置为 1,表示支持本机验证。该参数为静态参数,数据库管理员可以使用系统过程 SP_SET_PARA_VALUE 进行修改,但修改后需要重新启动 DM 服务器才能生效。
本机验证需要首先将操作系统用户加入到操作系统的 dmdba|dmsso|dmauditor 用户组,分别对应数据库的 SYSDBA|SYSSSO|SYSAUDITOR 用户。也可以将操作系统用户加入到操作系统的 dmusers 用户组,对应数据库的同名用户,即此时数据库中需要存在一个与操作系统用户同名的用户。
远程验证需要借助 SSL 数字证书来完成,用户需要拥有自己的 SSL 数字证书,并为 DM 服务器以及 DM 客户端或接口均配置好 SSL 环境。
远程验证需要将 DM 配置文件 dm.ini 的 ENABLE_REMOTE_OSAUTH 参数设置为 1,表示支持远程验证。同时需要将 ENABLE_ENCRYPT 参数设置为 1,表示开启 SSL 通信加密。
上述参数均为静态参数,数据库管理员可以使用系统过程 SP_SET_PARA_VALUE 进行修改,但修改后需要重新启动 DM 服务器才能生效。由于开启了 SSL 通信加密,因此重启 DM 服务器之前必须保证当前服务器 SSL 环境配置完成,否则服务器无法正常启动。
PROFILE可以理解为用户资源和口令策略的集中配置。用户关联到某个PROFILE后,登录失败次数、锁定时间、口令有效期、口令重用规则、会话资源等限制可以统一管理。
示例:限制用户密码错误次数,连续失败3次后退出登录。
当连续使用错误密码登录时,第一次会提示用户名或密码错误,超过限制后会提示登录失败次数超过限制
资源限制有两种管理方式:用户关联到已有PROFILE,资源限制由PROFILE统一管理;用户未关联PROFILE,直接通过LIMIT管理。
常见资源限制项包括:
FAILED_LOGIN_ATTEMPTS:连续登录失败多少次后锁定。
PASSWORD_LOCK_TIME:用户被锁定的时间。
PASSWORD_LIFE_TIME:口令有效期。
PASSWORD_REUSE_TIME、PASSWORD_REUSE_MAX:控制旧口令何时可重用。
SESSION_PER_USER、CONNECT_TIME、CONNECT_IDLE_TIME:控制会话数量和连接时间。
可以通过GRANT语句将权限(包括数据库权限、对象权限、角色权限和模式权限)分配给用户和角色,之后也可以使用REVOKE语句将授出的权限再进行回收。
示例:SYSDBA授权testuser001创建表的权限,并且可以转授权给其他用户(WITH ADMIN OPTION)。
在testuser001可以查询到创建表和转授权。
使用testuser001授权创建表给testuser002。
在testuser002可以查询到创建表的权限。
(2)数据库权限回收
示例:SYSDBA收回testuser001创建表的转授权限。
在testuser001可以查询到已经没有转授创建表的权限。
SYSDBA收回testuser002创建表的权限。
在testuser002可以查询到已经没有创建表的权限。
(1)对象权限分配
示例:SYSDBA把SYSDBA.test表的全部权限授给用户testuser001。
在testuser001用户下可以查询到SYSDBA.test表中内容。
(2)对象权限回收
示例:SYSDBA把SYSDBA.test表的全部权限从用户testuser001回收。
在testuser001用户没有查询权限,无法查询到SYSDBA.test表中内容。
CASCADE 表示级联回收,可回收授予时带或不带 **WITH GRANT OPTION **的权限,若带 WITH GRANT OPTION 还会引起级联回收。
级联回收指不仅收回该用户或角色直接拥有的权限,还同时回收所有因该用户或角色而间接获得这些权限的其他用户或角色的权限。
例如:A 将 SELECT 授权(选择了 WITH GRANT OPTION)给 B,B 转授给 C,则使用 CASCADE 选项收回 A 的 SELECT 权限时,会将 B 和 C 的 SELECT 权限一同收回。利用此选项时不会检查权限是否存在依赖等限制。另外,利用此选项进行级联回收时,若被回收对象上存在另一条路径授予同样权限给该对象时,则仅需回收当前权限。
RESTRICT 表示限制回收,只能回收授予时不带 WITH GRANT OPTION 的权限。无法回收授予时带 WITH GRANT OPTION 的权限,也无法回收存在依赖等限制的权限(如角色上的某权限被别的用户用于创建视图等)。
缺省 < 回收选项 >,表示无法回收授予时带 WITH GRANT OPTION 的权限,但也不会检查要回收的权限是否存在依赖等限制。
角色是一组权限的组合,使用角色的目的是使权限管理更加方便。
创建角色test_role1:CREATE ROLE test_role1;
授予查询SYSDBA.test权限:GRANT SELECT ON SYSDBA.test TO test_role1;
删除角色test_role1:DROP ROLE test_role1;
禁用角色:SP_SET_ROLE(‘TEST_ROLE1’,0);
启用角色:SP_SET_ROLE(‘TEST_ROLE1’,1);
将角色TEST_ROLE1的权限授予testuser001
将角色TEST_ROLE1的权限从testuser001回收
首先再dm.ini文件中将GRANT_SCHEMA设置为1。
将testuser001模式下所有表的查询权限授予testuser002;
创建表test_schema,并插入测试数据。
从testuser002可以查询到插入数据。
收回testuser002对testuser001模式下所有表的查询权限。
在testuser002下无法查询testuser001模式下表。
创建用户语句中的PASSWORD_POLICY子句用来指定该用户的口令策略,口令策略可以设置为15或31,含义如下:
15口令:禁止与用户名相同,口令长度需大于等于INI参数PWD_MIN_LEN设置的值,口令最长为48字节,至少包含一个大写字母(A-Z)和一个小写字母(a-z),至少包含一个数字(0-9)
31口令:禁止与用户名相同,口令长度需大于等于INI参数PWD_MIN_LEN设置的值,口令最长为48字节,至少包含一个大写字母(A-Z)和一个小写字母(a-z),至少包含一个数字(0-9),至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)
示例:
查看密码策略
SELECT PARA_NAME ,PARA_VALUE FROM VDMINIWHERE"VDM_INI".PARA_NAME = ‘PWD_POLICY’
修改密码策略(只针对新的用户生效)
ALTER SYSTEM SET ‘PWD_POLICY’=31 BOTH;
查看密码过期策略
SELECT A.USERNAME,B.LIFE_TIME ,GRACE_TIME FROM ALL_USERS A ,SYSUSERS B WHERE A.USER_ID =B.ID
修改密码有效期90天,宽限期30天
ALTER USER 用户名 LIMIT PASSWORD_LIFE_TIME 90, PASSWORD_GRACE_TIME 30;
查看失败处理策略
SELECT A.USERNAME,B.LOCK_TIME , b.FAILED_ATTEMPS ,b.CONN_IDLE_TIME FROM ALL_USERS A ,SYSUSERS B WHERE A.USER_ID =B.ID
修改用户登录失败三次,锁定1分钟,空闲连接时间10分钟
ALTER USER 用户名 LIMIT PASSWORD_LOCK_TIME 1 , FAILED_LOGIN_ATTEMPS 3 ,CONNECT_IDLE_TIME 10;
审计开关由SP_SET_ENABLE_AUDIT控制:
0:关闭审计。
1:打开普通审计。
2:打开普通审计和实时审计。
查询当前审计开关:
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME = ‘ENABLE_AUDIT’;
开启普通审计需要使用审计员用户:
CONN SYSAUDITOR/QWEasd~123;
SP_SET_ENABLE_AUDIT(1);
AUDIT_SPACE_LIMIT:限制审计文件总存储空间大小,INI参数,取值范围为204800~1024*1024M,0表示不限制,缺省为0。静态参数,可通过系统过程SP_SET_PARA_VALUE进行修改,但是修改需要重新启动DM数据库服务器生效。
AUDIT_MAX_FILE_SIZE:单个审计文件的大小,INI参数。当单个审计文件超过指定大小时,系统会自动切换审计文件,自动创建新的审计文件,审计记录将写入新的审计文件中。动态系统级参数,有效值范围为8~4096M,缺省值为100M,DBA用户可通过系统过程SP_SET_PARA_VALUE对其进行动态修改。
AUDIT_KEEP_DAYS:指定审计文件最小保留天数,INI参数,取值范围为0~3660天,即使达到审计文件总存储空间大小限制(即AUDIT_SPACE_LIMIT设置的值)也不会删除在指定保留天数内的审计文件。只有最老审计日志文件的保留天数超过AUDIT_KEEP_DAYS才会根据AUDIT_FILE_FULL_MODE设定值来处理老的审计文件。
AUDIT_FILE_FULL_MODE:设置为1时,将删除最老的审计文件,直至有足够的空间创建新审计文件,若将所有可以删除的审计文件都删除后空间仍旧不够,则数据库会挂起不再处理任何请求,直至磁盘空间被清理出足够创建新审计文件的空间;设置为2时,将不再写审计记录;设置为3时,结合1和2,先尝试删老审计文件,再创建审计文件,若空间仍不足则不再审计,系统会定时检测是否有空余空间,如果有则恢复审计;缺省值为3。AUDIT_FILE_FULL_MODE为静态参数,可通过系统过程SP_SET_PARA_VALUE进行修改,但是修改需要重新启动DM数据库服务器才能生效。
删除指定时间点之前的审计文件:
SP_DROP_AUDIT_FILE( TIME_STR VARCHAR(128), TYPE INT);
TIME_STR:指定的时间字符串。
TYPE:审计文件类型,0表示删除普通审计文件,1表示删除实时审计文件。
设置审计文件加密:
SP_AUDIT_SET_ENC( NAME VARCHAR(128), KEY VARCHAR(128));
NAME:加密算法名,可使用DM支持的加密算法,也支持用户自定义加密算法。
KEY:加密密钥。
切换审计文件:
SP_SWITCH_AUDIT_FILE( AUDIT_SWITCH INT)
AUDIT_SWITCH:切换开关值,取值1或2。1表示切换普通审计文件;2表示同时切 换普通和实时审计文件。对于DSC环境仅切换当前节点审计文件。
系统级审计无法也无需由用户进行设置,只要审计开关打开就会自动生成对应的审计记录。
语句级审计的动作是全局的,不对应具体的数据库对象。
SP_AUDIT_STMT(
TYPE VARCHAR(30),
USERNAME VARCHAR (128),
WHENEVER VARCHAR (20) )
TYPE:语句级审计选项。
USERNAME :用户名,NULL表示不限制。
WHENEVER :审计时机,可选的取值为:ALL:所有的;SUCCESSFUL:操作成功时;FAIL:操作失败时。
示例:审计所有用户登录/登出,无论成功失败
SP_AUDIT_STMT(‘LOGIN’,‘ALL’,‘ALL’);
SP_AUDIT_STMT(‘LOGOUT’,‘ALL’,‘ALL’);
审计DDL建表、删表、修改用户
SP_AUDIT_STMT(‘CREATE TABLE’,‘ALL’,‘ALL’);
SP_AUDIT_STMT(‘DROP TABLE’,‘ALL’,‘ALL’);
SP_AUDIT_STMT(‘ALTER USER’,‘ALL’,‘ALL’);
对象级审计发生在具体的对象上,需要指定模式名以及对象名。
SP_AUDIT_OBJECT(
TYPE VARCHAR(30),
USERNAME VARCHAR (128),
SCHNAME VARCHAR (128),
TVNAME VARCHAR (128),
WHENEVER VARCHAR (20) )
TYPE:对象级审计选项。
USERNAME:用户名。为空串或NULL时表示不限定用户。
SCHNAME:模式名。为空串或NULL时表示不限定模式。
TVNAME:表名、视图名、存储过程名。不支持取值为空串或NULL。
COLNAME:列名。为空串或NULL时表示不限定列。
WHENEVER :审计时机,可选的取值为:ALL:所有的;SUCCESSFUL:操作成功时;FAIL:操作失败时。
示例:审计敏感表所有查询、新增、修改、删除操作
SP_AUDIT_OBJECT(‘SELECT,INSERT,UPDATE,DELETE’,‘APP_USER’,‘FINANCE_DATA’,‘ALL’);
使用下面的系统过程取消对象级审计。
SP_NOAUDIT_OBJECT (
TYPE VARCHAR(30),
USERNAME VARCHAR (128),
SCHNAME VARCHAR (128),
TVNAME VARCHAR (128),
WHENEVER VARCHAR (20))
客户端与服务端SSL传输加密。
ENABLE_ENCRYPT 取值 0、1、2、3、4 或 5,缺省值为 0。
0:通信数据不经 SSL 加密,通信双方也不进行证书验证。
1:通信数据会被加密,并且通信双方需要交换并验证对方证书是否匹配。
2:通信数据不会被加密,但通信双方会交换并验证对方证书是否匹配。
4:通信数据会被加密,但通信双方不需要验证证书。
5:通信数据会被加密,仅客户端会验证服务器端证书。
6:通信数据基于商密 TLCP 协议加密,通信双方交换并验证对方证书是否匹配。
ALTER SYSTEM SET ENABLE_ENCRYPT=2 BOTH;
开启强制 SSL 后,所有应用连接串必须配置证书,否则无法连接。
非SSL模式下,登录用户名、密码强制证书加密传输。
0:关闭;1:开启;静态参数,重启生效。
ALTER SYSTEM SET FORCE_CERTIFICATE_ENCRYPTION=1 BOTH;
配套客户端配置 dm_svc.conf
DMSERVER=(127.0.0.1:5236)
SSL_DIR=/dm/ssl
SSL_PROTOCOL=TLSv1.2
在透明加密中,密钥生成、密钥管理和加解密过程由数据库管理系统自动完成,用户不可见。透明加密的目的主要是保证存储在数据文件中的敏感数据的安全,并不能保护合法用户的个人私密数据。
全库加密:
对 DM 数据库进行全库加密需要在初始化数据库时通过 ENCRYPT_NAME 参数指定全库加密算法,加密密钥由 DM 自动生成。若初始化数据库时不指定 ENCRYPT_NAME 参数,则不进行全库加密。
系统存储函数 SF_GET_ENCRYPT_NAME() 用于获取全库加密算法名。 未使用全库加密时返回 NULL。
透明表空间加密:
创建密钥
CREATE KEY ENC_KEY WITH PASSWORD “Key@123456”;
创建加密表空间
CREATE TABLESPACE TS_ENCRYPT DATAFILE ‘/dmdata/ts_enc.dbf’ SIZE 128 ENCRYPT WITH ENC_KEY;
创建用户时可以指定存储加密密钥,这个密钥就是为了进行半透明加密时使用的。如果在创建用户时并没有指定存储加密密钥,系统也会自动为用户生成一个默认的存储加密密钥。
创建表或修改表时可以对表列指定半透明加密,指定后 DM 会使用用户的存储加密密钥对数据进行加密。半透明加密列的密文后追加了 4 个字节的 UID,用户查询数据时,若当前会话用户 ID 与列密文数据中存储的 UID 相同,则返回明文,否则返回 NULL。
DM 对非透明加密的支持是通过对用户提供加解密接口实现的。用户在使用非透明加密时,需要提供密钥并调用加解密接口。采用非透明加密可以保证个人私密数据不被包括 DBA 在内的其他人获取。
非透明加密通过用户调用存储加密函数来进行,DM 提供了一系列的存储加密函数,还提供了一个数据加密包 DBMS_OBFUSCATION_TOOLKIT。
文章
阅读量
获赞
