Overview
Most database connectors in DCT use a built-in database type — Oracle, MS SQL Server, PostgreSQL, MySQL, MariaDB, DB2, Sybase, and their variants. For these, DCT already ships the JDBC driver and you only supply connection details.
An extended connector (database_type = EXTENDED) lets you mask a data source that DCT does not support out of the box. Instead of a built-in driver, an extended connector references a custom JDBC driver that you upload and register with DCT first. Once that driver exists, an extended connector behaves like any other database connector — you add it to a rule set and run masking, discovery, and profiling jobs against it exactly as you would for a built-in type.
Use an extended connector when:
- Your data source is a database DCT does not natively support.
- You need a specific driver version or a commercial (e.g. CData) JDBC driver.
- Your source requires custom pre/post-job behavior supplied by a driver support plugin (constraints, triggers, indexes, etc.).
Object model & dependencies
Setting up an extended connector means creating up to four objects, in a fixed order, because each one depends on the output of the previous step:
POST /v3/masking-file-uploads (driver .zip, multipart)
│ returns file_reference_id
│
│ ┌─ (optional) POST /v3/masking-plugins (plugin_type=DRIVER_SUPPORT)
│ │ returns driver support plugin id ──► driver_support_id
│ │
│ ├─ (CData only) POST /v3/masking-file-uploads (license .bin, multipart)
│ │ returns file_reference_id ──► license_file_id
▼ ▼
POST /v3/compliance-jdbc-drivers { name, class_name, file_reference_id,
driver_support_id?, license_file_id? }
│ returns compliance JDBC driver id
▼
POST /v3/connectors { type: DATABASE, database_type: EXTENDED,
compliance_jdbc_driver_id, hostname, port, ... }
│ returns connector id
▼
POST /v3/connectors/{id}/test → verify connectivity
│
▼
(add connector to a rule set — unchanged from any database connector)
| Object | API surface | Depends on | Required? |
|---|---|---|---|
| File upload (driver .zip) | /v3/masking-file-uploads
|
— | Yes |
| Driver support plugin | /v3/masking-plugins (plugin_type=DRIVER_SUPPORT) |
— | Optional |
| License entitlement (.bin) | /v3/masking-file-uploads
|
— | CData drivers only |
| Compliance JDBC driver | /v3/compliance-jdbc-drivers
|
driver .zip file upload (+ optional plugin, license) | Yes |
| Extended connector | /v3/connectors
|
compliance JDBC driver | Yes |
Key ordering rule — you must upload the driver file before you can create the compliance JDBC driver, and you must create the compliance JDBC driver before you can create the extended connector that references it.
Prerequisites & limitations
- Driver format: The JDBC driver must be a Type 4, pure-Java driver. Package the driver
.jar(and any dependency jars) into a single.zipfile before uploading. - Class name: You must know the fully-qualified JDBC driver class (for example
org.postgresql.Driver). - Permissions (RBAC): Creating and managing these objects requires the corresponding DCT object-type permissions — COMPLIANCE_JDBC_DRIVER, CONNECTOR, plugin, and masking-file permissions. Verify your API key's role grants create/read/update/delete on these object types.
- CData drivers: additionally require a license entitlement (.bin) — see step 3 below.
- Job orchestrator: As with any DCT-managed connector, an extended connector is associated with a job orchestrator (
job_orchestrator_id).
1. Upload the JDBC driver file
Upload the driver .zip as a masking file. This is a multipart/form-data request with a file part (plus optional description and tags).
POST /v3/masking-file-uploads (multipart/form-data)
file = <your-driver>.zip
description = "PostgreSQL 42.7 JDBC driver" (optional)
Response (201):
{
"file": {
"id": "f_6af70917922542af89ea6e7c31e80205",
"filename": "postgresql-42.7.zip",
"file_reference_id": "delphix-file://upload/f_6af70917922542af89ea6e7c31e80205/postgresql-42.7.zip",
"file_size": 1043210,
"file_checksum": "…",
"created_date": "2026-07-06T14:22:10Z"
}
}
Keep the file_reference_id — you pass it to the compliance JDBC driver in step 4. (The id, f_..., is also accepted anywhere a file reference is expected.)
2. (Optional) Install a driver support plugin
A driver support plugin lets DCT perform database-specific operations around a masking job — disabling/re-enabling constraints, triggers, and indexes, etc. Delphix ships several built-in driver support plugins (source in the masking-driver-support repository); you can also install your own.
Driver support plugins are installed through the masking-plugins API with plugin_type = DRIVER_SUPPORT. First upload the plugin file (step 1 pattern), then:
POST /v3/masking-plugins
{
"file_id": "f_<plugin-file-upload-id>",
"plugin_type": "DRIVER_SUPPORT",
"name": "my-driver-support", // optional; overrides manifest name
"description": "Custom driver support" // optional
}
Response (201):
{ "id": "<driver-support-plugin-id>", "job": { "id": "…", "status": "…" } }
Keep the returned id — pass it as driver_support_id when creating the compliance JDBC driver in step 4. If you don't need custom pre/post-job behavior, skip this step and omit driver_support_id.
3. (CData only) Upload the license entitlement
Commercial CData JDBC drivers require a license entitlement file (.bin). Upload it the same way as the driver file in step 1:
POST /v3/masking-file-uploads (multipart/form-data)
file = Salesforce.bin
Response (201) returns a file_reference_id, e.g. delphix-file://upload/f_6af70917922542af89ea6e7c31e80205/Salesforce.bin.
Keep this value — pass it as license_file_id in step 4. license_file_id is required for CData drivers and rejected for non-CData drivers. Only supply it when registering a CData driver.
4. Create the compliance JDBC driver
Register the uploaded driver as a compliance JDBC driver, referencing the file_reference_id from step 1 (and, if applicable, driver_support_id from step 2 and/or license_file_id from step 3).
POST /v3/compliance-jdbc-drivers
{
"name": "PostgreSQL 42.7",
"class_name": "org.postgresql.Driver",
"file_reference_id": "delphix-file://upload/f_6af70.../postgresql-42.7.zip",
"description": "PostgreSQL JDBC driver", // optional
"driver_support_id": null, // optional; from Step 2
"license_file_id": null // CData only; from Step 3
}
Response (201):
{ "id": "<compliance-jdbc-driver-id>", "job": { "id": "…", "status": "…" } }
Field reference:
| Field | Required | Notes |
|---|---|---|
name
|
Yes | Display name, 1–255 chars. |
class_name
|
Yes | Fully-qualified JDBC driver class. |
file_reference_id
|
Yes | The uploaded driver .zip reference from step 1. |
driver_support_id
|
No | Associated driver support plugin (step 2). |
license_file_id
|
No | .bin entitlement reference. Required for CData, rejected otherwise. |
description
|
No | Free text. |
tags
|
No | DCT tags. |
Keep the returned id — this is the compliance_jdbc_driver_id for your connector.
5. Create the extended connector
Create a database connector with database_type = EXTENDED, referencing the compliance JDBC driver from step 4. All other fields (host, port, credentials, orchestrator) are the same as any database connector.
POST /v3/connectors
{
"name": "my-extended-connector",
"type": "DATABASE",
"database_type": "EXTENDED",
"compliance_jdbc_driver_id": "<compliance-jdbc-driver-id>", // or the driver's name
"hostname": "db.mycompany.co",
"port": 5432,
"username": "masking_user",
"password": "••••••••",
"job_orchestrator_id": "<orchestrator-id>",
"enable_logger": false // EXTENDED-only; enables extended driver logging
}
Response (201):
{ "id": "<connector-id>", "job": { "id": "…", "status": "…" } }
compliance_jdbc_driver_idaccepts either the driver's ID or its name, and is required whendatabase_type = EXTENDED. It cannot be cleared on a later update.enable_loggeris used exclusively for extended connectors to turn on extended driver logging for troubleshooting.
Test the connection
Verify connectivity against the saved connector:
POST /v3/connectors/{connectorId}/test
Response (200):
{ "status": "SUCCEEDED", "message": "…", "job": { "id": "…", "status": "…" } }
You can also test connection details before saving, using POST /v3/connectors/test with the same body as the create request. This is handy for validating driver/credentials while iterating.
Using the connector
Once the extended connector tests successfully, there is nothing extended-connector-specific left to do. Add it to a rule set (POST /v3/rule-sets with connector_id), fetch table names, and run compliance, discovery, and profiling jobs exactly as you would for a built-in database connector. The custom driver is transparent to all downstream masking workflows.
Managing these objects
All four object types support full CRUD plus list/search and tagging. Common operations:
| Operation | Compliance JDBC driver | Extended connector | Driver support plugin | File upload |
|---|---|---|---|---|
| List | GET /v3/compliance-jdbc-drivers
|
GET /v3/connectors
|
GET /v3/masking-plugins
|
GET /v3/masking-file-uploads
|
| Get one | GET …/{driverId}
|
GET …/{connectorId}
|
GET …/{maskingPluginId}
|
GET …/{maskingFileId}
|
| Search | POST …/search
|
POST …/search
|
POST …/search
|
POST …/search
|
| Update | PATCH …/{driverId}
|
PATCH …/{connectorId}
|
PATCH …/{maskingPluginId}
|
— |
| Delete | DELETE …/{driverId}
|
DELETE …/{connectorId}
|
DELETE …/{maskingPluginId}
|
DELETE …/{maskingFileId}
|
| Tags | …/{id}/tags, …/{id}/tags/delete |
same | same | same |
Deletion ordering follows the dependency chain in reverse: a compliance JDBC driver that is still referenced by a connector cannot be removed until the connector is deleted (or repointed).
Notes
- Asynchronous creates. Creating a compliance JDBC driver, connector, or plugin returns a
jobobject. The object is fully ready once its job reaches a completed state; poll the job (GET /v3/jobs/{jobId}) if you need to gate subsequent steps in automation. - Extended logging. Set
enable_logger: trueon the connector to capture extended driver logs when diagnosing connectivity or masking issues.