ODBC Driver for Amazon Redshift

Build 24.0.9060

Linux DSN Configuration

This section describes how to set up ODBC connectivity and configure DSNs on several Linux distributions: Debian-based systems, like Ubuntu, and Red Hat Linux platforms, like Red Hat Enterprise Linux (RHEL) and Fedora.

Minimum Linux Versions

Here are the minimum supported versions for Red Hat-based and Debian-based systems:

OSMin. Version
Ubuntu18.04
Debian10
RHEL8
Fedora28
SUSE15

Installing the Driver Dependencies

Run the following commands as root or with sudo to install the necessary dependencies:

  • Debian/Ubuntu:
    apt-get install libc6 libstdc++6 zlib1g libgcc1
  • RHEL/Fedora:
    yum install glibc libstdc++ zlib libgcc

Installing the Driver

You can use standard package management systems to install the driver.

On Debian-based systems, like Ubuntu, run the following command with root or sudo:

dpkg -i /path/to/driver/setup/RedshiftODBCDriverforUnix.deb 

On systems that support the RPM package format, run the following command with root or sudo:

rpm -ivh /path/to/driver/RedshiftODBCDriverforUnix.rpm 

Licensing the Driver

Run the following commands to license the driver. To activate a trial, omit the <key> input.

cd /opt/cdata/cdata-odbc-driver-for-redshift/bin/
sudo ./install-license.sh <key>

Connecting through the Driver Manager

The driver manager loads the driver and passes function calls from the application to the driver. You need to register the driver with the driver manager and you define DSNs in the driver manager's configuration files.

The driver installation registers the driver with the unixODBC driver manager and creates a system DSN. The unixODBC driver manager can be used from Python and from many other applications. Your application may embed another driver manager.

Creating the DSN

See Using unixODBC to install unixODBC and configure DSNs. See Using the DataDirect Driver Manager to create a DSN to connect to OBIEE, Informatica, and SAS.

Connecting to Amazon Redshift

The following connection properties are usually required to connect to Amazon Redshift.

  • Server: The host name or IP of the server hosting the Amazon Redshift database.
  • Database: The database that you created for your Amazon Redshift cluster.
  • Port (optional): The port of the server hosting the Amazon Redshift database. 5439 by default.

