
If you want to use Oracle file watcher, you need to Create a Credential. As there a password needs to be stored in the database, Oracle tries to save it in a secure way. But as the password must be decrypted for the purpose to login on the file watchers agent side, it is not safe at all:
The credentials are stored with
DBMS_SCHEDULER.CREATE_CREDENTIAL
. Here an example:exec DBMS_SCHEDULER.CREATE_CREDENTIAL(
credential_name => 'local_credential',
username => 'oracle', password => 'welcome1');
exec DBMS_SCHEDULER.CREATE_CREDENTIAL(
credential_name => 'local_credential2',
username => 'oracle2', password => 'welcome1');
It's quite easy to see the values again:
select o.object_name credential_name, username, password
FROM SYS.SCHEDULER$_CREDENTIAL c, DBA_OBJECTS o
WHERE c.obj# = o.object_id;
CREDENTIAL_NAME USERNAME PASSWORD
------------------ -------- ------------------------------------
LOCAL_CREDENTIAL oracle BWVYxxK0fiEGAmtiKXULyfXXgjULdvHNLg==
LOCAL_CREDENTIAL2 oracle2 BWyCCRtd8F0zAVYl44IhvVcJ2i8wNUniDQ==
At least the password is somehow encrypted, and even the password was welcome1 for both credentials, the encrypted string is not identical.
Nothing to blame here, but I mentioned, the password can be decrypted. So let's do so:
SELECT u.name CREDENTIAL_OWNER, O.NAME CREDENTIAL_NAME, C.USERNAME,
DBMS_ISCHED.GET_CREDENTIAL_PASSWORD(O.NAME, u.name) pwd
FROM SYS.SCHEDULER$_CREDENTIAL C, SYS.OBJ$ O, SYS.USER$ U
WHERE U.USER# = O.OWNER#
AND C.OBJ# = O.OBJ# ;
CREDENTIAL_OWNER CREDENTIAL_NAME USERNAME PWD
---------------- -------------------- -------- --------
SYS LOCAL_CREDENTIAL oracle welcome1
SYS LOCAL_CREDENTIAL2 oracle2 welcome1
Can you see it? It's there. Try it at home!
I don't blame anyone here. It's hard to store anything really safe in case you need to decrypt it also.
But don't expect your password save, if you store it with
DBMS_SCHEDULER.CREATE_CREDENTIAL
. Maybe it's slightly to easy to use
DBMS_ISCHED.GET_CREDENTIAL_PASSWORD
(ok, only SYS
can do so) but even it might be slightly more difficult in the future, the basic problem will still exist.