17.数据库管理员和开发人员的主题
17.1. 数据库安全概述
通常情况下,数据库安全涉及用户认证、加密、访问控制和监控。
17.1.1. 用户账户
每个Oracle数据库都有一个有效数据库用户的列表。数据库包含几个默认账户,包括默认的管理员账户SYSTEM(参见第2-5页的“SYS和SYSTEM模式”)。你可以根据需要创建用户账户。要访问数据库,用户必须提供有效的用户名和认证凭据。凭据可能是密码、Kerberos票据或公钥基础设施(PKI)证书。你可以配置数据库安全以锁定基于失败登录尝试的账户。
17.1.1.1. 权限和角色授权
通常情况下,数据库访问控制涉及限制数据访问和数据库活动。例如,你可以限制用户查询指定的表或执行指定的数据库命令。
用户权限是运行特定SQL语句的权利。权限可以分为以下几类:
- 系统权限:这是在数据库中执行特定操作或对特定类型的对象执行操作的权利。例如,CREATE USER和CREATE SESSION是系统权限。
- 对象权限:这是对对象执行特定操作的权利,例如查询员工表。权限类型由数据库定义。
权限是由其他用户自行决定授予的。管理员应该根据用户完成工作所需的权限来授予权限。良好的安全实践是只授予需要该权限来完成必要工作的用户权限。角色是一组相关权限的命名集合,你可以将其授予用户或其他角色。角色有助于管理数据库应用程序或用户组的权限。图17-1描述了角色的常见用途。PAY_CLERK、MANAGER和REC_CLERK角色被分配给不同的用户。应用程序角色ACCTS_PAY,包括执行ACCTS_PAY应用程序的权限,被分配给具有PAY_CLERK和MANAGER角色的用户。应用程序角色ACCTS_REC,包括执行ACCTS_REC应用程序的权限,被分配给具有REC_CLERK和MANAGER角色的用户。
17.1.1.2. 配置文件
在系统资源的背景下,用户配置文件是一组命名的资源限制和密码参数,用于限制用户对数据库使用和实例资源的访问。配置文件可以限制用户并发会话的数量、每个会话可用的CPU处理时间以及可用的逻辑I/O数量(参见第14-10页的“缓冲区I/O”)。例如,职员配置文件可能会将用户限制在执行文书任务所需的系统资源上。
注意:最好使用数据库资源管理器来限制资源,并使用配置文件来管理密码。
配置文件为共享一组属性的用户提供了一个单一的参考点。你可以为一组用户分配一个配置文件,并对所有其他用户分配一个默认配置文件。每个用户在任何时候最多只能分配一个配置文件。
17.1.2. 授权
在Oracle数据库中,数据库认证是用户向数据库出示凭据的过程,数据库验证凭据并允许访问数据库。验证身份建立了进一步交互的信任关系。认证还通过将访问和操作链接到特定身份,实现了可追溯性。
Oracle数据库提供了不同的认证方法,包括以下方法:
- 由数据库进行认证
Oracle数据库可以使用密码、Kerberos票据或PKI证书来认证用户。Oracle还支持符合RADIUS标准的设备进行其他形式的认证,包括生物识别。在Oracle数据库中创建用户时,必须指定认证类型。 - 由操作系统进行认证
某些操作系统允许Oracle数据库使用它们维护的信息来认证用户。用户在被操作系统认证后,可以在不指定用户名或密码的情况下连接到数据库。
数据库操作,如关闭或启动数据库,不应由非管理数据库用户执行。这些操作需要SYSDBA或SYSOPER权限(参见第13-6页的“使用管理员权限连接”)。
17.1.3. 加密
通常情况下,加密是使用秘钥和加密算法将数据转换为不可读格式的过程。加密通常用于满足监管合规要求,例如与支付卡行业数据安全标准(PCI-DSS)或违规通知法律相关的要求。例如,必须加密信用卡号、社会安全号码或患者健康信息。
网络加密:在客户端和服务器之间通过网络传输数据时对其进行加密称为网络加密。入侵者可以使用网络数据包嗅探器捕获在网络上传输的信息,然后将其转储到文件中以供恶意使用。在网络上加密数据可以防止这类活动。
透明数据加密:Oracle Advanced Security的透明数据加密使你能够加密单个表格列或表空间。当用户将数据插入加密列时,数据库会自动加密数据。当用户选择该列时,数据会被解密。这种形式的加密是透明的,提供高性能且易于实施。透明数据加密包括行业标准的加密算法,如高级加密标准(AES)和内置的密钥管理。
17.1.4. Oracle数据屏蔽
从Oracle Database 11g Release 2(11.2.0.4)开始,Oracle Data Redaction使您能够对低权限用户或应用程序查询的数据进行屏蔽(红action)。当用户查询数据时,红action会实时发生。Oracle Data Redaction是Oracle Advanced Security的一部分。数据红action支持以下红action函数类型:
-
完整数据红action
在这种情况下,数据库会红action表格或视图中指定列的全部内容。例如,用于姓氏的VARCHAR2列显示为一个空格。 -
部分数据红action
在这种情况下,数据库会红action显示输出的部分内容。例如,应用程序可以将信用卡号1234显示为xxxx-xxxx-xxxx-1234。您可以为完整和部分红action使用正则表达式。正则表达式可以根据搜索模式红action数据。例如,您可以使用正则表达式来红action特定的电话号码或电子邮件地址。 -
随机数据红action
在这种情况下,数据库根据列的数据类型显示为随机生成的值。例如,数字1234567可以显示为83933895。
数据红action不是全面的安全解决方案。例如,它不能防止直接连接的特权用户对红action数据进行推理攻击。这种攻击识别红action列,并通过重复猜测存储值的SQL查询,通过排除法尝试回溯到实际数据。为了检测和防止来自特权用户的推理和其他攻击,Oracle建议将Oracle Data Redaction与相关的数据库安全产品配对,如Oracle Audit Vault and Database Firewall,以及Oracle Database Vault。
数据红action的工作方式如下:
- 使用DBMS_REDACT包为指定的表创建一个红action策略。
- 在策略中,指定一个预定义的红action函数。
数据库显示列的实际值还是红action值取决于策略。如果数据被红action,则红action发生在顶层选择列表立即显示给用户之前。
以下示例为hr.employees表的employee_id列添加了一个完整数据红action策略:
BEGIN DBMS_REDACT.ADD_POLICY(
object_schema => 'hr'
, object_name => 'employees'
, column_name => 'employee_id'
, policy_name => 'mask_emp_ids'
, function_type => DBMS_REDACT.FULL
, expression => '1=1' );
END; /
在前面的示例中,表达式设置为真,将红action应用于未被授予EXEMPT REDACTION POLICY权限的用户。