Follow these steps to obtain these values in the AWS Management Console:

  1. Open the Amazon Redshift console (http://console.aws.amazon.com/redshift).
  2. On the Clusters page, click the name of the cluster.
  3. On the Configuration tab, obtain the properties from the "Cluster Database Properties" section. The connection property values are the same as the values set in the ODBC URL.

The driver provides secure communication with Amazon Redshift server using SSL encryption. You can optionally turn off SSL encryption by setting UseSSL to false.

You can also leverage SSL authentication to connect to Amazon Redshift data. To do so, specify the following connection properties:

  • SSLClientCert: Set this to the name of the certificate store for the client certificate. This is used in the case of 2-way SSL, where truststore and keystore are kept on both the client and server machines.
  • SSLClientCertPassword: If a client certificate store is password-protected, set this value to the store's password.
  • SSLClientCertSubject: The subject of the TLS/SSL client certificate. This is used to locate the certificate in the store.
  • SSLClientCertType: The certificate type of the client store.
  • SSLServerCert: The certificate to be accepted from the server.

The following is the example connection string to connect Amazon Redshift using a standard user and password pair and inactive SSL encryption:

User=username;Password=password;Server=example.us-west-2.redshift.amazonaws.com;Database=your_database;UseSSL=false;"

Authenticating to Amazon Redshift

Azure Active Directory

Prerequisites

  • Only non-B2C Azure tenants can complete the Azure AD authentication scheme.
  • You must have an active Azure AD account. If you do not have an active account, create one before beginning this process.

Authentication

To authenticate to Azure AD, you must complete these tasks:

  1. Create and Register an OAuth Application
  2. Create and Configure a Redshift Client Application
  3. Define a New Identity Provider
  4. Specify Connection Properties

The following sections describe these tasks in detail.

Create and Register an OAuth Application

Follow these steps to create an OAuth app for logging into your Amazon Redshift database via Azure:

  1. On the Azure Active Directory Overview page, in the left navigation bar, select App registrations.
  2. Click New registrations at the top of the App registrations page.
  3. On the Register an app page, fill in your details and click Register at the bottom of the page. Save your CallbackURL property value.
  4. After the creation of the application, you are brought to its Overview page. From there, in the left navigation bar:

    1. Click Certificates & secrets.
    2. Click New client secret.
    3. In the Add a client secret window, supply your details and click Add at the bottom of the window.
    4. Save your OAuthClientSecret (the Value field of the OAuth secret that is displayed).

  5. From the newly registered application, click Expose an API in the left navigation bar.
  6. Next to the App ID URI, click Set.
  7. The Set the App ID URI dialog appears with the information filled in from registering. Click Save.
  8. Click Add a scope.
  9. Fill in your details and click Add scope at the bottom of the form.

Create and Configure a Redshift Client Application

Follow these steps to create another application, which serves as the client application for your Amazon Redshift database:

  1. Navigate to the Azure Active Directory management page and click App registrations.
  2. Click New registrations at the top of the page.
  3. On the Register an application page, fill in your details and click Register at the bottom of the page.
  4. Following the creation of the app, you are sent to its Overview page. From there, in the left navigation bar:

    1. Click Certificates & secrets.
    2. Click New client secret.
    3. In the Add a client secret window, supply your details and click Add at the bottom of the window.
    4. Save your OAuthClientSecret (the Value field of the OAuth secret that is displayed).

  5. In the left navigation bar of the client app's management page:

    1. Click API permissions.
    2. Click Add a permission.
    3. Choose Microsoft Graph API.
    4. Click Application permissions.
    5. Select Directory > "Directory.Read.All".
    6. Click Add at the bottom.
    7. Click Grant admin consent.
    8. Click Yes.

  6. In the Azure Active Directory left navigation bar:

    1. Click Groups.
    2. On the Groups page, click New group and fill in the details.
    3. Click No owners selected.
    4. The Add owners window appears. Select the user.
    5. Click Create.

Define a New Identity Provider

Follow these steps to define a new Identify Provider:

  1. In the Azure Active Directory Overviewpage:

    1. Select App registrations from the left navigation pane.
    2. Select the All applications tab and choose your first OAuth application.

  2. In the left navigation bar on the OAuth page, click Manifest. Search in the editor for the accessTokenAcceptedVersion. If the value is null, it is a v1.0 token. If the value is set to 2, this is a v2.0 token.
  3. From the Amazon Redshift instance's query box, submit the identity provider query, following the example below:
        CREATE IDENTITY PROVIDER oauth_standard TYPE azure
        NAMESPACE 'mynamespace'
        PARAMETERS '{
        "issuer":"https://sts.windows.net/your_tenant_here/",
        "client_id":"YourClientId",
        "client_secret":"YourClientSecret",
        "audience":["your_application_id_uri_here"]
        }' 

    Terminology Guide:

    • Your issuer ID: The issuer ID to trust when a token is received. The unique identifier for the tenant_id is appended to the issuer. If using a v1.0 token, use https://sts.windows.net/<your_tenant_id_here>/. If using a v2.0 token, use https://login.microsoftonline.com/<your_tenant_id_here>/v2.0.
    • Your client_id: The unique, public identifier of the application registered with the identity provider. This is referred to as the application ID. It is the clien ID generated for the second application (the Amazon Redshift client application).
    • Your client_secret: A secret identifier, or password, known only to the identity provider and the registered application. This is the secret generated for the second application (the Amazon Redshift application).
    • audience: The Application ID (URI) assigned to the first application (the OAuth application).

    You can use any name you like for the NAMESPACE.

  4. In Amazon Redshift, place the CREATE IDENTITY PROVIDER query (like above example) into the query text box.
  5. Click Run at the bottom of the query box.
  6. In the query text box, create a role on the Redshift database in this format:
    create role "mynamespace:myazuregroup";
    Replace with your identity provider's namespace provided in the CREATE IDENTITY PROVIDER query and the name of Azure group that you created earlier. Click Run at the bottom of the query box.
  7. In the query text box, grant table access to this new role as follows:
    grant select on all tables in schema public to role "mynamespace:myazuregroup";
  8. Replace the above example with your namespace and Azure group name.
  9. Click Run at the bottom of the query box.

