SSIS Components for PostgreSQL

Build 24.0.9060

Establishing a Connection

Enabling SSIS in Visual Studio 2022

If you're using Visual Studio 2022, you will need to install the SQL Server Integration Services Projects extension to use SSIS.

  1. Navigate to Extensions > Manage Extensions.
  2. In the Manage Extensions window's search box, search for "SQL Server Integration Services Projects 2022" and select the extension in the list.
  3. Click Download.
  4. Close Visual Studio and run the downloaded Microsoft.DataTools.IntegrationServices.exe installer. Proceed through the installer with default settings.
  5. Open Visual Studio. There should now be an "Integration Services Project" project template available.

Adding the PostgreSQL Connection Manager

Create a new connection manager as follows:

  1. Create a Visual Studio project with the "Integration Services Project" template.
  2. In the project, right-click within the Connection Managers window and select New Connection from the menu.
  3. In the Description column, select CData PostgreSQL Connection Manager and click Add...
  4. Configure the component as described in the next section.

Alternatively, if you have an existing project and CData PostgreSQL Source or CData PostgreSQL Destination:

  1. Right-click your CData PostgreSQL source or destination component in your data flow
  2. Select Edit... to open an editor window.
  3. Click the New... button next to the Connection manager: dropdown selector to create a connection manager.
  4. Configure the component as described in the next section.

Connecting to PostgreSQL

The following connection properties are usually required to connect to PostgreSQL.

  • Server: The host name or IP of the server hosting the PostgreSQL database.
  • User: The user which will be used to authenticate with the PostgreSQL server.

You can also optionally set the following:

  • Database: The database to connect to when connecting to the PostgreSQL Server. If this is not set, the user's default database will be used.
  • Port: The port of the server hosting the PostgreSQL database. 5432 by default.

Standard

Unless you select another scheme, Password is the default authentication mechanism the component uses to connect to PostgreSQL Server.

To use standard authentication, set the AuthScheme to Password to connect to PostgreSQL with login credentials.

Then, to authenticate, set the Password associated with the authenticating user.

pg_hba.conf Auth Schemes

There are subtypes of the Password authentication scheme supported by the component which must be enabled in the pg_hba.conf file on the PostgreSQL server.

See the PostgreSQL documentation for more information about authentication setup on the PostgreSQL Server.

MD5

The component can authenticate by verifying the password with MD5. This authentication method must be enabled by setting the auth-method in the pg_hba.conf file to md5.

SASL

The component can authenticate by verifying the password with SASL (particularly, SCRAM-SHA-256). This authentication method must be enabled by setting the auth-method in the pg_hba.conf file to scram-sha-256.

Azure

Methods available for connecting to PostgreSQL with Microsoft Azure include:

  • Azure Active Directory OAuth
  • Azure Active Directory Password
  • Azure Active Directory MSI

Azure AD

Azure AD is Microsoft’s multi-tenant, cloud-based directory and identity management service. It is user-based authentication that requires that you set AuthScheme to AzureAD.

Authentication to Azure AD over a Web application always requires the creation of a custom OAuth application. For details, see Creating an Azure AD Application.

Desktop Applications

CData provides an embedded OAuth application that simplifies connection to Azure AD from a Desktop application.

You can also authenticate from a desktop application using a custom OAuth application. (For further information, see Creating an Azure AD Application.) To authenticate via Azure AD, set these parameters:

  • AuthScheme: AzureAD.
  • Custom applications only:

    • OAuthClientId: The client Id assigned when you registered your custom OAuth application.
    • OAuthClientSecret: The client secret assigned when you registered your custom OAuth application.
    • CallbackURL: The redirect URI you defined when you registered your custom OAuth application.

When you connect, the component opens PostgreSQL's OAuth endpoint in your default browser. Log in and grant permissions to the application.

The component completes the OAuth process, obtaining an access token from PostgreSQL and using it to request data. The OAuth values are saved in the path specified in OAuthSettingsLocation. These values persist across connections.

When the access token expires, the component refreshes it automatically.

Headless Machines

To configure the driver with a user account on a headless machine, you must authenticate on another device that has an internet browser.

You can do this in either of the following ways:

  • Obtain the OAuthVerifier value as described below in Option 1: Obtain and Exchange a Verifier Code.
  • Install the component on another machine as described below in Option 2: Transfer OAuth Settings. After you authenticate via the usual browser-based flow, transfer the OAuth authentication values.

