Oracle 视图加密实现安全的数据访问(oracle视图加密)
Oracle视图加密 (View Encryption) 是Oracle数据库使用者可以有效保护数据安全的一种方法。Oracle视图加密只有在禁止用户对数据表进行直接访问时才会使用。通过加密安全性视图,可以把相应表中敏感列及其绑定数据加密,而用户只能查询该视图能够访问到的加密数据,同时不需要对业务程序的代码进行更改。
首先,要在Oracle数据库上启用视图加密,必须配置各种参数,包括:使用DBMS_RLS包配置安全策略,DBMS_OBFUSCATION_TOOLKIT配置加密函数、密钥管理,以及其他可选参数。
让我们看一下示例:
— 创建用户
CREATE USER viewdb IDENTIFIED BY viewdb;
GRANT CONNECT, RESOURCE TO viewdb;
— 创建测试表
CREATE TABLE viewdb.people (
id NUMBER,
first_name VARCHAR2(30 BYTE),
last_name VARCHAR2(30 BYTE),
birth_date DATE,
ssn VARCHAR2(12 BYTE)
);
— 授权用户
GRANT SELECT ON PEOPLE TO viewdb;
— 创建视图
CREATE VIEW viewdb.v_people AS
SELECT id, first_name, last_name,
DBMS_OBFUSCATION_TOOLKIT.DESEncrypt (TO_CHAR (birth_date) ) as birth_date,
DBMS_OBFUSCATION_TOOLKIT.DESEncrypt (ssn) ssn
FROM people
WHERE first_name IS NOT NULL;
— 创建安全策略
BEGIN
DBMS_RLS.CREATE_POLICY (
object_schema => ‘VIEWDB’,
object_name => ‘V_PEOPLE’,
policy_name => ‘PEOPLE_SSN_POLICY’,
function_schema => ‘VIEWDB’,
policy_function => ‘people_ssn_policy_func’,
statement_types => ‘SELECT’,
policy_type => DBMS_RLS.CONTEXT
);
END;
/
— 创建安全策略函数
CREATE or REPLACE FUNCTION viewdb.people_ssn_policy_func (
p_schema VARCHAR2,
p_object VARCHAR2 )
RETURN VARCHAR2
IS
BEGIN
IF ( SYS_CONTEXT ( ‘USERENV’, ‘AUTHENTICATED_IDENTITY’ ) = ‘VIEWDB’ )
THEN
RETURN NULL; — GRANT SELECT
ELSE
RETURN ‘SSN=”***”‘; — MODIFY SELECT
END IF;
END;
/
本文介绍了如何通过Oracle视图加密的方式实现安全的数据访问,包括配置参数、创建安全策略及安全策略函数等步骤。通过这种方式,可以有效保护重要数据,限制用户的访问权限,同时不影响业务程序的功能。