Set Connection Properties

Specify the following connection properties:

  • AuthScheme: Set this to AzureAD.
  • Server: Set this to the name of your Amazon Redshift server endpoint.
  • Database: Set this to the name of your Amazon Redshift database that you would like to connect to.
  • User: Set this to the name of the authenticating Amazon Redshift user.
  • AzureTenant: Set this to the ID of the Azure Tenant that your OAuth and client apps were created under. Find this in the Overview page of one of the apps under Directory (tenant) ID.
  • SSOLoginURL: Set this to the value of the Application ID URI, visible on the Overview page of your OAuth app.
  • Scope: For v1.0 OAuth tokens, set this to the Scopes field in the Expose an API page of your OAuth app. For v2.0 OAuth tokens, this will be the same as the OAuth app's Client ID.
  • OAuthClientID: Set this to the first OAuth application client ID in the Overview page of the Amazon Redshift client application that you created.
  • OAuthClientSecret: For your first OAuth application, set this to the Value of the OAuth client secret from the client application's Certificates & secrets page.
  • CallbackURL: Set this to the callback URL of the OAuth app.

Troubleshooting Note If you encounter an "Azure JWT token does not have 'upn' field" error, follow these steps:

  1. On the Azure Active Directory management page, navigate to App Registrations and select your OAuth application.
  2. Click Token configuration in the left navigation bar.
  3. Click Add optional claim.
  4. In the Add optional claim screen, under Token type, click Access.
  5. Under the Claim column, select upn.
  6. Click Add at the bottom.
  7. Select Turn on the Microsoft Graph profile permission (required for claims to appear in the token).
  8. Click Add.
  9. Repeat this process for the client app.
  10. Attempt the connection again.

Azure Active Directory PKCE

To authenticate via Azure AD PKCE, you must complete the following tasks:

  1. Create and Register an OAuth Application
  2. Create and Configure a Redshift Client Application
  3. Define a New Identity Provider
  4. Specify Connection Properties

The following sections describe these tasks in detail.

Create and Register an OAuth Application

