Skip to content

Commit a80039c

Browse files
committed
Initial commit
0 parents  commit a80039c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+9229
-0
lines changed

ace.sql

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
SET SERVEROUTPUT ON
2+
SET FEEDBACK OFF
3+
WHENEVER SQLERROR EXIT SQL.SQLCODE ROLLBACK
4+
WHENEVER OSERROR EXIT FAILURE
5+
6+
PROMPT Add Access Control List entry in Oracle Database for Bullshit Bingo
7+
8+
VARIABLE schema_name VARCHAR2(30 CHAR)
9+
VARIABLE host VARCHAR2(200 CHAR)
10+
VARIABLE port NUMBER
11+
VARIABLE privilege VARCHAR2(200 CHAR)
12+
VARIABLE ace CLOB
13+
14+
ARGUMENT 1 PROMPT 'Enter schema name: '
15+
ARGUMENT 2 PROMPT 'Enter host name: '
16+
ARGUMENT 3 PROMPT 'Enter port number: '
17+
ARGUMENT 4 PROMPT 'Enter privilege: '
18+
19+
EXEC :schema_name:= UPPER('&1');
20+
EXEC :host:= '&2';
21+
EXEC :port:= '&3';
22+
EXEC :privilege := '&4';
23+
24+
EXEC :ace:= '[{"host": "' || :host || '", "port": ' || :port || ', "privilege": "' || :privilege || '"}]';
25+
26+
UNDEFINE 1
27+
UNDEFINE 2
28+
UNDEFINE 3
29+
UNDEFINE 4
30+
31+
PROMPT Starting..
32+
33+
PROMPT Creating ACE
34+
@./utl/set_schema.sql
35+
@./utl/acl_append_hosts.sql
36+
37+
PROMPT ..done
38+
@./utl/reset_schema.sql

api/audit/pck_api_audit.pkb

