> ## Documentation Index
> Fetch the complete documentation index at: https://docs.omni.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Connecting Exasol to Omni

> Learn how to create a database user, grant permissions, and connect your Exasol database to Omni.

export const BaseAccess = () => {
  return <span>
      <ParamField path="Base Access" required>
        Select the <a href="/administration/users/permissions">minimum level of access</a> users should have to models in the connection.
      </ParamField>
    </span>;
};

export const QueryTimeout = ({defaultValue}) => {
  return <span>
      <ParamField path="Query Timeout" default={defaultValue}>
        Maximum time in seconds before a query times out.
      </ParamField>
    </span>;
};

export const AutoGenerateRelationships = () => {
  return <span>
      <ParamField path="Auto-generate relationships" default="enabled">
        When enabled, Omni will automatically infer relationships between tables based on column name matching during schema refreshes. Defaults to enabled.
      </ParamField>
    </span>;
};

export const AllowUserSpecificTimezones = () => {
  return <span>
      <ParamField path="Allow User-Specific Timezones">
        When enabled, users can override the connection timezone with their own when querying.
      </ParamField>
    </span>;
};

export const QueryTimezone = () => {
  return <span>
      <ParamField path="Query Timezone" required>
        The timezone to use for Omni queries. If a timezone is specified, data will be converted from the <strong>Database Timezone</strong> to the selected timezone.
      </ParamField>
    </span>;
};

export const DatabaseTimezone = () => {
  return <span>
      <ParamField path="Database Timezone" required>
        The timezone used by the database.
      </ParamField>
    </span>;
};

export const TrustServerCertificate = () => {
  return <span>
      <ParamField path="Trust Server Certificate">
        Whether to trust the server's SSL/TLS certificate without validation.
      </ParamField>
    </span>;
};

export const Password = () => {
  return <span>
      <ParamField path="Password" required>
        The password for database authentication.
      </ParamField>
    </span>;
};

export const Username = () => {
  return <span>
      <ParamField path="Username" required>
        The username for database authentication.
      </ParamField>
    </span>;
};

export const Default = ({term = "Schema", required = true, defaultValue}) => {
  const lower = term.toLowerCase();
  return <span>
      <ParamField path={`Default ${term}`} required={required} default={defaultValue}>
        The default {lower} for the connection.
      </ParamField>
    </span>;
};

export const Offloaded = ({term = "Schemas"}) => {
  const lower = term.toLowerCase();
  return <span>
      <ParamField path={`Offloaded ${term}`}>
        A comma-separated list of {lower} to include in the connection, which will only load on demand. This setting is good for large {lower} or dbt dev {lower}.
      </ParamField>
    </span>;
};

export const Include = ({term = "Schemas"}) => {
  const lower = term.toLowerCase();
  return <span>
      <ParamField path={`Include ${term}`}>
        A comma-separated list of {lower} to include in the connection.
      </ParamField>
    </span>;
};

export const Port = ({defaultValue}) => {
  return <span>
      <ParamField path="Port" required default={defaultValue}>
        The port number for the database connection.
      </ParamField>
    </span>;
};

export const Host = () => {
  return <span>
      <ParamField path="Host" required>
        The address of the database server.
      </ParamField>
    </span>;
};

export const DisplayName = () => {
  return <span>
      <ParamField path="Display Name" required>
        A user-friendly name for the connection, which will be used throughout Omni.
      </ParamField>
    </span>;
};

## Requirements

To follow the steps in this guide, you'll need:

* **Organization Admin permissions in Omni**
* **Permissions in Exasol** that allow you to create database users and grant permissions

## Setup

<Steps>
  <Step title="Create an Omni database user" titleSize="h3">
    1. In your Exasol database, run the following command to create a database user for Omni:

       ```sql title="Create Omni user" theme={null}
       CREATE USER OMNI IDENTIFIED BY "<password>";
       GRANT ALTER SESSION TO OMNI;
       ```

    2. Grant the Omni user access to the system views required for schema, table, and column discovery:

       ```sql title="Grant metadata introspection permissions" theme={null}
       GRANT SELECT ON EXA_ALL_SCHEMAS TO OMNI;
       GRANT SELECT ON EXA_ALL_TABLES TO OMNI;
       GRANT SELECT ON EXA_ALL_COLUMNS TO OMNI;
       ```

    3. Grant `SELECT` access to the schemas or tables you want to query in Omni:

       ```sql title="Grant data access to the Omni user" theme={null}
       GRANT SELECT ON <tables used by OMNI> TO OMNI;
       ```

       You could also grant all privileges:

       ```sql title="Grant all privileges to the Omni user" theme={null}
       GRANT ALL PRIVILEGES ON SCHEMA <YOUR_SCHEMA> TO OMNI;
       ```

       Or, run the following to avoid needing to grant access to tables created in the future:

       ```sql title="Grant data access to all existing and future tables" theme={null}
       GRANT SELECT ANY TABLE TO OMNI;
       ```
  </Step>

  <Step title="Allowlist Omni's IP addresses" titleSize="h3">
    If access to the Exasol database is limited by IP address, you'll need to add Omni's IPs to the allowlist before you create the database connection.

    Omni's IP addresses can be found on an individual connection's page, accessed by navigating to **Settings > Connections** and clicking a connection.
  </Step>

  <Step title="Create the connection in Omni" titleSize="h3">
    1. In Omni, click **Settings > Connections**.

    2. Click the **Exasol** option.

    3. On the connection setup page, fill in the connection details:

           <DisplayName />

           <Host />

           <Port />

           <Include />

           <Offloaded />

           <Default />

           <Username />

           <Password />

           <TrustServerCertificate />

           <DatabaseTimezone />

           <QueryTimezone />

           <AllowUserSpecificTimezones />

           <AutoGenerateRelationships />

           <QueryTimeout defaultValue="900" />

           <BaseAccess />

    4. When finished, click **Create connection**.
  </Step>
</Steps>

## What's next?

Now that your database is set up, you can:

* Use the Omni Agent's [quickstart skill](/modeling/topics/quickstart) to create your first topic from business questions
* Configure user permissions, [schema refreshes](/modeling/develop/schema-refreshes), [environments](/connect-data/dynamic-environments) and [timezone settings](/connect-data/timezones)
* Learn how Omni [generates the model](/modeling/develop/model-generation) associated with the connection
