YashanDB安全性(基础篇)
数据库安全功能总览
崖山安全体系概述
- 数据库的安全性原则
一个安全的数据库系统应该能够建立安全保护机制,实施安全管理措施,保护计算机硬件、软件和数据不因偶然和恶意的原因而遭到破坏、更改和泄漏。数据库的安全性要求通常划分为保密性、完整性和可用性(CIA)三个要素。
保密性:数据只能被授权用户访问。数据库通过身份认证 来鉴别用户身份,确认用户可以访问的内容;通过授权管理来管理用户的访问范围。
完整性:数据在存储和传输过程中,非授权情况下原始信息保持非修改、非破坏和非丢失的特性。通常通过SSL安全传输 、数据完整性校验来达到完整性要求。
可用性:数据可被授权用户、实体正确访问,在非正常情况下能恢复使用。通常通过备份 、实时冗余 、防火墙等方式达到可用性要求。
YashanDB实现了以下安全特性和策略
认证:通过不同认证方式如用户口令,验证访问者的身份合法性,任何未通过认证的访问都会被数据库拒绝。认证机制是数据库识别用户身份的过程,是保密性原则的实现基础。
授权:提供细粒度的权限控制,数据库使用者只能权限范围内操作数据库、访问数据。授权机制用于控制数据可以被哪些用户访问,是保密性原则的具体实现。
审计:通过审计机制监视和收集有关数据库活动的数据,对用户危险或者恶意行为进行告警、溯源和阻断,帮助识别数据安全的风险,并满足合规需求。
加密:通过加密技术,避免数据意外泄漏的风险,保证数据的保密性 ,包括存储加密和传输加密。并通过解密等机制来验证数据的完整性。
备份:通过备份恢复技术,以较低成本保证数据的可用性。
实时冗余:通过数据实时冗余技术,保证意外情况下数据库服务的快速恢复以及提高数据的可用性。
入侵检测:通过白名单和监听日志的方式,提供数据库防火墙能力,增强数据的可用性。
崖山数据库安全机制的作用时机
通过IP白名单,SSL连接机制形成第一道防御,防止未授权地址访问、客户端仿冒与网络流量监听等攻击手段。
通过用户权限管理,三权分立形成第二道防御,主要对数据库进行加固,防止越权操作、权限提升、误操作等风险。
通过审计,连接监听等机制形成第三道防御,对数据库所有敏感操作都可以做到有迹可查。
YashanDB的安全机制
为满足不同级别的安全需求,YashanDB提供的安全特性和策略大多可以进行配置或控制开关。在完全不进行任何调整的情况下,YashanDB有一套默认的安全机制,满足系统运行安全和数据安全的基本要求。
用户管理
用户概述
用户分类
YashanDB中的用户分为系统用户与普通用户。
系统用户是预置在YashanDB产品中的用户,其中名称为sys的用户,是超级管理员,负责数据库系统的管理,拥有全部的权限。其密码通过yaspwd工具生成和维护。
普通用户是通过CREATE USER语句创建的用户,对普通用户进行授权后,即可明确其对应的身份。
普通用户的管理
- 普通用户的创建
创建用户即在YashanDB中创建一个账号,需要拥有CREATE USER权限,系统中第一个普通用户由sys用户来创建。
创建一个普通用户,应考虑以下设置:账号名称,密码,profile,默认表空间。
账号名称:与身份相关联的有意义的唯一标识符。需注意的是,账号名称不能与系统中已有的用户、角色、权限重名。
密码:在创建用户时,必须同时为其设置符合要求的安全密码。
profile:创建用户时可以指定一个用户自定义的profile,或者不指定采用默认的profile。profile中定义了密码策略,从而确定所创建用户的密码策略。
默认表空间:用户的默认表空间表示,当该用户下所有的对象在未指定表空间时,默认存储在此表空间。如果不为用户指定此信息,则默认表空间为系统在建库时创建的的DEFAULT表空间。
用户成功创建后,可以在DBA_USERS视图中查询用户相关信息。
sql
CREATE USER username IDENTIFIED BY 123; -- 创建一个用户username,密码为123
CREATE USER username2 IDENTIFIED BY PASSWORD DEFAULT TABLESPACE users ;-- 创建一个用户username2,密码为字符串PASSWORD,默认表空间为users表空。
CREATE USER ycp IDENTIFIED BY 123 PROFILE DEFAULT; -- 创建一个用户ycp,密码123,密码策略指定为default(default是系统内置的默认profile)
- 普通用户的授权
用户账号创建完成后,还须赋予其身份对应的权限,用户才能正常登录和使用数据库。
基本权限:CREATE SESSION为用户的最基本权限,拥有此权限后才可以登录数据库。
业务权限:数据库新建的用户一般都是为业务服务,因此应该让其拥有一些系统级权限,如创建表对象等。同时,建议通过角色来分类分级管理用户权限。
sql
-- 将内置角色RESO URCE,CO NNECT授予用户ycp
GRANT RESOURCE TO ycp;
GRANT CONNECT TO ycp; -- 除了使用角色赋权之外,还可以直接将系统权限和对象权限赋予给用户。
-- 通过查看 DBA_SYS_PRIVS 验证内置角色的系统权限
- 普通用户的修改
修改用户是指修改用户对应的身份信息,如密码,profile,默认表空间等,或者对用户进行管控操作,如失效密码、锁定账号等。
执行修改用户的操作需要拥有ALTER USER权限。
普通用户的修改示例
sql
ALTER USER ycp IDENTIFIED BY "23%ad1"; -- 修改用户密码
ALTER USER ycp DEFAULT TABLESPACE users ; -- 修改用户的表空间
ALTER USER ycp PASSWORD EXPIRE; -- 使用户密码失效
ALTER USER ycp ACCOUNT LOCK/UNLOCK; -- 锁定/解锁用户
ALTER USER ycp PASSWO RD EXPIRE ACCO UNT LO CK; -- 使用户密码失效,且锁定用户
- 普通用户的删除
当某用户不再需要使用时,且该用户下所有对象也不再需要使用时,可将其删除。
执行删除用户的操作需要拥有DELETE USER权限。
使用DROP USER语句可执行删除用户的操作,如指定cascade选项,则同时删除用户所有的对象;如不指定cascade,请保证该用户不包含任何对象,否则将删除失败。
普通用户的删除示例
sql
DROP USER username;
DROP USER username2 CASCADE; -- Caution:
-- 处于登录状态的用户无法删除。
-- 删除过程中,该用户无法登录,也无法为该用户创建对象。
角色管理
系统内置角色介绍
- 系统内置角色列表
自定义角色
- 系统内置角色的查询
查询系统中有哪些内置角色
sql
SELECT * FROM DBA_ROLES WHERE TYPE = 'NORMAL ROLE' AND SYS_MAINTAINED = 'YES' ;
-- TYPE 字段为NORMALROLE代表该行是角色,SYS_MAINTAINED字段为YES是系统内置,为NO是自定义角色。
-- TYPE 字段为 OBJECT ROLE 或者为 SYSTEM ROLE分别代表对象权限名称或者系统权限名称。
- 系统内置角色的查询
这些内置角色分别有哪些系统权限
sql
SELECT a.*
FROM DBA_SYS_PRIVS a JOIN DBA_ROLES b ON a.GRANTEE = b.ROLE
WHERE b.TYPE = 'NORMAL ROLE' AND b.SYS_MAINTAINED = 'YES' ;
-- GRANTEE字段代表角色名称,PRIVILEGE代表权限名称,ADMIN_OPTION代表授权是否可以转授。查询结果如图(部分)
- 自定义角色的查询
查询系统中有哪些自定义角色
sql
SELECT * FROM DBA_ROLES WHERE TYPE = 'NORMAL ROLE' AND SYS_MAINTAINED = 'NO' ;
-- TYPE 字段为NORMAL ROLE代表该行是角色,SYS_MAINTAINED字段为YES是系统内置,为NO是自定义角色
自定义角色分别有哪些系统权限
sql
SELECT a. * FROM DBA_SYS_PRIVS a JOIN dba_roles b ON a.GRANTEE = b.ROLE WHERE b.TYPE = 'NORMAL ROLE' AND b.SYS_MAINTAINED = 'NO' ;
-- TYPE 字段为NO RMAL RO LE代表该行为角色,SYS_MAI NTAI NED字段为YES是系统内置,为NO是自定义角色。
自定义角色的创建
sql
CREATE ROLE role1;
CREATE ROLE role2; -- 创建2个自定义角色role1,role2
自定义角色的授权
sql
GRANT CREATE TABLE TO role1;
GRANT SELECT ANY TABLE TO role2;
GRANT INSERT ON ycp.t1 TO role2;
GRANT INSERT ON ycp.t2 TO role2;
-- 注意:不能使用with admin/grant option授权系统/对象权限给角色,相关报错:
-- YAS-02218 cannot GRANT to a role WITHOPTION
自定义角色的删除
sql
\-- 删除自定义角色role1,role2
DROP ROLE role1;
DROP ROLE role2;
\-- Caution:
\-- 禁止删除内置角色。
\-- 删除自定义角色会同时删除该角色所有授权记录。
\-- 拥有该角色的用户会延时失去该角色包含的权限,请谨慎删除角色,可能导致业务因权限不足无法正常运行
相关视图
权限相关的系统视图
l权限相关的系统视图说明
sql
DBA_USERS :显示数据库所有用户信息 。
DBA_ROLES :显示数据库所有角色信息 。
DBA_ROLE_PRIVS:显示数据库所有角色的授权信息。
DBA_SYS_PRIVS :显示所有授权的系统权限信息 。
DBA_TAB_PRIVS:显示所有授权的对象权限信息 。
sql
#准备环境
CREATE USER ycp1 IDENTIFIED BY 123;
CREATE USER ycp2 IDENTIFIED BY 123;
CREATE ROLE role1;
CREATE ROLE role2;
CREATE TABLE ycp1.t1( c1 int);
CREATE TABLE ycp2.t2( c1 int);
GRANT UPDATE ANY TABLE TO ycp1;
GRANT INSERT ANY TABLE TO ycp2;
GRANT FLASHBACK ON ycp1.t1 TO ycp2;
GRANT INDEX ON ycp2.t2 TO ycp1;
GRANT ALTER DATABASE TO role1;
GRANT ALTER SYSTEM TO role2;
GRANT SELECT ON ycp1.t1 TO role1;
GRANT DELETE ON ycp2.t2 TO role2;
GRANT role1 TO ycp2;
GRANT role2 TO ycp1;
相关查询
系统权限和对象权限的查看
数据库中有哪些系统权限
sql
SELECT * FROM DBA_ROLES WHERE TYPE = 'SYSTEM ROLE' ;
数据库中有哪些对象权限
sql
SELECT * FROM DBA_ROLES WHERE TYPE = 'OBJECT ROLE' ;
内置角色和自定义角色的查看
系统内置角色
sql
SELECT * FROM DBA_ROLES WHERE TYPE = 'NORMAL ROLE' AND SYS_MAINTAINED = 'YES' ;
自定义角色
sql
SELECT * FROM DBA_ROLES WHERE TYPE = 'NORMAL ROLE' AND SYS_MAINTAINED = 'NO' ;
角色拥有哪些权限
角色拥有哪些系统权限
sql
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'ROLE1' ;
角色拥有哪些对象权限
sql
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE='ROLE1' ;
角色的被授权情况
角色被授权给哪些用户
sql
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTED_ROLE ='ROLE1' ;
用户拥有哪些权限
用户拥有哪些系统权限
sql
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='YCP1' ;
用户拥有哪些对象权限
sql
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE='YCP1' ;
用户的角色授权情况
用户拥有哪些角色
sql
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE='YCP1' ;
权限管理
系统权限管理
授予系统权限示例
sql
GRANT SELECT ANY TABLE TO username;
GRANT SELECT ANY TABLE TO username WITH ADMIN OPTION;
- 执行系统权限授权需注意的要点
为角色授权时,不能使用WITH OPTION。
授权系统权限将立即生效。
避免给非管理员类用户授权管理类系统权限,拥有管理类系统权限可能导致用户发起损坏系统表等高危操作,导致数据库出现高危故障。
- 执行系统权限回收需要满足至少一条如下条件:
回收授权者拥有需要回收授权的系统权限,且带ADMIN OPTION。
回收授权者拥有GRANT ANY PRIVILEGE系统权限。
回收授权者拥有SECURITY_ADMIN安全管理员角色。
- 执行系统权限回收的操作步骤为:
以满足上述条件的用户账号登录YashanDB。
使用REVOKE语句对另一个用户或角色发起系统权限回收操作。
sql
REVOKE SELECT ANY TABLE FROM username;
- 执行系统权限回收需注意的要点
回收系统权限立即生效。
回收系统权限可能使某些数据库业务无权限运行,请谨慎操作。
用户权限管理
管理员管理
- 使用sys用户执行所有管理操作可能带来非常大的安全风险:
sys为YashanDB的特权账号,拥有完全的权限,可以执行对数据库执行所有的操作,存在可能误操作导致严重故障的风险。
使用sys账号所执行的操作在日志或记录表中均标记为sys,无法追踪回溯到实际的人员。
如将sys账号应用于数据库的日常管理中,使用频度过高,很容易成为黑客窃取口令的目标,一旦窃取成功,将使整个数据库系统被暴露,造成严重后果。
崖山数据库三权分立概述
在计算机信息系统的等保要求(3级及以上标准)中,提出数据库系统必须要采用"三权分立"的权限体系。
三权分立是对数据库管理权限的划分,让管理员能够独立行使权力,但又相互制约,可以有效避免所有的管理权限集中到一个地方的风险。
三权分立也是对数据库管理人员的职责划分,目的是使不同的管理职位各司其职,行使不同角色,互相限制和监督,保障系统整体安全。因此,开启三权分立影响的是各管理用户的系统权限,对于普通用户,以及用户下的对象权限,将不受到影响。
建议在建库前规划确认好是否使用三权分立模式,如使用在建库时即打开开关,不建议反复切换权限模式。如建库时未打开,但后续确有需要开启时,应该先对当前已有用户的权限集合先进行清理归整。
崖山数据库三权分立模式介绍
YashanDB提供ENABLE_SEPARATE_DUTY参数用于控制三权分立开关,默认关闭,该参数需重启生效。
三权分立对应的内置角色
将上表中的某个角色授权给一个普通用户后,该用户即成为拥有角色包含管理权限的管理员,系统第一个管理员由sys账号创建
用户安全管理配置建议
使用最少权限原则,最少权限原则意味着必须仅为用户授予高效地完成任务所需的权限。这会降低用户修改或查看(无意或恶意)他们无权修改或查看的数据的机率。
不能将管理权限授予非管理用户。比如DBA,SYSDBA,SYSOPER等管理角色,以及DROP ANY TABLE等系统权限。
启用密码强度控制。
使用合适的密码策略。
概要文件
概要文件概述
概要文件的含义
崖山数据库使用概要文件(别名为PROFILE)来限制数据库用户对资源的使用。如果你将用户设置到特定概要文件,则此用户必须根据概要文件的限制来使用数据库资源。它主要包含对密码策略的设置。
密码策略
密码策略用于在口令认证的过程中,由系统根据策略来规定密码使用限制。
密码策略的具体功能
为防止恶意攻击者反复登录尝试猜出密码,当用户因为密码错误连续登录失败达到阈值时,将被锁定一定时间。用户长时间使用同一密码会影响数据库安全,因此系统对于密码的生命长度进行限制。
系统在用户登录过程中发现密码已使用超过限制天数时,将进行额外宽限期处理,并打印告警日志提示。宽限期过后,该密码完全过期,客户端提示用户输入新密码,用户可以立即更新密码。
为防止用户长时间使用相同密码,用户在设置新密码时还需要满足密码复用限制,不允许复用一定时间内使用过的密码以及最近变更次数内使用过的密码。
概要文件的参数
默认概要文件default
YashanDB预置了一个默认的概要文件,名为default。其包含的密码策略为上述参数的默认值。
**默认概要文件不可删除,**在创建用户时,如果没有显式指定概要文件,则该用户使用默认概要文件。
使用CREATE PROFILE语句可以根据不同的用户需要制订不同的密码策略,并使用ALTER PROFILE、DROPPROFILE语句对概要文件进行修改、删除等操作。
概要文件如何关联用户
所有新创建的用户在未指定概要文件时默认关联到默认的概要文件,受默认的密码策略管控,如指定了某个概要文件,则受该概要文件包含的密码策略管控。
使用CREATE USER和ALTER USER语句可以实现用户与指定profile的关联。
使用概要文件可能带来的风险
如果为应用用户设置的密码错误连续尝试次数过小,可能引起应用用户被锁定的风险。
在生产环境中,建议为应用用户和个人维护用户分别创建不同的概要文件。
自定义密码策略
自定义密码策略的参数值
自定义密码策略时所有参数均可设置为UNLIMITED或DEFAULT,指定具体值时需参考下表
创建自定义密码策略示例
sql
CREATE PROFILE prof_1 LIMIT FAILED_LOGIN_ATTEMPTS 1 PASSWORD_ LIFE_TIME 180;
CREATE PROFILE prof_2 LIMIT FAILED_ LOGIN_ATTEMPTS DEFAULT PASSWORD_ LIFE_TIME 30*2.5;
CREATE PROFILE prof_3 LIMIT FAILED_ LOGIN_ATTEMPTS DEFAULT PASSWORD_ LIFE_TIME UNLIMITED;
CREATE PROFILE prof_4 LIMIT
FAILED_ LOGIN_ATTEMPTS 1
PASSWORD_ LIFE_TIME 180
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
PASSWORD_ LOCK_TIME 1
PASSWORD_GRACE_TIME 0;
sql
-- 修改和删除自定义密码策略示例
ALTER PROFILE prof_1 LIMIT FAILED_LOGIN_AT TEMPTS 1 PASSWORD_ LIFE_TIME 365;
ALTER PROFILE prof_2 LIMIT FAILED_ LOGIN_AT TEMPTS DEFAULT PASSWORD_ LIFE_TIME 30*5;
ALTER PROFILE prof_3 LIMIT FAILED_ LOGI N_ATTEMPTS DEFAULT PASSWORD_ LIFE_TIME DEFAULT;
ALTER USER YCP PROFILE prof_3;
ALTER USER YCP PROFILE DEFAULT;
DROP PROFILE prof_1;
DROP PROFILE prof_2 CASCADE; -- 指定CASCADE表示删除profi le的同时,也删除其与用户的关联关系。这样将使得关联用户使用默认profi le
身份认证
崖山认证方式概述
YashanDB通过以下两种方式对数据库用户进行认证:
口令认证方式:接收使用YashanDB账号发起连接请求的用户,并对其进行口令认证,通过认证的账号可以成功登录数据库。
口令是身份认证的凭据,系统将用户输入的口令与服务端存储的账号密码进行对比,与密码完全一致的口令才能通过认证。
操作系统认证方式:忽略用户输入的YashanDB账号,只对其登录数据库服务器的账号进行认证,通过认证的账号可以成功登录数据库。
操作系统认证方式只允许SYS用户在本地服务器上登录数据库时使用。
口令认证方式
口令认证的实现过程
用户的密码采用加密存储,在存储的密码中添加盐值以有效防止彩虹攻击。认证过程中对用户输入口令进行加密传输,保证密码在存储和传输过程的安全性。
服务端将口令哈希计算后,与存储的密码对比,验证其正确性。YashanDB采用密码文件与系统表配合的方法实现口令认证,并支持在数据库各个状态下的口令认证。
数据库用户密码的存储
存储在数据库表中的密码字段:在创建或修改用户时所设置的密码,这类密码与用户信息一同记录。
存储在数据库服务器上的密码文件:为系统用户SYS所设置的密码,这类密码脱离于数据库表,可满足数据库处于非open状态时的登录认证。
系统用户密码的修改
系统用户SYS可以通过yaspwd、yasboot、或使用ALTER USER语句修改密码。
如果数据库已经在yasboot实施托管,建议使用yasboot修改密码,避免工具无法连接管理数据库。
修改系统用户密码示例
sql
ALTER USER SYS IDENTIFIED BY "yasdb_123"; -- alter user方法修改密码
cd $YASDB_DATA/ ins tance/
yaspwd file=yasdb.pwd password=yasdb_123 ## yaspwd工具修改密码
yasboot cluster password set -n newpasswd -c yashandb ## yasboot工具修改密码
普通用户密码的修改
普通用户的密码可以使用ALTER USER语句修改。
普通用户可以主动修改自己的密码,或由其所属的密码策略进行触发修改。
修改普通用户密码时,如果该用户用于业务应用连接数据库,则需同步修改应用配置,避免应用侧多次使用错误密码登录,导致用户被锁定。
普通用户密码修改示例
sql
-- 一、 alter user方法修改密码
ALTER USER ycp IDENTIFIED BY sys1;
-- 二、alter user by values 的方式修改密码
SELECT * FROM USER_USERS; --1.找到密码密文并保存
ALTER USER ycp IDENTIFIED BY 123; -- 2.修改为其他密码
ALTER USER ycp IDENTIFIED BY VALUES 密码密文; -- 3.使用密码密文修改密码到变更前
密码强度控制
对于存储在密码文件中的密码,系统已启用强度控制,在密码设置时要求满足一定的复杂度要求。
对于存储在数据库表中的密码,YashanDB提供_CHECK_PASSWORD_COMPLEXITY(隐藏参数,默认值FALSE)用于设置是否开启密码强度控制,该参数默认为false不开启。弱密码对于系统安全有严重危害性,建议生产环境打开开关。
开启密码强度控制后,YashanDB将在密码设置时进行强度校验,输入的密码需要满足 ①至少八位长度 ② 数字+大小写+特殊字符组合的条件后才能设置成功。
密码强度控制参数设置示例
sql
ALTER SYSTEM SET _CHECK_PASSWORD_COMPLEXITY = true;
ALTER SYSTEM SET _CHECK_PASSWORD_COMPLEXITY = false;
操作系统认证方式
操作系统认证方式概述
启用操作系统认证表示YashanDB认可操作系统对登录服务器的用户的身份验证,而不再进行数据库级别的身份验证,通过操作系统认证的用户将可以不输入用户口令、或以任何用户口令登录YashanDB。
操作系统认证方式的优点
避免在使用过程中多次连续输入口令,方便管理员的操作。
避免在一些执行脚本中暴露管理员的口令。
启用操作系统认证的条件
该登录请求为在数据库服务器上发起的UDS本地连接请求,即要求用户首先能拥有服务器的操作系统用户身份,且能成功登录到服务器。
用户的操作系统账号,属于服务器上的YASDBA操作系统用户组成员。
登录数据库的请求命令里包含as ...格式,用于表明具体身份
风险与风险控制
满足上述条件的用户可以随时或多次地登录到数据库执行操作,这要求用户应该更严格地遵循企业信息安全要求,例如保管好自己的操作系统口令、离开座位时锁屏等,否则在发生操作系统身份被盗用时,数据库身份也同时被盗用,导致非常大的数据泄露和系统破坏风险。
所有满足操作系统身份认证的用户在登录到YashanDB后,将以sys用户账号执行任何管理操作,拥有数据库的所有权限,因此在允许某个用户能使用操作系统身份认证之前,请确保该用户为YashanDB的系统管理员。
操作系统认证的配置
YashanDB默认开启操作系统身份认证,手工设置请参考如下步骤。
在数据库配置文件中新增或者修改操作系统认证配置,修改后重启数据库。
sql
cd $YASDB_DATA/config # 数据库环境须正确配置YASDB_DATA环境变量
vi yasdb_net.ini # 在配置文件中设置以下内容,on为打开操作系统认证,off为关闭
ENABLE_LOCAL_OSAUTH = on
配置操作系统用户组
sql
$ groups
# groupadd YASDBA # 检查操作系统用户组,没有该组则新增该组
# usermod -a -G YASDBA yashan
# groups yashan # 将数据库程序文件属主yashan增加到YASDBA组并验证
yasql / as sysdba # 进行操作系统认证方式登录数据库
操作系统认证将在以下情况失效
将ENABLE_LOCAL_OSAUTH参数修改为off,并重启数据库,操作系统认证方式失效。
将一个操作系统用户从YASDBA组移除,该用户不再允许操作系统身份认证,立即生效。
删除YASDBA组,所有用户不再允许操作系统身份认证,立即生效。
访问控制
服务器连接配置
建立数据库连接的方式
用户需要在各类客户端(如yasql工具、驱动接口、导入导出工具、远程备份工具等)上发起登录数据库的请求,才能与YashanDB建立连接并进行用户认证。
远程连接:客户端与服务端之间采用TCP/IP协议进行网络间通信。
UDS本地连接:客户端与服务端之间采用IPC协议进行进程间通信。
只能使用本地数据库连接的场景
连接资源耗尽的紧急情况下的保留连接。
操作系统身份认证。
保留连接概述
YashanDB提供保留连接功能,用于保障管理员在数据库资源耗尽的紧急情况下仍然能够连接数据库,进行诸如KILL SESSION、SHUTDOWN等系统恢复或数据保护的操作,保留连接功能为系统维护预留2个连接资源。
保留连接分配的前提条件
系统出现资源不足,普通用户已无法连接数据库。
收到的登录数据库请求为UDS本地连接方式。
发起登录数据库请求的用户账号为SYS。
在数据库层配置防火墙
防火墙概述
在数据库层建立防火墙主要用于检测和防御外部入侵风险,可以采用如下两种机制。
配置IP白名单,只有在白名单里的IP上所发起的远程登录请求才允许连接,否则YashanDB将拒绝连接。
启用连接监听,之后所有对YashanDB的连接信息都将被记录,对异常连接能及时发现并采取措施。
IP白名单功能概述
Ø YashanDB提供IP访问控制功能,以增强数据库访问的安全性,该功能默认关闭,由用户在需要时启用。
Ø 启用功能并对特定范围的IP设置白名单后,只有白名单内的IP发起的数据库连接请求才能被接受,其他IP发起的请求将被拒绝。
Ø 白名单功能限制的是远程连接,对于使用UDS本地连接的请求,将一直被允许。
IP白名单功能配置示例
编辑配置文件,如配置文件已有相关设置,则修改为以下内容,否则新增以下内容,并重启数据库生效。
sql
##路径:$YASDB_DATA/ config/ yasdb_net. ini 增加或者修改以下内容
TCP.VALIDNO DE_CHECKING = YES
TCP.INVITED_NODES = 127.0.0.2/32,192.168.6.6/32
TCP.VAL IDNO DE_CHECKI NG
是否启用检查白名单。配置为yes表示启用,配置为除yes之外的其他值均表示不启用。
TCP.I NVITED_ NO DES
白名单列表,多个IP以,隔开。
IP的格式为:IP[ /MASK]。其中,MASK表示从左向右匹配二进制IP的比特数,取值范围为[0,32],默认为32全匹配。例如127.0.0.1/8表示只匹配IP的第一个字节127 。
IP不可以使用通配符表示,例如配置127. * . * .0将被认为是非法IP。
IP必须配置为上述系统认可的有效格式,非法IP将导致数据库实例启动失败。
连接监听概述
连接监听用于检测诸如连接风暴类的网络攻击,YashanDB通过记录监听日志的方式实现此功能。
连接监听相关参数
用户可以通过配置LSNR_LOG参数打开或者关闭监听开关(可选值ON,OFF),并重启数据库生效。
数据库默认打开连接监听。
监听日志
监听日志文件listener.log位于$YASDB_DATA目录下的log/listener文件夹中。
日志中记录了包括时间戳、用户、连接状态、IP、端口等连接信息(成功或失败的连接均被记录)。
启用连接监听后,所有对YashanDB的连接信息都将被记录(包含TCP连接和IPC连接)。
如果同时配置了IP白名单,那么白名单之外的登录请求会被直接丢弃,不会记录到日志。
SSL加密
SSL加密概述
SSL(Secure Sockets Layer)安全套接字层是互联网广泛采用的网络安全协议,在防钓鱼,防劫持,加密数据信息等方面发挥着重要作用。
崖山数据库支持使用SSL连接,用于实现客户端与服务端之间的通信加密。
SSL协议属于应用层(YashanDB)和传输层(TCP)之间的协议,SSL对应用层透明,用户无感知。
非对称加密概述
非对称加密指的是:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。
公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。
私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。
非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。
SSL证书申请的主要步骤
选择要申请的CA(认证授权机构)。
生成私钥和CSR(c e rtifi c a te s igningrequest),CSR中包含了公钥和证书所有者信息。
CA使用他们的私钥来签署CSR,生成证书。
申请者下载经过CA签署的证书,供网站用户进行鉴权和加密通信
SSL握手的主要步骤
SSL客户端向服务端发送登录申请信息,其中包含SSL版本,偏好,密码套件,随机串,压缩模式等信息。
SSL服务端响应信息,包含密码套件,会话ID,另一个随机串,以及数字证书等信息。
SSL客户端验证服务端证书。
SSL客户端发送一个随机串给服务端,这个随机串用来生成在接下来的数据信息传递中使用的密钥,并使用服务端的公钥进行加密。
SSL客户端告知服务端已经完成握手
SSL服务端告知客户端已经完成握手
使用之前交换的随机串生成的密码进行对称加密通信。
数据库端的SSL连接配置
生成根证书(并使用私钥进行自签名,根证书包含服务端公钥)。
sql
$ openssl req -new - x509 -days 365 -nodes -out root. crt -keyout ca.key - subj " /C N=RootCA"
Ø 生成根证书请求文件和服务器私钥。
sql
$ openssl req -new -nodes - text -out server. csr -keyout server.key - subj " /C N=ser ver "
Ø 生成二级证书并签名。
sql
$ openssl x509 - req - in server. csr - text -day s 30 -CA root. crt -CAkey ca.key -CAc reateserial -out ser ver. c rt
Ø 生成DH文件
sql
$ openssl dhparam -2 -out dhparam.pem - text 2048
根证书或二级证书过期后,需重新生成证书。
数据库端的SSL连接配置
Ø在数据库打开SSL连接开关,并配置证书路径。其中,路径仅可指定为绝对路径,且最长不超过254字节。
sql
ALTER SYSTEM SET ssl_enable = ON SCOPE=spfi le;
ALTER SYSTEM SET ssl_cert_file = /home/yashan/YASDB_DATA/config/server.crt SCOPE=spfile;
ALTER SYSTEM SET ssl_dh_param_file = /home/yashan/YASDB_DATA/config/dhparam.pem SCOPE=spfile;
ALTER SYSTEM SET ssl_key_file = /home/yashan/YASDB_DATA/config/server.key SCOPE=spfile;
Ø 重启数据库
注意:
1,如打开了SSL连接开关,但未配置证书路径,或者配置路径不正确,数据库将无法启动。
2,一旦服务器开启SSL连接,所有的客户端都必须有根证书才能连接到数据库。
3,启用SSL连接和用户密码认证无关联,用户登录数据库仍需输入密码。
4,在生产环境中使用SSL加密,需综合考虑证书有效期,确保在证书有效期内存在变更窗口,以便对旧证书进行替换。
客户端的SSL连接配置(以Linux平台为例)
下载服务端根证书,放至本地路径,如/home/yasdb/cert。
在YashanDB客户端文件夹中新建client文件夹,并于client文件夹中新建空文件yasc_env.ini。
sql
$ mkdir client
$ cd client
$ vi yasc_env.ini
设置环境变量。
sql
$ vi ~/.bashrc
export YASDB_HOME=/home/yasdb/yashandb_ client
$ source ~/.bashrc
\# YASDB_HOME路径需要指向YashanDB客户端文件夹。
客户端的SSL连接配置(以Linux平台为例)
在$YASDB_HOME/client/yasc_env.ini中增加如下配置。
sql
ssl_root_cer =/home/yasdb/cert/root.crt
配置中的路径可指定为绝对或相对路径,但不能为含有. . /的相对路径,且系统按前255字节长度进行文件读取。
JDBC驱动的SSL连接配置
参考以下示例语句配置SSL连接。
sql
jdbc:yasdb://192.168.1.1:1688/yashan?sslRootCer=./ca.crt
配置项:s s lRootCer,为SSL加密通信根证书的标准路径,可以为绝对路径或相对路径。
课后作业
1、判断题:SYS用户属于由数据库自动创建的系统用户() --正确
2、判断题:DBA_ROLES中的信息仅包含系统内置角色和自定义角色的信息()--错误
3、判断题:IP白名单功能可以用来限制UDS本地连接的请求() --错误
4、判断题:崖山数据库可以创建同名的角色和数据库用户() --错误
5、多选题:以下正确的选项有()---abc
A.所有数据库用户,都必须属于某个概要文件(profile)
B.崖山数据库默认开启操作系统身份认证
C.IP白名单功能可以配置用于阻止本地回环地址127.0.0.1的访问并且生效。
D.SSL加密可以防止对数据库的DDOS攻击。
6、多选题:数据库的安全性原则包括()--abc
A.保密性
B.完整性
C.可用性
D.一致性
7、多选题:以下属于系统内置角色的是()--abcd
A.PUBLIC
B.CONNECT
C.DBA
D.RESOURCE
8、多选题:选择错误的选项() --abc
A.一个自定义角色,无法同时具备系统权限和对象权限。
B.系统默认profile可以删除
C.可以将系统权限和对象权限以WITH ADMIN/GRANT OPTION的形式将再授权赋予给自定义角色
D.删除自定义概要文件后,该概要文件关联的用户会被转移到默认概要文件DEFAULT。
问答题:为做好用户安全管理,可以采取的措施有哪些?
使用最少权限原则,最少权限原则意味看必须仅为用户授予高效地完成任务所需的权限。
不能将管理权限授予非管理用户。
启用密码强度控制。使用合适的密码策略。
问答题:三权分立模式对应的内置角色和它们在三权分立模式下的权限是?
DBA不具有审计、安全管理相关权限,只对当前用户schema下的表、索引、自定义视图具有DML权限,但仍具有系统表与系统视图的查看权限,及数据库的DDL权限。
SECURITY ADMIN具有管理用户、角色与权限等安全相关的权限。
AUDIT_ADMIN具有创建、删除、使能、修改、去使能审计策略等与审计相关的权限。
问答题:概要文件主要可以设置密码策略中的哪些内容?
问答题:给定一个用户YCP1如何确定它的所有权限(包含系统权限,对象权限,以及从所有角色继承到的权限)?