傳統模式:應用控制權限,數據庫單一高權限賬戶 → SQL注入風險極大。
數據庫層安全:Oracle VPD/角色/列級權限原生強制執行,縱深防禦。
CREATE SESSION、CREATE TABLE等SELECT/INSERT/UPDATE/DELETE ON schema.tableAPP_READONLY、APP_WRITE、APP_ADMIN
-- 創建策略函數
CREATE FUNCTION auth_policy (schema VARCHAR2, object VARCHAR2) RETURN VARCHAR2 AS
BEGIN
RETURN 'dept_id = SYS_CONTEXT(''USER_CTX'', ''DEPT_ID'')';
END;
-- 應用策略
BEGIN
DBMS_RLS.ADD_POLICY(
object_schema => 'HR',
object_name => 'EMPLOYEES',
policy_name => 'DEPT_ISOLATION',
function_schema => 'SECURITY',
policy_function => 'AUTH_POLICY',
statement_types => 'SELECT,INSERT,UPDATE,DELETE'
);
END;
效果:用戶只能看到自己部門數據,繞過應用層直接連數據庫也受限。
GRANT UPDATE(salary) ON hr.employees TO payroll_role;EXECUTE存儲過程)CALL proc()DBMS_SESSION.SET_CONTEXT('USER_CTX','DEPT_ID', $deptId)AUDIT SELECT ON hr.employees BY ACCESS;