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视图加密的方式实现安全的数据访问,包括配置参数、创建安全策略及安全策略函数等步骤。通过这种方式,可以有效保护重要数据,限制用户的访问权限,同时不影响业务程序的功能。


数据运维技术 » Oracle 视图加密实现安全的数据访问(oracle视图加密)