diff --git a/backend/src/ee/services/dynamic-secret/providers/sql-database.ts b/backend/src/ee/services/dynamic-secret/providers/sql-database.ts index ae61fa011..ff628664c 100644 --- a/backend/src/ee/services/dynamic-secret/providers/sql-database.ts +++ b/backend/src/ee/services/dynamic-secret/providers/sql-database.ts @@ -8,11 +8,14 @@ import { BadRequestError } from "@app/lib/errors"; import { getDbConnectionHost } from "@app/lib/knex"; import { alphaNumericNanoId } from "@app/lib/nanoid"; -import { DynamicSecretSqlDBSchema, TDynamicProviderFns } from "./models"; +import { DynamicSecretSqlDBSchema, SqlProviders, TDynamicProviderFns } from "./models"; const EXTERNAL_REQUEST_TIMEOUT = 10 * 1000; -const generatePassword = (size?: number) => { +const generatePassword = (provider: SqlProviders) => { + // for now everyone else oracle can accept 48 password length + const size = provider === SqlProviders.Oracle ? 30 : 48; + const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~!*$#"; return customAlphabet(charset, 48)(size); }; @@ -59,10 +62,10 @@ export const SqlDatabaseProvider = (): TDynamicProviderFns => { const validateConnection = async (inputs: unknown) => { const providerInputs = await validateProviderInputs(inputs); const db = await getClient(providerInputs); - const isConnected = await db - .raw("SELECT NOW()") - .then(() => true) - .catch(() => false); + // oracle needs from keyword + const testStatement = providerInputs.client === SqlProviders.Oracle ? "SELECT 1 FROM DUAL" : "SELECT 1"; + + const isConnected = await db.raw(testStatement).then(() => true); await db.destroy(); return isConnected; }; @@ -72,7 +75,7 @@ export const SqlDatabaseProvider = (): TDynamicProviderFns => { const db = await getClient(providerInputs); const username = alphaNumericNanoId(32); - const password = generatePassword(); + const password = generatePassword(providerInputs.client); const { database } = providerInputs; const expiration = new Date(expireAt).toISOString(); diff --git a/frontend/src/views/SecretMainPage/components/ActionBar/CreateDynamicSecretForm/SqlDatabaseInputForm.tsx b/frontend/src/views/SecretMainPage/components/ActionBar/CreateDynamicSecretForm/SqlDatabaseInputForm.tsx index 0db1d0990..a3227ed52 100644 --- a/frontend/src/views/SecretMainPage/components/ActionBar/CreateDynamicSecretForm/SqlDatabaseInputForm.tsx +++ b/frontend/src/views/SecretMainPage/components/ActionBar/CreateDynamicSecretForm/SqlDatabaseInputForm.tsx @@ -80,9 +80,10 @@ const getSqlStatements = (provider: SqlProviders) => { if (provider === SqlProviders.Oracle) { return { creationStatement: - 'CREATE USER "{{username}}" IDENTIFIED BY \'{{password}}\';\nGRANT CONNECT TO "{{username}}";\nGRANT CREATE SESSION TO "{{username}}";', + 'CREATE USER "{{username}}" IDENTIFIED BY "{{password}}";\nGRANT CONNECT TO "{{username}}";\nGRANT CREATE SESSION TO "{{username}}";', renewStatement: "", - revocationStatement: 'REVOKE ALL PRIVILEGES FROM "{{username}}";\nDROP USER "{{username}}";' + revocationStatement: + 'REVOKE CONNECT FROM "{{username}}";\nREVOKE CREATE SESSION FROM "{{username}}";\nDROP USER "{{username}}";' }; }