Follow these steps to create an OAuth application for logging into your Amazon Redshift database via Azure:

  1. On the Azure Active Directory Overview page, in the left navigation bar, Click App registrations.
  2. Click New registrations at the top of the App registrations page.
  3. On the Register an application page, fill in your details:

    1. For Name, enter a name (for example, "oauth_application").
    2. For Redirect URI, choose Public client/native (mobile and desktop) and enter a valid URL (for example, http://localhost:33333/).

  4. Click Register at the bottom of the page. Save the CallbackURL property value.
  5. From the newly registered application, click Expose an API in the left navigation bar.
  6. Next to the Application ID URI, click Set.
  7. The Set the App ID URI dialog appears with the information filled in your registration. Click Save.
  8. Click Add a scope.
  9. Fill in your details and click Add scope at the bottom of the form.
  10. Save the generated Application ID URI and the API scope; for example, api://6256f0b1-2284-43e4-8501-6e53dec4444f and api://6256f0b1-2284-43e4-8501-6e53dec4444f/jdbc_login.

Create and Configure a Redshift Client Application

Follow these steps to create another application, which serves as the client application for your Amazon Redshift database:

  1. On the Azure Active Directory Overview page, select App registrations from the left navigation bar.
  2. At the top of the App registrations page, click New registrations.
  3. On the Register an application page, fill in your details and click Register at the bottom of the page.
  4. After the creation of the application, you are brought to its Overview page. From there, in the left navigation bar:

    1. Click Certificates & secrets.
    2. Click New client secret.
    3. In the Add a client secret window, add your details and click Add at the bottom of the window.
    4. Save your OAuthClientSecret (the Value field of the OAuth secret that is displayed).

  5. In the left navigation bar of the client app's management page:

    1. Click API permissions.
    2. Click Add a permission.
    3. Choose Microsoft Graph API.
    4. Click Application permissions.
    5. Select Directory > "Directory.Read.All".
    6. Click Add at the bottom.
    7. Click Grant admin consent
    8. Click Yes.

  6. In the Azure Active Directory left navigation bar:

    1. Click Groups.
    2. On the Groups page, click New group and fill in the details.
    3. Click No owners selected.
    4. The Add owners window appears. Select the user.
    5. Click Create.

Define a New Identity Provider

Follow these steps to define a new Identity Provider:

  1. In the Azure Active Directory left navigation bar, click App registrations.
  2. Select the All applications tab and choose your first OAuth application.
  3. On the OAuth screen, in the left navigation bar, click Manifest. Look in the editor for the accessTokenAcceptedVersion. If the value is null or 1, it is a v1.0 token. If the value is 2, this is a v2.0 token.
  4. From the Amazon Redshift instance's query box, submit the identity provider query, following the example below:
        CREATE IDENTITY PROVIDER oauth_standard TYPE azure
        NAMESPACE 'mynamespace'
        PARAMETERS '{
        "issuer":"https://sts.windows.net/your_tenant_here/",
        "client_id":"YourRedshiftApplicationClientId",
        "client_secret":"YourRedshiftApplicationClientSecret"
        ,"audience":["your_oauth_application_id_uri_here"]
        }'
    For a v2.0 token issuer the value should be:
        "issuer":"https://login.microsoftonline.com/your_tenant_here/v2.0",
  5. Terminology Guide:

    1. Your issuer ID: The issuer ID to trust when a token is received. The unique identifier for the tenant_id is appended to the issuer. If you are using a v1.0 token, specify https://sts.windows.net<your_tenant_id_here>. If you are using a v2.0 token, specify https://login.microsoftonline.com<your_tenant_id_here>/v2.0..
    2. Your client_id: The unique, public identifier of the application registered with the identity provider. This is referred to as the application ID. It is the client ID generated for the second application (the Amazon Redshift application).
    3. Your client_secret: A secret identifier, or password, known only to the identity provider and the registered application. This is the secret generated for the second application (the Amazon Redshift application).
    4. audience: The Application ID (URI) assigned to the first application (the OAuth application).
    5. You can use any name you like for the namespace.

  6. In Amazon Redshift, place the CREATE IDENTITY PROVIDER query (like the above example) into the query text box.
  7. Click Run at the bottom of the query box.
  8. In the query text box, create a role on the Redshift database in this format:
    create role "mynamespace:myazuregroup";
  9. Replace with your identity provider's namespace provided in the CREATE IDENTITY PROVIDER query and the name of the Azure group you created earlier.
  10. Click Run at the bottom of the query box.
  11. In the query text box, grant table access to this new role as follows:
    grant select on all tables in schema public to role "mynamespace:myazuregroup";
  12. Replace the above example with your namespace and Azure group name.
  13. Click Run at the bottom of the query box.

Set Connection Properties