+115
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
CREATE OR REPLACE PACKAGE BODY pck_api_audit AS
2+
3+
FUNCTION log (
4+
p_uuid app_audit.uuid%TYPE,
5+
p_severity app_audit.severity%TYPE,
6+
p_action app_audit.action%TYPE,
7+
p_details app_audit.details%TYPE
8+
) RETURN app_audit.id%TYPE
9+
AS
10+
v_stack VARCHAR2(2000) := SUBSTR(SQLERRM || CHR(10) || '-- ' || CHR(10) || dbms_utility.format_error_backtrace, 1, 2000);
11+
v_request VARCHAR2(2000);
12+
v_agent VARCHAR2(2000);
13+
v_ip VARCHAR2(2000);
14+
v_id app_audit.id%TYPE;
15+
PRAGMA AUTONOMOUS_TRANSACTION;
16+
BEGIN
17+
18+
BEGIN
19+
v_request := TRIM(owa_util.get_cgi_env('REQUEST_METHOD') || ' ' || owa_util.get_cgi_env('SCRIPT_NAME'));
20+
v_agent := TRIM(owa_util.get_cgi_env('HTTP_USER_AGENT'));
21+
v_ip := TRIM(owa_util.get_cgi_env('REMOTE_ADDR'));
22+
EXCEPTION
23+
WHEN OTHERS THEN
24+
NULL;
25+
END;
26+
27+
INSERT INTO app_audit (uuid, severity, action, details, stack, agent, ip)
28+
VALUES (
29+
p_uuid,
30+
p_severity,
31+
p_action,
32+
SUBSTR(CASE WHEN v_request IS NULL THEN NULL ELSE v_request || '?' END || p_details, 1, 2000),
33+
CASE WHEN p_severity = 'E' THEN v_stack ELSE NULL END,
34+
v_agent,
35+
v_ip
36+
) RETURNING id INTO v_id;
37+
38+
COMMIT;
39+
40+
RETURN v_id;
41+
42+
END;
43+
44+
FUNCTION mrg(
45+
p_key1 VARCHAR2 DEFAULT NULL,
46+
p_val1 VARCHAR2 DEFAULT NULL,
47+
p_key2 VARCHAR2 DEFAULT NULL,
48+
p_val2 VARCHAR2 DEFAULT NULL,
49+
p_key3 VARCHAR2 DEFAULT NULL,
50+
p_val3 VARCHAR2 DEFAULT NULL,
51+
p_key4 VARCHAR2 DEFAULT NULL,
52+
p_val4 VARCHAR2 DEFAULT NULL,
53+
p_key5 VARCHAR2 DEFAULT NULL,
54+
p_val5 VARCHAR2 DEFAULT NULL,
55+
p_key6 VARCHAR2 DEFAULT NULL,
56+
p_val6 VARCHAR2 DEFAULT NULL
57+
) RETURN VARCHAR2
58+
AS
59+
v PLS_INTEGER := 160;
60+
BEGIN
61+
62+
RETURN
63+
CASE WHEN p_key1 IS NOT NULL THEN CHR(38) || SUBSTR(p_key1,1,v) || '=' || SUBSTR(p_val1,1,v) ELSE NULL END ||
64+
CASE WHEN p_key2 IS NOT NULL THEN CHR(38) || SUBSTR(p_key2,1,v) || '=' || SUBSTR(p_val2,1,v) ELSE NULL END ||
65+
CASE WHEN p_key3 IS NOT NULL THEN CHR(38) || SUBSTR(p_key3,1,v) || '=' || SUBSTR(p_val3,1,v) ELSE NULL END ||
66+
CASE WHEN p_key4 IS NOT NULL THEN CHR(38) || SUBSTR(p_key4,1,v) || '=' || SUBSTR(p_val4,1,v) ELSE NULL END ||
67+
CASE WHEN p_key5 IS NOT NULL THEN CHR(38) || SUBSTR(p_key5,1,v) || '=' || SUBSTR(p_val5,1,v) ELSE NULL END ||
68+
CASE WHEN p_key6 IS NOT NULL THEN CHR(38) || SUBSTR(p_key6,1,v) || '=' || SUBSTR(p_val6,1,v) ELSE NULL END ||
69+
''
70+
;
71+
72+
END;
73+
74+
PROCEDURE dbg(
75+
p_action app_audit.action%TYPE,
76+
p_details app_audit.details%TYPE DEFAULT NULL
77+
)
78+
AS
79+
v_id app_audit.id%TYPE;
80+
BEGIN
81+
v_id := log(NULL, 'D', p_action, p_details);
82+
END;
83+
84+
PROCEDURE inf(
85+
p_action app_audit.action%TYPE,
86+
p_details app_audit.details%TYPE DEFAULT NULL
87+
)
88+
AS
89+
v_id app_audit.id%TYPE;
90+
BEGIN
91+
v_id := log(NULL, 'I', p_action, p_details);
92+
END;
93+
94+
PROCEDURE wrn(
95+
p_action app_audit.action%TYPE,
96+
p_details app_audit.details%TYPE DEFAULT NULL
97+
)
98+
AS
99+
v_id app_audit.id%TYPE;
100+
BEGIN
101+
v_id := log(NULL, 'W', p_action, p_details);
102+
END;
103+
104+
PROCEDURE err(
105+
p_action app_audit.action%TYPE,
106+
p_details app_audit.details%TYPE DEFAULT NULL
107+
)
108+
AS
109+
v_id app_audit.id%TYPE;
110+
BEGIN
111+
v_id := log(NULL, 'E', p_action, p_details);
112+
END;
113+
114+
END;
115+
/

api/audit/pck_api_audit.pks

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
CREATE OR REPLACE PACKAGE pck_api_audit AS -- Package defines audit logging API
2+
3+
FUNCTION mrg( -- Helper function to concatenate key-value pairs
4+
p_key1 VARCHAR2 DEFAULT NULL, -- Key 1
5+
p_val1 VARCHAR2 DEFAULT NULL, -- Value 1
6+
p_key2 VARCHAR2 DEFAULT NULL, -- Key 2
7+
p_val2 VARCHAR2 DEFAULT NULL, -- Value 2
8+
p_key3 VARCHAR2 DEFAULT NULL, -- Key 3
9+
p_val3 VARCHAR2 DEFAULT NULL, -- Value 3
10+
p_key4 VARCHAR2 DEFAULT NULL, -- Key 4
11+
p_val4 VARCHAR2 DEFAULT NULL, -- Value 4
12+
p_key5 VARCHAR2 DEFAULT NULL, -- Key 5
13+
p_val5 VARCHAR2 DEFAULT NULL, -- Value 5
14+
p_key6 VARCHAR2 DEFAULT NULL, -- Key 6
15+
p_val6 VARCHAR2 DEFAULT NULL -- Value 6
16+
) RETURN VARCHAR2; -- Concatenated key-value pairs
17+
18+
FUNCTION log( -- Procedure logs an audit entry
19+
p_uuid app_audit.uuid%TYPE, -- User unique ID
20+
p_severity app_audit.severity%TYPE, -- Severity level (D - debug, I - info, W - warning, E - error)
21+
p_action app_audit.action%TYPE, -- Action performed
22+
p_details app_audit.details%TYPE -- Details
23+
) RETURN app_audit.id%TYPE; -- Log entry identifier
24+
25+
PROCEDURE dbg( -- Procedure logs a debug entry
26+
p_action app_audit.action%TYPE, -- Action performed
27+
p_details app_audit.details%TYPE DEFAULT NULL -- Details
28+
);
29+
30+
PROCEDURE inf( -- Procedure logs an info entry
31+
p_action app_audit.action%TYPE, -- Action performed
32+
p_details app_audit.details%TYPE DEFAULT NULL -- Details
33+
);
34+
35+
PROCEDURE wrn( -- Procedure logs a warning entry
36+
p_action app_audit.action%TYPE, -- Action performed
37+
p_details app_audit.details%TYPE DEFAULT NULL -- Details
38+
);
39+
40+
PROCEDURE err( -- Procedure logs an error entry
41+
p_action app_audit.action%TYPE, -- Action performed
42+
p_details app_audit.details%TYPE DEFAULT NULL -- Details
43+
);
44+
45+
END;
46+
/