Option 1: Obtain and Exchange a Verifier Code

  1. Find the authorization endpoint.

    Custom applications only: Set these properties to create the Authorization URL:

    • InitiateOAuth: OFF.
    • OAuthClientId: The client Id assigned when you registered your application.
    • OAuthClientSecret: The client secret assigned when you registered your application.

    Custom and embedded applications: Call the GetOAuthAuthorizationUrl stored procedure.

    1. Open the URL returned by the stored procedure in a browser.
    2. Log in and grant permissions to the component. You are redirected to the callback URL, which contains the verifier code.
    3. Save the value of the verifier code. You will use this later to set the OAuthVerifier connection property.

  2. Exchange the OAuth verifier code for OAuth refresh and access tokens.

    At the headless machine, set these properties:

    • AuthScheme: AzureAD.
    • InitiateOAuth: REFRESH.
    • OAuthVerifier: The verifier code.
    • OAuthSettingsLocation: The location of the file that holds the OAuth token values that persist across connections.
    • Custom applications only:

      • OAuthClientId: The client Id in your custom OAuth application settings.
      • OAuthClientSecret: The client secret in the custom OAuth application settings.

  3. After the OAuth settings file is generated, reset the following properties to connect:

    • InitiateOAuth: REFRESH.
    • OAuthSettingsLocation: The location containing the encrypted OAuth authentication values. Make sure this location grants read and write permissions to the component to enable the automatic refreshing of the access token.
    • Custom applications only:

      • OAuthClientId: The client Id assigned when you registered your application.
      • OAuthClientSecret: The client secret assigned when you registered your application.

Option 2: Transfer OAuth Settings

Before you can connect via a headless machine, you must create and install a connection with the driver on a device that supports an internet browser. Set the connection properties as described above, in Desktop Applications.

After you complete the instructions in Desktop Applications, the resulting authentication values are encrypted and written to the location specified by OAuthSettingsLocation. The default filename is OAuthSettings.txt.

Once you have successfully tested the connection, copy the OAuth settings file to your headless machine.

At the headless machine, set these properties:

  • AuthScheme: AzureAD.
  • InitiateOAuth: REFRESH.
  • OAuthSettingsLocation: The location of your OAuth settings file. Make sure this location gives read and write permissions to the component to enable the automatic refreshing of the access token.
  • Custom applications only:

    • OAuthClientId: The client Id assigned when you registered your application.
    • OAuthClientSecret: The client secret assigned when you registered your application.

Note: Azure PostgreSQL Flexible servers are not supported. Only Azure PostgreSQL Single Server instances are supported.

Ensure that an Active Directory admin has been set in the Azure PostgreSQL instance (Active Directory admin -> Set admin).

Next, set the following to connect:

  • User: Set this to the Azure Active Directory user you granted access to the Azure PostgreSQL server.
  • AzureTenant: Set this to the Directory (tenant) ID, found on the Overview page of the OAuth app used to authenticate to PostgreSQL on Azure.
  • Server: Set this to the Server name of the Azure PostgreSQL server, found on the Overview page of the Azure PostgreSQL instance.
  • Database: Set this to the database you'd like to connect to on the Azure PostgreSQL instance.
  • Port: The port of the server hosting the PostgreSQL database. 5432 by default.
  • InitiateOAuth: Set this to GETANDREFRESH.
  • OAuthClientId: Set this to the Application (client) ID, found on the Overview page of the OAuth app used to authenticate to PostgreSQL on Azure.
  • OAuthClientSecret: Set this to the Value of the client secret, generated at the Certificates and secrets page of the authenticating OAuth app.
  • CallbackURL: Set this to the Redirect URI you specified during the creation of your OAuth app.

EC2 Instances

Set AuthScheme to AwsEC2Roles.

If you are using the component from an EC2 Instance and have an IAM Role assigned to the instance, you can use the IAM Role to authenticate. Since the component automatically obtains your IAM Role credentials and authenticates with them, it is not necessary to specify AWSAccessKey and AWSSecretKey.

If you are also using an IAM role to authenticate, you must additionally specify the following:

  • AWSRoleARN: Specify the Role ARN for the role you'd like to authenticate with. This will cause the component to attempt to retrieve credentials for the specified role.
  • AWSExternalId (optional): Only required if you are assuming a role in another AWS account.

IMDSv2 Support

The PostgreSQL component now supports IMDSv2. Unlike IMDSv1, the new version requires an authentication token. Endpoints and response are the same in both versions.

In IMDSv2, the PostgreSQL component first attempts to retrieve the IMDSv2 metadata token and then uses it to call AWS metadata endpoints. If it is unable to retrieve the token, the component reverts to IMDSv1.

Azure Password

Set AuthScheme to AzurePassword.

