120 lines
3.9 KiB
SQL
120 lines
3.9 KiB
SQL
-- ============================================================
|
|
-- 31_dds_standalone_demo_setup.sql
|
|
-- Independent local Deep Data Security demo.
|
|
--
|
|
-- This script deliberately does not use VPD views, application
|
|
-- permission tables, or external database links. It creates a
|
|
-- local PG/MY-shaped matrix so the DDS demo can run independently
|
|
-- when the VPD demo's RDS links are unavailable.
|
|
-- ============================================================
|
|
WHENEVER SQLERROR EXIT SQL.SQLCODE
|
|
SET ECHO OFF
|
|
SET FEEDBACK ON
|
|
SET DEFINE ON
|
|
SET VERIFY OFF
|
|
|
|
PROMPT === 1. Creating DDS-only local source tables ===
|
|
BEGIN
|
|
EXECUTE IMMEDIATE 'DROP VIEW v_dds_customers_pg';
|
|
EXCEPTION WHEN OTHERS THEN NULL;
|
|
END;
|
|
/
|
|
BEGIN
|
|
EXECUTE IMMEDIATE 'DROP VIEW v_dds_customers_my';
|
|
EXCEPTION WHEN OTHERS THEN NULL;
|
|
END;
|
|
/
|
|
BEGIN
|
|
EXECUTE IMMEDIATE 'DROP TABLE cb_dds_demo_customers_pg PURGE';
|
|
EXCEPTION WHEN OTHERS THEN NULL;
|
|
END;
|
|
/
|
|
BEGIN
|
|
EXECUTE IMMEDIATE 'DROP TABLE cb_dds_demo_customers_my PURGE';
|
|
EXCEPTION WHEN OTHERS THEN NULL;
|
|
END;
|
|
/
|
|
|
|
CREATE TABLE cb_dds_demo_customers_pg (
|
|
customer_id NUMBER PRIMARY KEY,
|
|
full_name VARCHAR2(100) NOT NULL,
|
|
email VARCHAR2(200),
|
|
signup_date DATE DEFAULT SYSDATE NOT NULL,
|
|
region VARCHAR2(30) NOT NULL
|
|
);
|
|
|
|
CREATE TABLE cb_dds_demo_customers_my (
|
|
customer_id NUMBER PRIMARY KEY,
|
|
full_name VARCHAR2(100) NOT NULL,
|
|
email VARCHAR2(200),
|
|
signup_date DATE DEFAULT SYSDATE NOT NULL,
|
|
region VARCHAR2(30) NOT NULL
|
|
);
|
|
|
|
INSERT INTO cb_dds_demo_customers_pg VALUES (101, 'PG Alice', 'pg.alice@example.test', DATE '2026-01-10', 'APAC');
|
|
INSERT INTO cb_dds_demo_customers_pg VALUES (102, 'PG Bob', 'pg.bob@example.test', DATE '2026-01-11', 'EMEA');
|
|
INSERT INTO cb_dds_demo_customers_pg VALUES (103, 'PG Carol', 'pg.carol@example.test', DATE '2026-01-12', 'AMER');
|
|
|
|
INSERT INTO cb_dds_demo_customers_my VALUES (201, 'MY Alice', 'my.alice@example.test', DATE '2026-02-10', 'APAC');
|
|
INSERT INTO cb_dds_demo_customers_my VALUES (202, 'MY Bob', 'my.bob@example.test', DATE '2026-02-11', 'EMEA');
|
|
INSERT INTO cb_dds_demo_customers_my VALUES (203, 'MY Carol', 'my.carol@example.test', DATE '2026-02-12', 'AMER');
|
|
|
|
CREATE OR REPLACE VIEW v_dds_customers_pg AS
|
|
SELECT customer_id, full_name, email, signup_date, region
|
|
FROM cb_dds_demo_customers_pg;
|
|
|
|
CREATE OR REPLACE VIEW v_dds_customers_my AS
|
|
SELECT customer_id, full_name, email, signup_date, region
|
|
FROM cb_dds_demo_customers_my;
|
|
|
|
COMMIT;
|
|
|
|
PROMPT === 2. Creating independent DDS END USERs ===
|
|
CREATE END USER "dds_demo_my" IDENTIFIED BY "&DDSUSER_MY_PASSWORD";
|
|
CREATE END USER "dds_demo_pg" IDENTIFIED BY "&DDSUSER_PG_PASSWORD";
|
|
CREATE END USER "dds_demo_both" IDENTIFIED BY "&DDSUSER_BOTH_PASSWORD";
|
|
CREATE END USER "dds_demo_none" IDENTIFIED BY "&DDSUSER_NONE_PASSWORD";
|
|
|
|
PROMPT === 3. Creating independent DATA ROLEs ===
|
|
CREATE ROLE dds_demo_connect_role;
|
|
GRANT CREATE SESSION TO dds_demo_connect_role;
|
|
|
|
CREATE DATA ROLE dds_demo_my_role;
|
|
CREATE DATA ROLE dds_demo_pg_role;
|
|
CREATE DATA ROLE dds_demo_both_role;
|
|
CREATE DATA ROLE dds_demo_none_role;
|
|
|
|
GRANT dds_demo_connect_role TO dds_demo_my_role;
|
|
GRANT dds_demo_connect_role TO dds_demo_pg_role;
|
|
GRANT dds_demo_connect_role TO dds_demo_both_role;
|
|
GRANT dds_demo_connect_role TO dds_demo_none_role;
|
|
|
|
GRANT DATA ROLE dds_demo_my_role TO "dds_demo_my";
|
|
GRANT DATA ROLE dds_demo_pg_role TO "dds_demo_pg";
|
|
GRANT DATA ROLE dds_demo_both_role TO "dds_demo_both";
|
|
GRANT DATA ROLE dds_demo_none_role TO "dds_demo_none";
|
|
|
|
PROMPT === 4. Creating independent DATA GRANTs ===
|
|
CREATE DATA GRANT admin.dds_demo_my_grant
|
|
AS SELECT
|
|
ON admin.v_dds_customers_my
|
|
TO dds_demo_my_role;
|
|
|
|
CREATE DATA GRANT admin.dds_demo_pg_grant
|
|
AS SELECT
|
|
ON admin.v_dds_customers_pg
|
|
TO dds_demo_pg_role;
|
|
|
|
CREATE DATA GRANT admin.dds_demo_both_pg_grant
|
|
AS SELECT
|
|
ON admin.v_dds_customers_pg
|
|
TO dds_demo_both_role;
|
|
|
|
CREATE DATA GRANT admin.dds_demo_both_my_grant
|
|
AS SELECT
|
|
ON admin.v_dds_customers_my
|
|
TO dds_demo_both_role;
|
|
|
|
PROMPT === Independent DDS demo setup complete ===
|
|
EXIT;
|