Fixes #27443: add OCI Autonomous Database support for Oracle connector#27508
Fixes #27443: add OCI Autonomous Database support for Oracle connector#27508hassaansaleem28 wants to merge 8 commits intoopen-metadata:mainfrom
Conversation
…ctor Signed-off-by: Muhammad Hassaan Saleem <iamhassaans@gmail.com>
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
Signed-off-by: Muhammad Hassaan Saleem <iamhassaans@gmail.com>
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
There was a problem hiding this comment.
Pull request overview
Adds Oracle Autonomous Database (OCI) support to the Oracle connector to enable a wallet-based, UI-driven configuration path (no host-level TNS/WALLET provisioning required), spanning UI docs, connector schema, ingestion runtime, and unit tests.
Changes:
- Extend Oracle connection JSON schema with an
OracleAutonomousConnectionoption (tnsAlias + walletPath/walletContent + optional walletPassword). - Update Oracle ingestion connection logic to accept wallet-based Autonomous config, including safe zip extraction and temp-dir lifecycle handling.
- Add unit tests for Autonomous URL building, connection-argument setup, walletContent extraction reuse, and Zip Slip rejection.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| openmetadata-ui/src/main/resources/ui/public/locales/en-US/Database/Oracle.md | Documents the new Autonomous connection mode and wallet fields. |
| openmetadata-spec/src/main/resources/json/schema/entity/services/connections/database/oracleConnection.json | Adds OracleAutonomousConnection to the connector config schema and updates the connection type description. |
| ingestion/src/metadata/ingestion/source/database/oracle/connection.py | Implements wallet-based Autonomous connection handling (args wiring + wallet extraction + reuse/cleanup). |
| ingestion/tests/unit/test_source_connection.py | Adds unit tests covering Autonomous URL/args behavior and wallet zip safety checks. |
…tion.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…tion.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
…tion.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
Signed-off-by: hassaansaleem28 <iamhassaans@gmail.com>
80d9611 to
d426b5d
Compare
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (1)
ingestion/src/metadata/ingestion/source/database/oracle/connection.py:238
- When
walletContentis used,_configure_autonomous_connection_arguments()extracts the wallet into a temp directory before callingcreate_generic_db_connection(). If engine creation raises (e.g., invalid credentials / DSN), the extracted wallet directory is left on disk until GC finalization, potentially leaking sensitive wallet material and piling up temp dirs. Consider wrapping engine creation in a try/except/finally and calling_cleanup_wallet_temp_dir()on failure (only for walletContent-based autonomous connections).
return create_generic_db_connection(
connection=self.service_connection,
get_connection_url_fn=self.get_connection_url,
get_connection_args_fn=get_connection_args_common,
)
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
Code Review ✅ Approved 4 resolved / 4 findingsAdds OCI Autonomous Database support for the Oracle connector, resolving vulnerabilities related to zip-slip traversal, unreliable cleanup, and missing field parameters. ✅ 4 resolved✅ Security: Zip extraction vulnerable to zip-slip path traversal
✅ Edge Case: Temp directory cleanup relies on __del__, which is unreliable
✅ Bug: Repeated _get_client calls duplicate wallet connection args
✅ Bug: list_all_entities for Table missing fields=["columns"]
OptionsDisplay: compact → Showing less information. Comment with these commands to change:
Was this helpful? React with 👍 / 👎 | Gitar |
| "OracleAutonomousConnection": { | ||
| "title": "Oracle Autonomous Connection", | ||
| "type": "object", | ||
| "properties": { | ||
| "tnsAlias": { | ||
| "title": "TNS Alias", | ||
| "description": "Service alias defined in the wallet tnsnames.ora file, such as myadb_high.", | ||
| "type": "string" | ||
| }, | ||
| "walletPath": { | ||
| "title": "Wallet Path", | ||
| "description": "Path to the extracted Oracle wallet directory on the ingestion host.", | ||
| "type": "string" | ||
| }, | ||
| "walletContent": { | ||
| "title": "Wallet Content", | ||
| "description": "Base64-encoded Oracle wallet zip content. If provided, OpenMetadata extracts it at runtime.", | ||
| "type": "string", | ||
| "format": "password" | ||
| }, | ||
| "walletPassword": { | ||
| "title": "Wallet Password", | ||
| "description": "Wallet password for Oracle Autonomous mTLS connections, if required.", | ||
| "type": "string", | ||
| "format": "password" | ||
| } | ||
| }, | ||
| "required": [ | ||
| "tnsAlias" | ||
| ], | ||
| "anyOf": [ | ||
| { | ||
| "required": [ | ||
| "walletPath" | ||
| ] | ||
| }, | ||
| { | ||
| "required": [ | ||
| "walletContent" | ||
| ] | ||
| } | ||
| ] | ||
| } |
There was a problem hiding this comment.
The JSON schema adds OracleAutonomousConnection, but the UI-generated TypeScript types don’t appear to have been regenerated (e.g., openmetadata-ui/src/main/resources/ui/src/generated/entity/services/connections/database/oracleConnection.ts currently has no OracleAutonomousConnection). Please re-run the schema→TS generation (openmetadata-ui/.../json2ts.sh or generate_ts.sh for this schema) and commit the updated generated types so the UI/client typings stay in sync with the spec change.
|
@hassaansaleem28 did you test this with a real oracle instance? can you paste screenshot of ingestion |
|
Hi @ulixius9 |
|
hi @ulixius9, here is the full screen recording of testing: LET ME KNOW IF ANY CHANGES ARE REQUIRED |
|
Hello @ulixius9 @PubChimps could you plz add that |


Describe your changes:
Fixes #27443
I worked on OCI Autonomous Oracle connector support because the existing Oracle flow required manual host-level wallet and TNS setup, which prevented a complete UI-driven configuration experience.
Why migration scripts are not needed:
This change updates connector configuration schema and ingestion runtime behavior only.
It does not introduce database table/entity schema changes in OpenMetadata persistence layers.
Type of change:
Checklist:
Fixes #27443: add OCI Autonomous Database support for Oracle connectoror decision-making process is reflected in the issue.
Summary by Gitar
walletContent.test_source_connection.pyto verify that temporary wallet directories are correctly removed upon connection failure.This will update automatically on new commits.