To connect using your Azure credentials directly, specify the following connection properties:

  • AuthScheme: Set this to AzurePassword.
  • User: Set this to your user account you use to connect to Azure.
  • Password: Set this to the password you use to connect to Azure.
  • AzureTenant: Set this to the Directory (tenant) ID, found on the Overview page of the OAuth app used to authenticate to PostgreSQL on Azure.
  • Server: Set this to the Server name of the Azure PostgreSQL server, found on the Overview page of the Azure PostgreSQL instance.
  • Database: Set this to the database you'd like to connect to on the Azure PostgreSQL instance.
  • Port: The port of the server hosting the PostgreSQL database. 5432 by default.

GCP Service Account

To authenticate to your PostgreSQL Google SQL Cloud Instance using a service account, you must create a new service account and have a copy of the accounts certificate. If you do not already have a service account, you can create one by following the procedure in Creating an Azure AD Application. For a JSON file, set these properties:

  • AuthScheme: Set this to GCPServiceAccount.
  • InitiateOAuth: Set this to GETANDREFRESH.
  • OAuthJWTCertType: Set this to GOOGLEJSON.
  • OAuthJWTCert: Set this to the path to the .json file provided by Google.
  • OAuthJWTSubject: (optional) Only set this value if the service account is part of a GSuite domain and you want to enable delegation. The value of this property should be the email address of the user whose data you want to access.

For a PFX file, set these properties instead:

  • AuthScheme: Set this to GCPServiceAccount.
  • InitiateOAuth: Set this to GETANDREFRESH.
  • OAuthJWTCertType: Set this to PFXFILE.
  • OAuthJWTCert: Set this to the path to the .pfx file provided by Google.
  • OAuthJWTCertPassword: (optional) Set this to the .pfx file password. In most cases you must provide this since Google encrypts PFX certificates.
  • OAuthJWTCertSubject: (optional) Set this only if you are using a OAuthJWTCertType which stores multiple certificates. Should not be set for PFX certificates generated by Google.
  • OAuthJWTIssuer: Set this to the email address of the service account. This address will usually include the domain iam.gserviceaccount.com.
  • OAuthJWTSubject: (optional) Only set this value if the service account is part of a GSuite domain and you want to enable delegation. The value of this property should be the email address of the user whose data you want to access.

Managed Service Identity (MSI)

If you are running PostgreSQL on an Azure VM and want to leverage MSI to connect, set AuthScheme to AzureMSI.

User-Managed Identities

To obtain a token for a managed identity, use the OAuthClientId property to specify the managed identity's "client_id".

When your VM has multiple user-assigned managed identities, you must also specify OAuthClientId.

Amazon Web Services

Obtain AWS Keys

To obtain the credentials for an IAM user:
  1. Sign into the IAM console.
  2. In the navigation pane, select Users.
  3. To create or manage the access keys for a user, select the user and then go to the Security Credentials tab.
To obtain the credentials for your AWS root account:
  1. Sign into the AWS Management console with the credentials for your root account.
  2. Select your account name or number.
  3. In the menu that displays, select My Security Credentials.
  4. To manage or create root account access keys, click Continue to Security Credentials and expand the "Access Keys" section.

AWS IAM Roles

Set AuthScheme to AwsIAMRoles.

In many situations, it may be preferable to use an IAM role for authentication instead of the direct security credentials of an AWS root user. If you are specifying the AWSAccessKey and AWSSecretKey of an AWS root user, you may not use roles.

To authenticate as an AWS role, set these properties:

  • AuthScheme: Set this to AwsIAMRoles.
  • User: Set this to the AWS-hosted PostgreSQL user that you granted the aws_iam role to. This user should map to an AWS user that has a role containing a policy which includes the rds-db:connect permission.
  • AWSRoleARN: Specify the Role ARN for the role attached to the authenticating IAM user. This will cause the component to attempt to retrieve credentials for the specified role.
  • AWSAccessKey: The access key of the authenticating IAM user.
  • AWSSecretKey: The secret key of the authenticating IAM user.

If multi-factor authentication is required, specify the following:

  • CredentialsLocation: The location of the settings file where MFA credentials are saved. See the Credentials File Location page under Connection String Options for more information.
  • MFASerialNumber: The serial number of the MFA device if one is being used.
  • MFAToken: The temporary token available from your MFA device.
This causes the component to submit the MFA credentials in the request to retrieve temporary authentication credentials.

Note: If you want to control the duration of the temporary credentials, set the TemporaryTokenDuration property (default: 3600 seconds).

Kerberos

The authentication with Kerberos is initiated by PostgreSQL Server when the CData SSIS Components for PostgreSQL is trying to connect to it. You should setup Kerberos on the PostgreSQL Server to activate this authentication method. Once you have Kerberos authentication setup on the PostgreSQL Server, see Using Kerberos for details on how to authenticate with Kerberos by the component.

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