After finishing the above configuration, specify the following properties in the driver to connect to amazon Redshift:

  • AuthScheme: Set this to AzureADPKCE.
  • Server: Set this to the name of your Amazon Redshift server endpoint.
  • Database: Set this to the name of your Amazon Redshift database that you want to connect to.
  • Scope: For v1.0 OAuth tokens, set this to the Scopes field in the Expose an API page of your OAuth application (for example,api://d3cb3521-6c20-4e41-b16d-e48c8444ee11/jdbc_login). For v2.0 OAuth tokens, this is the same as the OAuth app's Client ID (for example, d3cb3521-6c20-4e41-b16d-e48c8444ee11).
  • OAuthClientID: Set this to the Application (client) ID in the Overview page of the OAuth application you created.6.
  • CallbackURL: Set this to the callback URL of the OAuth app.

Troubleshooting Note

If you encounter an "Azure JWT token does not have 'upn' field" error, follow these steps:

  1. On the Azure Active Directory management page, navigate to App Registrations and select your OAuth application.
  2. Select Token configuration > Add Optional claim in the left navigation bar.
  3. In the Add optional claim screen, under "Token type", click Access.
  4. Under the Claim column, select upn.
  5. Click Add at the bottom.
  6. Select Turn on the Microsoft Graph profile permission, which is required for claims to appear in the token.
  7. Click Add.
  8. Repeat this process for the client app.
  9. Attempt the connection again.

Standard Authentication

Set the AuthScheme to Basic to connect to Amazon Redshift with login credentials. In addition, set the following connection properties:

  • User: The user which will be used to authenticate with the Amazon Redshift server.
  • Password: The password which will be used to authenticate with the Amazon Redshift server.
The following is an example connection string:
AuthScheme=Basic;User=user;Password=password;Server=example.us-west-2.redshift.amazonaws.com;Database=your_database;

IAM credentials

Set the AuthScheme to IAMCredentials. The following is an example connection string:

AuthScheme=IAMCredentials;Server=example.us-west-2.redshift.amazonaws.com;Database=your_database;User=your_user;AWSAccessKey=your_access_key;AWSSecretKey=your_secretkey;

If you are connecting IAM role with temporary credentials you are also required to apply AWSSessionToken.

You can optionally apply:

  • AutoCreate: Create a database user with the name specified for User if one does not exist while connecting.
  • DbGroups: Database groups the database user joins for the current session.

ADFS

To connect to ADFS, set the AuthScheme to ADFS, and set these properties:

  • User: The ADFS user.
  • Password: The ADFS user's password.
  • SSOLoginURL: The SSO provider's login url.

Example connection string:

AuthScheme=ADFS;User=username;Password=password;SSOLoginURL='https://sts.company.com';

ADFS Integrated

The ADFS Integrated flow indicates you are connecting with the currently logged in Windows user credentials. To use the ADFS Integrated flow, do not specify the User and Password, but otherwise follow the same steps in the ADFS guide above.

To connect to PingFederate, set AuthScheme to PingFederate, and set these properties:

  • User: The PingFederate user.
  • Password: The PingFederate user's password.
  • SSOLoginURL: The SSO provider's login url.
  • AWSRoleARN (optional): If you have multiple role ARNs, specify the one you want to use for authorization.
  • AWSPrincipalARN (optional): If you have multiple principal ARNs, specify the one you want to use for authorization.
  • SSOProperties (optional): Authscheme=Basic if you want to include your username and password as an authorization header in requests to Amazon S3.

To enable mutual SSL authentication for SSOLoginURL, the WS-Trust STS endpoint, configure these SSOProperties:

  • SSLClientCert
  • SSLClientCertType
  • SSLClientCertSubject
  • SSLClientCertPassword

Example connection string:

Server=redshift-cluster-1.xxxxxxxxxxxx.us-east-1.redshift.amazonaws.com;Database=dev;Port=5439;UseSSL=true;SSLServerCert=*;AuthScheme=PingFederate;AutoCreate=TRUE;SSOLoginURL=https://mycustomserver.com:9033/idp/sts.wst;SSOExchangeUrl=https://us-east-1.signin.aws.amazon.com/platform/saml/acs/764ef411-xxxxxx;User=admin;Password=PassValue;AWSRegion=NORTHERNVIRGINIA;

Set the Driver Encoding

The ODBC drivers need to specify which encoding to use with the ODBC Driver Manager. By default, the CData ODBC Drivers for Unix are configured to use UTF-16 which is compatible with unixODBC, but other Driver Managers may require alternative encoding.

Alternatively, if you are using the ODBC driver from an application that uses the ANSI ODBC API it may be necessary to set the ANSI code page. For example, to import Japanese characters in an ANSI application, you can specify the code page in the config file '/opt/cdata/cdata-odbc-driver-for-redshift/lib/cdata.odbc.redshift.ini':

[Driver]
AnsiCodePage = 932

Copyright (c) 2024 CData Software, Inc. - All rights reserved.
Build 24.0.9060