Which has the higher priority in your organization: Deploying a new database or securing the ones you already have?
Looking for a website, and resources, dedicated solely to securing Oracle databases? Check out DBSecWorx.
Purpose
Multimedia Audio is a multi-object capability
built into the Oracle Database that contains native APIs for storing,
retrieving, and collecting metadata for in-database stored audio files.
-- not required for production use by required for learning about MultiMedia Audio here in the Library
ALTER USER ordsys ACCOUNT UNLOCK IDENTIFIED BY ordsys;
-- not required for production use by required for learning about MultiMedia Audio here in the Library
GRANT create session TO ordsys;
-- if an application schema does not already exist
CREATE USER uwclass
IDENTIFIED BY uwclass
DEFAULT TABLESPACE uwdata
TEMPORARY TABLESPACE temp
QUOTA 0 ON SYSTEM
QUOTA UNLIMITED ON uwdata;
GRANT create session TO uwclass;
GRANT create any directory TO uwclass;
GRANT create table TO uwclass;
CREATE OR REPLACE DIRECTORY audiodir AS 'c:\temp';
GRANT ALL ON DIRECTORY audiodir TO uwclass;
Actions as application owner to load audio files
conn uwclass/uwclass@pdbdev
-- verify required objects are visible to schema
SELECT owner, object_name, status
FROM all_objects_ae
WHERE object_name LIKE 'ORD%AUD%';
conn ordsys/ordsys@pdbdev
set linesize 141
col owner format a10
col library_name format a15
col file_spec format a60
col agent format a6
col leaf_filename format a10
SELECT *
FROM all_libraries;
-- explore what ordaudio is
SELECT object_name, object_type
FROM user_objects
WHERE object_name = 'ORDAUDIO';
SELECT DISTINCT object_name
FROM user_arguments
WHERE package_name = 'ORDAUDIO'
ORDER BY 1;
conn uwclass/uwclass@pdbdev
CREATE TABLE t_audio (
aid NUMBER,
audio ordsys.ordAudio);
desc t_audio
set describe depth all
desc t_audio
set describe depth all linenum on indent on
desc t_audio
-- create initial records
INSERT INTO t_audio VALUES (1, ordsys.ordAudio.init());
INSERT INTO t_audio VALUES (2, ordsys.ordAudio.init());
COMMIT;
SELECT * FROM t_audio;
set serveroutput on
-- check audio attributes by calling methods
DECLARE
obj ordsys.ordAudio;
BEGIN
SELECT audio
INTO obj
FROM t_audio
WHERE aid = 1;
-- access methods
dbms_output.put_line('METHODS');
dbms_output.put_line('-------');
dbms_output.put_line('Description: ' || obj.getDescription);
dbms_output.put_line('MimeType: '|| obj.getMimeType);
EXCEPTION
WHEN ordsys.ordaudioexceptions.description_is_not_set THEN
dbms_output.put_line('Description: NOT SET');
END;
/
-- load audio files from disk to table
DECLARE
obj1 ordsys.ordAudio;
obj2 ordsys.ordAudio;
BEGIN
SELECT audio
INTO obj1
FROM t_audio
WHERE aid = 1
FOR UPDATE;
SELECT audio
INTO obj2
FROM t_audio
WHERE aid = 2
FOR UPDATE;
UPDATE t_audio
SET audio = obj
WHERE aid=2;
COMMIT;
EXCEPTION
WHEN ordsys.ordaudioexceptions.description_is_not_set THEN
dbms_output.put_line('Description: NOT SET');
END;
/
col mimetype format a40
SELECT t.aid, t.audio.getMimeType() MimeType
FROM t_audio t;
SELECT t.aid, t.audio.getContentLength() Content_Len
FROM t_audio t;
col src format a40
col location format a40
col srctype format a20
SELECT t.aid, t.audio.getSource() Src
FROM t_audio t;
SELECT t.aid, t.audio.getSourceLocation() Location
FROM t_audio t;
SELECT t.aid, t.audio.getSourceName() Location
FROM t_audio t;
SELECT t.aid, t.audio.getSourceType() SrcType
FROM t_audio t;
SELECT t.aid, t.audio.getUpdateTime()<
FROM t_audio t;
Get All Attributes
set linesize 80
DECLARE
ctx RAW(64);
obj ordsys.ordAudio;
tmpLOB CLOB;
BEGIN
SELECT t.audio
INTO obj
FROM t_audio t
WHERE t.aid = 2;
dbms_lob.createTemporary(tmpLOB, FALSE, dbms_lob.call);
obj.getAllAttributes(ctx, tmpLOB);
dbms_output.put_line(dbms_lob.substr(tmpLOB, dbms_lob.getLength(tmpLOB), 1));
EXCEPTION
WHEN ordsys.ordAudioExceptions.audio_plugin_exception THEN
RAISE;
END;
/