api/audit/setup_app_audit.sql

+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
BEGIN
2+
EXECUTE IMMEDIATE '
3+
CREATE TABLE app_audit (
4+
id CHAR(32 CHAR) DEFAULT LOWER(SYS_GUID()) NOT NULL,
5+
uuid CHAR(32 CHAR),
6+
severity CHAR(1 CHAR) DEFAULT ''I'' NOT NULL,
7+
action VARCHAR2(2000 CHAR) NOT NULL,
8+
details VARCHAR2(2000 CHAR),
9+
stack VARCHAR2(2000 CHAR),
10+
created TIMESTAMP(6) DEFAULT SYSTIMESTAMP NOT NULL,
11+
agent VARCHAR2(2000 CHAR),
12+
ip VARCHAR2(240 CHAR)
13+
)
14+
';
15+
EXCEPTION
16+
WHEN OTHERS THEN IF SQLCODE NOT IN (-955) THEN RAISE; END IF;
17+
END;
18+
/
19+
20+
COMMENT ON TABLE app_audit IS 'Table for storing and processing audit data';
21+
COMMENT ON COLUMN app_audit.id IS 'Primary key';
22+
COMMENT ON COLUMN app_audit.uuid IS 'Unique user identifier';
23+
COMMENT ON COLUMN app_audit.severity IS 'Severity level (D - debug, I - info, W - warning, E - error)';
24+
COMMENT ON COLUMN app_audit.action IS 'Activity that caused audit record';
25+
COMMENT ON COLUMN app_audit.details IS 'Detailed information';
26+
COMMENT ON COLUMN app_audit.created IS 'Date and time when audit record was created';
27+
COMMENT ON COLUMN app_audit.agent IS 'Browser agent';
28+
COMMENT ON COLUMN app_audit.ip IS 'IP address';
29+
30+
BEGIN
31+
EXECUTE IMMEDIATE '
32+
ALTER TABLE app_audit ADD CONSTRAINT pk_app_audit PRIMARY KEY (id)
33+
';
34+
EXCEPTION
35+
WHEN OTHERS THEN IF SQLCODE NOT IN (-2260) THEN RAISE; END IF;
36+
END;
37+
/
38+
39+
BEGIN
40+
EXECUTE IMMEDIATE '
41+
ALTER TABLE app_audit ADD CONSTRAINT csc_app_audit_severity CHECK (severity IN (''D'', ''I'', ''W'', ''E''))
42+
';
43+
EXCEPTION
44+
WHEN OTHERS THEN IF SQLCODE NOT IN (-2260, -2264) THEN RAISE; END IF;
45+
END;
46+
/
47+
48+
BEGIN
49+
EXECUTE IMMEDIATE '
50+
CREATE INDEX idx_app_audit_uuid ON app_audit(uuid)
51+
';
52+
EXCEPTION
53+
WHEN OTHERS THEN IF SQLCODE NOT IN (-955) THEN RAISE; END IF;
54+
END;
55+
/
56+
57+
BEGIN
58+
EXECUTE IMMEDIATE '
59+
CREATE INDEX idx_app_audit_created ON app_audit(created)
60+
';
61+
EXCEPTION
62+
WHEN OTHERS THEN IF SQLCODE NOT IN (-955) THEN RAISE; END IF;
63+
END;
64+
/
65+
66+
DECLARE
67+
v_cnt PLS_INTEGER;
68+
BEGIN
69+
SELECT COUNT(id) INTO v_cnt FROM app_audit;
70+
IF v_cnt = 0 THEN
71+
INSERT INTO app_audit (action) VALUES ('Database created');
72+
COMMIT;
73+
END IF;
74+
END;
75+
/

api/audit/test_audit.sql

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
exec pck_api_audit.inf('Database audited');
2+
/

0 commit comments

Comments
 (0)