20.0.12 • Published 11 days ago

teradatasql v20.0.12

Weekly downloads
-
License
Teradata License ...
Repository
github
Last release
11 days ago

Teradata SQL Driver for Node.js

This package enables Node.js applications to connect to the Teradata Database.

This package requires 64-bit Node.js 12 or later, and runs on Windows, macOS, and Linux. 32-bit Node.js is not supported.

Please note that Node.js versions 14 and 16 are not currently supported for Linux and macOS. An issue (ref-napi#54) in Node.js versions 14 and 16 affects the node-ffi-napi library that the driver depends on. This issue is fixed in later versions of Node.js.

For community support, please visit Teradata Community.

For Teradata customer support, please visit Teradata Customer Service.

Please note, this driver may contain beta/preview features ("Beta Features"). As such, by downloading and/or using the driver, in addition to agreeing to the licensing terms below, you acknowledge that the Beta Features are experimental in nature and that the Beta Features are provided "AS IS" and may not be functional on any machine or in any environment.

Copyright 2024 Teradata. All Rights Reserved.

Table of Contents

Features

At the present time, the driver offers the following features.

  • Supported for use with Teradata database 16.20 and later releases.
  • COP Discovery.
  • Laddered Concurrent Connect.
  • HTTPS/TLS connections with Teradata database 16.20.53.30 and later.
  • Encrypted logon using the TD2, JWT, LDAP, KRB5 (Kerberos), or TDNEGO logon mechanisms.
  • Data encryption governed by central administration, or enabled via the encryptdata connection parameter.
  • Unicode character data transferred via the UTF8 session character set.
  • Auto-commit for ANSI and TERA transaction modes.
  • Result set row size up to 1 MB.
  • Multi-statement requests that return multiple result sets.
  • Most JDBC escape syntax.
  • Parameterized SQL requests with question-mark parameter markers.
  • Parameterized batch SQL requests with multiple rows of data bound to question-mark parameter markers.
  • Auto-Generated Key Retrieval (AGKR) for identity column values and more.
  • Large Object (LOB) support for the BLOB and CLOB data types.
  • Complex data types such as XML, JSON, DATASET STORAGE FORMAT AVRO, and DATASET STORAGE FORMAT CSV.
  • ElicitFile protocol support for DDL commands that create external UDFs or stored procedures and upload a file from client to database.
  • CREATE PROCEDURE and REPLACE PROCEDURE commands.
  • Stored Procedure Dynamic Result Sets.
  • FastLoad and FastExport.
  • Monitor partition.

Limitations

  • The UTF8 session character set is always used. The charset connection parameter is not supported.
  • No support yet for Recoverable Network Protocol and Redrive.

Installation

The driver depends on the ffi-napi, ref-napi, ref-array-di packages which are available from npmjs.com.

Use npm install teradatasql to download and install the driver and its dependencies automatically.

License

Use of the driver is governed by the License Agreement for the Teradata SQL Driver for Node.js.

When the driver is installed, the LICENSE and THIRDPARTYLICENSE files are placed in the teradatasql directory under your node_modules installation directory.

In addition to the license terms, the driver may contain beta/preview features ("Beta Features"). As such, by downloading and/or using the driver, in addition to the licensing terms, you acknowledge that the Beta Features are experimental in nature and that the Beta Features are provided "AS IS" and may not be functional on any machine or in any environment.

Documentation

When the driver is installed, the README.md file is placed in the teradatasql directory under your node_modules installation directory. This permits you to view the documentation offline, when you are not connected to the Internet.

The README.md file is a plain text file containing the documentation for the driver. While the file can be viewed with any text file viewer or editor, your viewing experience will be best with an editor that understands Markdown format.

Sample Programs

Sample programs are provided to demonstrate how to use the driver. When the driver is installed, the sample programs are placed in the teradatasql/samples directory under your node_modules installation directory.

The sample programs are coded with a fake database hostname whomooz, username guest, and password please. Substitute your actual database hostname and credentials before running a sample program.

ProgramPurpose
AGKRBatchInsert.tsDemonstrates how to insert a batch of rows with Auto-Generated Key Retrieval (AGKR)
AGKRInsertSelect.tsDemonstrates Insert/Select with Auto-Generated Key Retrieval (AGKR)
BatchInsert.tsDemonstrates how to insert a batch of rows
BatchInsertCSV.tsDemonstrates how to insert a batch of rows from a CSV file
BatchInsPerf.tsMeasures time to insert one million rows
CharPadding.tsDemonstrates the database's Character Export Width behavior
CommitRollback.tsDemonstrates commit and rollback methods with auto-commit off.
DecimalDigits.tsDemonstrates how to format decimal.Decimal values.
DriverDatabaseVersion.tsDisplays the driver version and database version
ElicitFile.tsDemonstrates C source file upload to create a User-Defined Function (UDF)
ExportCSVResult.tsDemonstrates how to export a query result set to a CSV file
ExportCSVResults.tsDemonstrates how to export multiple query result sets to CSV files
FakeExportCSVResults.tsDemonstrates how to export multiple query result sets with the metadata to CSV files
FakeResultSetCon.tsDemonstrates connection parameter for fake result sets
FakeResultSetEsc.tsDemonstrates escape function for fake result sets
FastExportCSV.tsDemonstrates how to FastExport rows from a table to a CSV file
FastExportTable.tsDemonstrates how to FastExport rows from a table
FastLoadBatch.tsDemonstrates how to FastLoad batches of rows
FastLoadCSV.tsDemonstrates how to FastLoad batches of rows from a CSV file
HelpSession.tsDisplays session information
IgnoreErrors.tsDemonstrates how to ignore errors
InsertLob.tsDemonstrates how to insert BLOB and CLOB values
InsertXML.tsDemonstrates how to insert and retrieve XML values
LoadCSVFile.tsDemonstrates how to load data from a CSV file into a table
LobLocators.tsDemonstrates how to use LOB locators
MetadataFromPrepare.tsDemonstrates how to prepare a SQL request and obtain SQL statement metadata
ParamDataTypes.tsDemonstrates how to specify data types for parameter marker bind values
ShowCommand.tsDisplays the results from the SHOW command
StoredProc.tsDemonstrates how to create and call a SQL stored procedure
TJEncryptPassword.tsCreates encrypted password files

Using the Driver

Example usage of establishing a connection:

    const teradatasql = require("teradatasql");

    const con = teradatasql.connect({
        host: 'whomooz',
        user: 'guest',
        password: 'please'
    });

You may specify connection parameters as a JavaScript object, as a JSON string, or using a combination of the two approaches. The TeradataConnection.connect function's first argument is a JavaScript object. The TeradataConnection.connect function's second arguments is an optional JSON string.

Connection parameters specified only as a JavaScript object:

con = teradataConnection.connect({host:"whomooz",user:"guest",password:"please"})

Connection parameters specified as a JSON string:

con = teradataConnection.connect({}, '{"host":"whomooz", "user":"guest", "password":"please"}')

Connection parameters specified using a combination:

con = teradataConnection.connect({host:"whomooz"}, '{"user":"guest", "password":"please"}')

When a combination of parameters are specified, connection parameters specified as a JSON string take precedence over same-named connection parameters specified in the JavaScript object.

Connection Parameters

The following table lists the connection parameters currently offered by the driver. Connection parameter values are case-sensitive unless stated otherwise.

Our goal is consistency for the connection parameters offered by this driver and the Teradata JDBC Driver, with respect to connection parameter names and functionality. For comparison, Teradata JDBC Driver connection parameters are documented here.

ParameterDefaultTypeDescription
accountstringSpecifies the database account. Equivalent to the Teradata JDBC Driver ACCOUNT connection parameter.
browserstringSpecifies the command to open the browser for Browser Authentication when logmech is BROWSER. Browser Authentication is supported for Windows and macOS. Equivalent to the Teradata JDBC Driver BROWSER connection parameter.The specified command must include a placeholder token, literally specified as PLACEHOLDER, which the driver will replace with the Identity Provider authorization endpoint URL. The PLACEHOLDER token is case-sensitive and must be specified in uppercase. On Windows, the default command is cmd /c start "title" "PLACEHOLDER". Windows command syntax requires the quoted title to precede the quoted URL. On macOS, the default command is open PLACEHOLDER. macOS command syntax does not allow the URL to be quoted.
browser_tab_timeout"5"quoted integerSpecifies the number of seconds to wait before closing the browser tab after Browser Authentication is completed. The default is 5 seconds. The behavior is under the browser's control, and not all browsers support automatic closing of browser tabs. Typically, the tab used to log on will remain open indefinitely, but the second and subsequent tabs will be automatically closed. Specify 0 (zero) to close the tab immediately. Specify -1 to turn off automatic closing of browser tabs. Browser Authentication is supported for Windows and macOS. Equivalent to the Teradata JDBC Driver BROWSER_TAB_TIMEOUT connection parameter.
browser_timeout"180"quoted integerSpecifies the number of seconds that the driver will wait for Browser Authentication to complete. The default is 180 seconds (3 minutes). Browser Authentication is supported for Windows and macOS. Equivalent to the Teradata JDBC Driver BROWSER_TIMEOUT connection parameter.
code_append_file"-out"stringSpecifies how to display the verification URL and code. Optional when logmech is CODE and ignored for other logmech values. The default -out prints the verification URL and code to stdout. Specify -err to print the verification URL and code to stderr. Specify a file name to append the verification URL and code to an existing file or create a new file if the file does not exist. Equivalent to the Teradata JDBC Driver CODE_APPEND_FILE connection parameter.
column_name"false"quoted booleanControls the behavior of cursor .description sequence name items. Equivalent to the Teradata JDBC Driver COLUMN_NAME connection parameter. False specifies that a cursor .description sequence name item provides the AS-clause name if available, or the column name if available, or the column title. True specifies that a cursor .description sequence name item provides the column name if available, but has no effect when StatementInfo parcel support is unavailable.
connect_failure_ttl"0"quoted integerSpecifies the time-to-live in seconds to remember the most recent connection failure for each IP address/port combination. The driver subsequently skips connection attempts to that IP address/port for the duration of the time-to-live. The default value of zero disables this feature. The recommended value is half the database restart time. Equivalent to the Teradata JDBC Driver CONNECT_FAILURE_TTL connection parameter.
connect_function"0"quoted integerSpecifies whether the database should allocate a Logon Sequence Number (LSN) for this session, or associate this session with an existing LSN. Specify 0 for a session with no LSN (the default). Specify 1 to allocate a new LSN for the session. Specify 2 to associate the session with the existing LSN identified by the logon_sequence_number connection parameter. The database only permits sessions for the same user to share an LSN. Equivalent to the Teradata JDBC Driver CONNECT_FUNCTION connection parameter.
connect_timeout"10000"quoted integerSpecifies the timeout in milliseconds for establishing a TCP socket connection. Specify 0 for no timeout. The default is 10 seconds (10000 milliseconds).
cop"true"quoted booleanSpecifies whether COP Discovery is performed. Equivalent to the Teradata JDBC Driver COP connection parameter.
coplast"false"quoted booleanSpecifies how COP Discovery determines the last COP hostname. Equivalent to the Teradata JDBC Driver COPLAST connection parameter. When coplast is false or omitted, or COP Discovery is turned off, then no DNS lookup occurs for the coplast hostname. When coplast is true, and COP Discovery is turned on, then a DNS lookup occurs for a coplast hostname.
databasestringSpecifies the initial database to use after logon, instead of the user's default database. Equivalent to the Teradata JDBC Driver DATABASE connection parameter.
dbs_port"1025"quoted integerSpecifies the database port number. Equivalent to the Teradata JDBC Driver DBS_PORT connection parameter.
encryptdata"false"quoted booleanControls encryption of data exchanged between the driver and the database. Equivalent to the Teradata JDBC Driver ENCRYPTDATA connection parameter.
error_query_count"21"quoted integerSpecifies how many times the driver will attempt to query FastLoad Error Table 1 after a FastLoad operation. Equivalent to the Teradata JDBC Driver ERROR_QUERY_COUNT connection parameter.
error_query_interval"500"quoted integerSpecifies how many milliseconds the driver will wait between attempts to query FastLoad Error Table 1. Equivalent to the Teradata JDBC Driver ERROR_QUERY_INTERVAL connection parameter.
error_table_1_suffix"_ERR_1"stringSpecifies the suffix for the name of FastLoad Error Table 1. Equivalent to the Teradata JDBC Driver ERROR_TABLE_1_SUFFIX connection parameter.
error_table_2_suffix"_ERR_2"stringSpecifies the suffix for the name of FastLoad Error Table 2. Equivalent to the Teradata JDBC Driver ERROR_TABLE_2_SUFFIX connection parameter.
error_table_databasestringSpecifies the database name for the FastLoad error tables. By default, FastLoad error tables reside in the same database as the destination table being loaded. Equivalent to the Teradata JDBC Driver ERROR_TABLE_DATABASE connection parameter.
fake_result_sets"false"quoted booleanControls whether a fake result set containing statement metadata precedes each real result set.
field_quote"\""stringSpecifies a single character string used to quote fields in a CSV file.
field_sep","stringSpecifies a single character string used to separate fields in a CSV file. Equivalent to the Teradata JDBC Driver FIELD_SEP connection parameter.
govern"true"quoted booleanControls FastLoad and FastExport throttling by Teradata workload management rules. When set to true (the default), workload management rules may delay a FastLoad or FastExport. When set to false, workload management rules will reject rather than delay a FastLoad or FastExport. Equivalent to the Teradata JDBC Driver GOVERN connection parameter.
hoststringSpecifies the database hostname.
http_proxystringSpecifies the proxy server URL for HTTP connections to TLS certificate verification CRL and OCSP endpoints. The URL must begin with http:// and must include a colon : and port number.
http_proxy_passwordstringSpecifies the proxy server password for the proxy server identified by the http_proxy parameter. This parameter may only be specified in conjunction with the http_proxy parameter. When this parameter is omitted, no proxy server password is provided to the proxy server identified by the http_proxy parameter.
http_proxy_userstringSpecifies the proxy server username for the proxy server identified by the http_proxy parameter. This parameter may only be specified in conjunction with the http_proxy parameter. When this parameter is omitted, no proxy server username is provided to the proxy server identified by the http_proxy parameter.
https_port"443"quoted integerSpecifies the database port number for HTTPS/TLS connections. Equivalent to the Teradata JDBC Driver HTTPS_PORT connection parameter.
https_proxystringSpecifies the proxy server URL for HTTPS/TLS connections to the database and to Identity Provider endpoints. The URL must begin with http:// and must include a colon : and port number. The driver connects to the proxy server using a non-TLS HTTP connection, then uses the HTTP CONNECT method to establish an HTTPS/TLS connection to the destination. Equivalent to the Teradata JDBC Driver HTTPS_PROXY connection parameter.
https_proxy_passwordstringSpecifies the proxy server password for the proxy server identified by the https_proxy parameter. This parameter may only be specified in conjunction with the https_proxy parameter. When this parameter is omitted, no proxy server password is provided to the proxy server identified by the https_proxy parameter. Equivalent to the Teradata JDBC Driver HTTPS_PROXY_PASSWORD connection parameter.
https_proxy_userstringSpecifies the proxy server username for the proxy server identified by the https_proxy parameter. This parameter may only be specified in conjunction with the https_proxy parameter. When this parameter is omitted, no proxy server username is provided to the proxy server identified by the https_proxy parameter. Equivalent to the Teradata JDBC Driver HTTPS_PROXY_USER connection parameter.
jws_algorithm"RS256"stringSpecifies the JSON Web Signature (JWS) algorithm to sign the JWT Bearer Token for client authentication. Optional when logmech is BEARER and ignored for other logmech values. The default RS256 is RSASSA-PKCS1-v1_5 using SHA-256. Specify RS384 for RSASSA-PKCS1-v1_5 using SHA-384. Specify RS512 for RSASSA-PKCS1-v1_5 using SHA-512. Equivalent to the Teradata JDBC Driver JWS_ALGORITHM connection parameter.
jws_certstringSpecifies the file name of the X.509 certificate PEM file that contains the public key corresponding to the private key from jws_private_key. Optional when logmech is BEARER and ignored for other logmech values. When this parameter is specified, the "x5t" header thumbprint is added to the JWT Bearer Token for the Identity Provider to select the public key for JWT signature verification. Some Identity Providers, such as Microsoft Entra ID, require this. When this parameter is omitted, the "x5t" header thumbprint is not added to the JWT Bearer Token. Some Identity Providers do not require the "x5t" header thumbprint. Equivalent to the Teradata JDBC Driver JWS_CERT connection parameter.
jws_private_keystringSpecifies the file name of the PEM or JWK file containing the private key to sign the JWT Bearer Token for client authentication. Required when logmech is BEARER and ignored for other logmech values. PEM and JWK file formats are supported. The private key filename must end with the .pem or .jwk extension. A PEM file must contain the BEGIN/END PRIVATE KEY header and trailer. If a JWK file contains a "kid" (key identifier) parameter, the "kid" header is added to the JWT Bearer Token for the Identity Provider to select the public key for JWT signature verification. Equivalent to the Teradata JDBC Driver JWS_PRIVATE_KEY connection parameter.
lob_support"true"quoted booleanControls LOB support. Equivalent to the Teradata JDBC Driver LOB_SUPPORT connection parameter.
log"0"quoted integerControls debug logging. Somewhat equivalent to the Teradata JDBC Driver LOG connection parameter. This parameter's behavior is subject to change in the future. This parameter's value is currently defined as an integer in which the 1-bit governs function and method tracing, the 2-bit governs debug logging, the 4-bit governs transmit and receive message hex dumps, and the 8-bit governs timing. Compose the value by adding together 1, 2, 4, and/or 8.
logdatastringSpecifies extra data for the chosen logon authentication method. Equivalent to the Teradata JDBC Driver LOGDATA connection parameter.
logmech"TD2"stringSpecifies the logon authentication method. Equivalent to the Teradata JDBC Driver LOGMECH connection parameter. The database user must have the "logon with null password" permission for KRB5 Single Sign On (SSO) or any of the OpenID Connect (OIDC) methods BEARER, BROWSER, CODE, CRED, JWT, ROPC, or SECRET. Values are case-insensitive. BEARER uses OIDC Client Credentials Grant with JWT Bearer Token for client authentication. BROWSER uses Browser Authentication, supported for Windows and macOS. CODE uses OIDC Device Code Flow, also known as OIDC Device Authorization Grant. CRED uses OIDC Client Credentials Grant with client_secret_post for client authentication. JWT uses JSON Web Token. KRB5 uses Kerberos V5. LDAP uses Lightweight Directory Access Protocol. ROPC uses OIDC Resource Owner Password Credentials (ROPC). SECRET uses OIDC Client Credentials Grant with client_secret_basic for client authentication. TD2 uses Teradata Method 2. TDNEGO automatically selects the appropriate logon authentication method.
logon_sequence_numberquoted integerAssociates this session with an existing Logon Sequence Number (LSN) when connect_function is 2. The database only permits sessions for the same user to share an LSN. An LSN groups multiple sessions together for workload management. Using an LSN is a three-step process. First, establish a control session with connect_function as 1, which allocates a new LSN. Second, obtain the LSN from the control session using the escape function {fn teradata_logon_sequence_number}. Third, establish an associated session with connect_function as 2 and the logon sequence number. Equivalent to the Teradata JDBC Driver LOGON_SEQUENCE_NUMBER connection parameter.
logon_timeout"0"quoted integerSpecifies the logon timeout in seconds. Zero means no timeout.
manage_error_tables"true"quoted booleanControls whether the driver manages the FastLoad error tables.
max_message_body"2097000"quoted integerSpecifies the maximum Response Message size in bytes. Equivalent to the Teradata JDBC Driver MAX_MESSAGE_BODY connection parameter.
oidc_clientidstringSpecifies the OpenID Connect (OIDC) Client ID to use for Browser Authentication and other OIDC methods. When omitted, the default Client ID comes from the database's TdgssUserConfigFile.xml file. Browser Authentication is supported for Windows and macOS. Equivalent to the Teradata JDBC Driver OIDC_CLIENTID connection parameter.
oidc_scope"openid"stringSpecifies the OpenID Connect (OIDC) scope to use for Browser Authentication. Beginning with Teradata Database 17.20.03.11, the default scope can be specified in the database's TdgssUserConfigFile.xml file, using the IdPConfig element's Scope attribute. Browser Authentication is supported for Windows and macOS. Equivalent to the Teradata JDBC Driver OIDC_SCOPE connection parameter.
oidc_token"access_token"stringSpecifies the kind of OIDC token to use for Browser Authentication. Specify id_token to use the id_token instead of the access_token. Browser Authentication is supported for Windows and macOS. Equivalent to the Teradata JDBC Driver OIDC_TOKEN connection parameter.
partition"DBC/SQL"stringSpecifies the database partition. Equivalent to the Teradata JDBC Driver PARTITION connection parameter.
passwordstringSpecifies the database password. Equivalent to the Teradata JDBC Driver PASSWORD connection parameter.
proxy_bypass_hostsstringSpecifies a matching pattern for hostnames and addresses to bypass the proxy server identified by the http_proxy and/or https_proxy parameter. This parameter may only be specified in conjunction with the http_proxy and/or https_proxy parameter. Separate multiple hostnames and addresses with a vertical bar \| character. Specify an asterisk * as a wildcard character. When this parameter is omitted, the default pattern localhost\|127.*\|[::1] bypasses the proxy server identified by the http_proxy and/or https_proxy parameter for common variations of the loopback address. Equivalent to the Teradata JDBC Driver PROXY_BYPASS_HOSTS connection parameter.
request_timeout"0"quoted integerSpecifies the timeout for executing each SQL request. Zero means no timeout.
runstartup"false"quoted booleanControls whether the user's STARTUP SQL request is executed after logon. For more information, refer to User STARTUP SQL Request. Equivalent to the Teradata JDBC Driver RUNSTARTUP connection parameter.
sessionsquoted integerSpecifies the number of data transfer connections for FastLoad or FastExport. The default (recommended) lets the database choose the appropriate number of connections. Equivalent to the Teradata JDBC Driver SESSIONS connection parameter.
sip_support"true"quoted booleanControls whether StatementInfo parcel is used. Equivalent to the Teradata JDBC Driver SIP_SUPPORT connection parameter.
sp_spl"true"quoted booleanControls whether stored procedure source code is saved in the database when a SQL stored procedure is created. Equivalent to the Teradata JDBC Driver SP_SPL connection parameter.
sslcastringSpecifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with sslmode values VERIFY-CA or VERIFY-FULL. Equivalent to the Teradata JDBC Driver SSLCA connection parameter.
sslcapathstringSpecifies a directory of PEM files that contain Certificate Authority (CA) certificates for use with sslmode values VERIFY-CA or VERIFY-FULL. Only files with an extension of .pem are used. Other files in the specified directory are not used. Equivalent to the Teradata JDBC Driver SSLCAPATH connection parameter.
sslcipherstringSpecifies the TLS cipher for HTTPS/TLS connections. Equivalent to the Teradata JDBC Driver SSLCIPHER connection parameter.
sslcrc"ALLOW"stringControls TLS certificate revocation checking for HTTPS/TLS connections when sslmode is VERIFY-FULL. This parameter is ignored unless sslmode is VERIFY-FULL. Equivalent to the Teradata JDBC Driver SSLCRC connection parameter. Values are case-insensitive. ALLOW provides "soft fail" behavior such that communication failures are ignored during certificate revocation checking. REQUIRE mandates that certificate revocation checking must succeed.
sslmode"PREFER"stringSpecifies the mode for connections to the database. Equivalent to the Teradata JDBC Driver SSLMODE connection parameter. Values are case-insensitive. DISABLE disables HTTPS/TLS connections and uses only non-TLS connections. ALLOW uses non-TLS connections unless the database requires HTTPS/TLS connections. PREFER uses HTTPS/TLS connections unless the database does not offer HTTPS/TLS connections. REQUIRE uses only HTTPS/TLS connections. VERIFY-CA uses only HTTPS/TLS connections and verifies that the server certificate is valid and trusted. VERIFY-FULL uses only HTTPS/TLS connections, verifies that the server certificate is valid and trusted, and verifies that the server certificate matches the database hostname.
sslprotocol"TLSv1.2"stringSpecifies the TLS protocol for HTTPS/TLS connections. Equivalent to the Teradata JDBC Driver SSLPROTOCOL connection parameter.
teradata_values"true"quoted booleanControls whether str or a more specific JavaScript data type is used for certain result set column value types. Refer to the Data Types table below for details.
tmode"DEFAULT"stringSpecifies the transaction mode. Equivalent to the Teradata JDBC Driver TMODE connection parameter. Possible values are DEFAULT (the default), ANSI, or TERA.
userstringSpecifies the database username. Equivalent to the Teradata JDBC Driver USER connection parameter.

COP Discovery

The driver provides Communications Processor (COP) discovery behavior when the cop connection parameter is true or omitted. COP Discovery is turned off when the cop connection parameter is false.

A database system can be composed of multiple database nodes. One or more of the database nodes can be configured to run the database Gateway process. Each database node that runs the database Gateway process is termed a Communications Processor, or COP. COP Discovery refers to the procedure of identifying all the available COP hostnames and their IP addresses. COP hostnames can be defined in DNS, or can be defined in the client system's hosts file. Teradata strongly recommends that COP hostnames be defined in DNS, rather than the client system's hosts file. Defining COP hostnames in DNS provides centralized administration, and enables centralized changes to COP hostnames if and when the database is reconfigured.

The coplast connection parameter specifies how COP Discovery determines the last COP hostname.

  • When coplast is false or omitted, or COP Discovery is turned off, then the driver will not perform a DNS lookup for the coplast hostname.
  • When coplast is true, and COP Discovery is turned on, then the driver will first perform a DNS lookup for a coplast hostname to obtain the IP address of the last COP hostname before performing COP Discovery. Subsequently, during COP Discovery, the driver will stop searching for COP hostnames when either an unknown COP hostname is encountered, or a COP hostname is encountered whose IP address matches the IP address of the coplast hostname.

Specifying coplast as true can improve performance with DNS that is slow to respond for DNS lookup failures, and is necessary for DNS that never returns a DNS lookup failure.

When performing COP Discovery, the driver starts with cop1, which is appended to the database hostname, and then proceeds with cop2, cop3, ..., copN. The driver supports domain-name qualification for COP Discovery and the coplast hostname. Domain-name qualification is recommended, because it can improve performance by avoiding unnecessary DNS lookups for DNS search suffixes.

The following table illustrates the DNS lookups performed for a hypothetical three-node database system named "whomooz".

 No domain name qualificationWith domain name qualification(Recommended)
Application-specifieddatabase hostnamewhomoozwhomooz.domain.com
Default: COP Discovery turned on, and coplast is false or omitted,perform DNS lookups until unknown COP hostname is encounteredwhomoozcop110.0.0.1whomoozcop210.0.0.2whomoozcop310.0.0.3whomoozcop4undefinedwhomoozcop1.domain.com10.0.0.1whomoozcop2.domain.com10.0.0.2whomoozcop3.domain.com10.0.0.3whomoozcop4.domain.comundefined
COP Discovery turned on, and coplast is true,perform DNS lookups until COP hostname is found whose IP address matches the coplast hostname, or unknown COP hostname is encounteredwhomoozcoplast10.0.0.3whomoozcop110.0.0.1whomoozcop210.0.0.2whomoozcop310.0.0.3whomoozcoplast.domain.com10.0.0.3whomoozcop1.domain.com10.0.0.1whomoozcop2.domain.com10.0.0.2whomoozcop3.domain.com10.0.0.3
COP Discovery turned off and round-robin DNS,perform one DNS lookup that returns multiple IP addresseswhomooz10.0.0.1, 10.0.0.2, 10.0.0.3whomooz.domain.com10.0.0.1, 10.0.0.2, 10.0.0.3

Round-robin DNS rotates the list of IP addresses automatically to provide load distribution. Round-robin is only possible with DNS, not with the client system hosts file.

The driver supports the definition of multiple IP addresses for COP hostnames and non-COP hostnames.

For the first connection to a particular database system, the driver generates a random number to index into the list of COPs. For each subsequent connection, the driver increments the saved index until it wraps around to the first position. This behavior provides load distribution across all discovered COPs.

The driver masks connection failures to down COPs, thereby hiding most connection failures from the client application. An exception is thrown to the application only when all the COPs are down for that database. If a COP is down, the next COP in the sequence (including a wrap-around to the first COP) receives extra connections that were originally destined for the down COP. When multiple IP addresses are defined in DNS for a COP, the driver will attempt to connect to each of the COP's IP addresses, and the COP is considered down only when connection attempts fail to all of the COP's IP addresses.

If COP Discovery is turned off, or no COP hostnames are defined in DNS, the driver connects directly to the hostname specified in the host connection parameter. This permits load distribution schemes other than the COP Discovery approach. For example, round-robin DNS or a TCP/IP load distribution product can be used. COP Discovery takes precedence over simple database hostname lookup. To use an alternative load distribution scheme, either ensure that no COP hostnames are defined in DNS, or turn off COP Discovery with cop as false.

Stored Password Protection

Overview

Stored Password Protection enables an application to provide a connection password in encrypted form to the driver.

An encrypted password may be specified in the following contexts:

  • A login password specified as the password connection parameter.
  • A login password specified within the logdata connection parameter.

If the password, however specified, begins with the prefix ENCRYPTED_PASSWORD( then the specified password must follow this format:

ENCRYPTED_PASSWORD(file:PasswordEncryptionKeyFileName,file:EncryptedPasswordFileName)

Each filename must be preceded by the file: prefix. The PasswordEncryptionKeyFileName must be separated from the EncryptedPasswordFileName by a single comma.

The PasswordEncryptionKeyFileName specifies the name of a file that contains the password encryption key and associated information. The EncryptedPasswordFileName specifies the name of a file that contains the encrypted password and associated information. The two files are described below.

Stored Password Protection is offered by this driver, the Teradata JDBC Driver, and the Teradata SQL Driver for R. These drivers use the same file format.

Program TJEncryptPassword.ts

TJEncryptPassword.ts is a sample program to create encrypted password files for use with Stored Password Protection. When the driver is installed, the sample programs are placed in the teradatasql/samples directory under your node_modules installation directory.

This program works in conjunction with Stored Password Protection offered by the driver. This program creates the files containing the password encryption key and encrypted password, which can be subsequently specified via the ENCRYPTED_PASSWORD( syntax.

You are not required to use this program to create the files containing the password encryption key and encrypted password. You can develop your own software to create the necessary files. You may also use the TJEncryptPassword.java sample program that is available with the Teradata JDBC Driver Reference. The only requirement is that the files must match the format expected by the driver, which is documented below.

This program encrypts the password and then immediately decrypts the password, in order to verify that the password can be successfully decrypted. This program mimics the password decryption of the driver, and is intended to openly illustrate its operation and enable scrutiny by the community.

The encrypted password is only as safe as the two files. You are responsible for restricting access to the files containing the password encryption key and encrypted password. If an attacker obtains both files, the password can be decrypted. The operating system file permissions for the two files should be as limited and restrictive as possible, to ensure that only the intended operating system userid has access to the files.

The two files can be kept on separate physical volumes, to reduce the risk that both files might be lost at the same time. If either or both of the files are located on a network volume, then an encrypted wire protocol can be used to access the network volume, such as sshfs, encrypted NFSv4, or encrypted SMB 3.0.

This program accepts eight command-line arguments:

ArgumentExampleDescription
TransformationAES/CBC/NoPaddingSpecifies the transformation in the form Algorithm/Mode/Padding. Supported transformations are listed in a table below.
KeySizeInBits256Specifies the algorithm key size, which governs the encryption strength.
MACHmacSHA256Specifies the message authentication code (MAC) algorithm HmacSHA1 or HmacSHA256.
PasswordEncryptionKeyFileNamePassKey.propertiesSpecifies a filename in the current directory, a relative pathname, or an absolute pathname. The file is created by this program. If the file already exists, it will be overwritten by the new file.
EncryptedPasswordFileNameEncPass.propertiesSpecifies a filename in the current directory, a relative pathname, or an absolute pathname. The filename or pathname that must differ from the PasswordEncryptionKeyFileName. The file is created by this program. If the file already exists, it will be overwritten by the new file.
HostnamewhomoozSpecifies the database hostname.
UsernameguestSpecifies the database username.
PasswordpleaseSpecifies the database password to be encrypted. Unicode characters in the password can be specified with the \uXXXX escape sequence.

Example Commands

The TJEncryptPassword program uses the driver to log on to the specified database using the encrypted password, so the driver must have been installed with the npm install teradatasql command.

The following commands assume that the TJEncryptPassword.ts program file is located in the current directory. When the driver is installed, the sample programs are placed in the teradatasql/samples directory under your node_modules installation directory. Change your current directory to the teradatasql/samples directory under your node_modules installation directory.

The following example commands illustrate using a 256-bit AES key, and using the HmacSHA256 algorithm.

npx ts-node TJEncryptPassword.ts AES/CBC/NoPadding 256 HmacSHA256 PassKey.properties EncPass.properties whomooz guest please

Password Encryption Key File Format

You are not required to use the TJEncryptPassword.ts program to create the files containing the password encryption key and encrypted password. You can develop your own software to create the necessary files, but the files must match the format expected by the driver.

The password encryption key file is a text file in Java Properties file format, using the ISO 8859-1 character encoding.

The file must contain the following string properties:

PropertyDescription
version=1The version number must be 1. This property is required.
transformation=Algorithm/Mode/PaddingSpecifies the transformation in the form Algorithm/Mode/Padding. Supported transformations are listed in a table below. This property is required.
algorithm=AlgorithmThis value must correspond to the Algorithm portion of the transformation. This property is required.
match=MatchValueThe password encryption key and encrypted password files must contain the same match value. The match values are compared to ensure that the two specified files are related to each other, serving as a "sanity check" to help avoid configuration errors. This property is required.
key=HexDigitsThis value is the password encryption key, encoded as hex digits. This property is required.
mac=MACAlgorithmSpecifies the message authentication code (MAC) algorithm HmacSHA1 or HmacSHA256. Stored Password Protection performs Encrypt-then-MAC for protection from a padding oracle attack. This property is required.
mackey=HexDigitsThis value is the MAC key, encoded as hex digits. This property is required.

The TJEncryptPassword.ts program uses a timestamp as a shared match value, but a timestamp is not required. Any shared string can serve as a match value. The timestamp is not related in any way to the encryption of the password, and the timestamp cannot be used to decrypt the password.

Encrypted Password File Format

The encrypted password file is a text file in Java Properties file format, using the ISO 8859-1 character encoding.

The file must contain the following string properties:

PropertyDescription
version=1The version number must be 1. This property is required.
match=MatchValueThe password encryption key and encrypted password files must contain the same match value. The match values are compared to ensure that the two specified files are related to each other, serving as a "sanity check" to help avoid configuration errors. This property is required.
password=HexDigitsThis value is the encrypted password, encoded as hex digits. This property is required.
params=HexDigitsThis value contains the cipher algorithm parameters, if any, encoded as hex digits. Some ciphers need algorithm parameters that cannot be derived from the key, such as an initialization vector. This property is optional, depending on whether the cipher algorithm has associated parameters.
hash=HexDigitsThis value is the expected message authentication code (MAC), encoded as hex digits. After encryption, the expected MAC is calculated using the ciphertext, transformation name, and algorithm parameters if any. Before decryption, the driver calculates the MAC using the ciphertext, transformation name, and algorithm parameters if any, and verifies that the calculated MAC matches the expected MAC. If the calculated MAC differs from the expected MAC, then either or both of the files may have been tampered with. This property is required.

While params is technically optional, an initialization vector is required by all three block cipher modes CBC, CFB, and OFB that are supported by the driver. ECB (Electronic Codebook) does not require params, but ECB is not supported by the driver.

Transformation, Key Size, and MAC

A transformation is a string that describes the set of operations to be performed on the given input, to produce transformed output. A transformation specifies the name of a cryptographic algorithm such as AES, followed by a feedback mode and padding scheme.

The driver supports the following transformations and key sizes.

TransformationKey Size
AES/CBC/NoPadding128
AES/CBC/NoPadding192
AES/CBC/NoPadding256
AES/CBC/PKCS5Padding128
AES/CBC/PKCS5Padding192
AES/CBC/PKCS5Padding256
AES/CFB/NoPadding128
AES/CFB/NoPadding192
AES/CFB/NoPadding256
AES/CFB/PKCS5Padding128
AES/CFB/PKCS5Padding192
AES/CFB/PKCS5Padding256
AES/OFB/NoPadding128
AES/OFB/NoPadding192
AES/OFB/NoPadding256
AES/OFB/PKCS5Padding128
AES/OFB/PKCS5Padding192
AES/OFB/PKCS5Padding256

Stored Password Protection uses a symmetric encryption algorithm such as AES, in which the same secret key is used for encryption and decryption of the password. Stored Password Protection does not use an asymmetric encryption algorithm such as RSA, with separate public and private keys.

CBC (Cipher Block Chaining) is a block cipher encryption mode. With CBC, each ciphertext block is dependent on all plaintext blocks processed up to that point. CBC is suitable for encrypting data whose total byte count exceeds the algorithm's block size, and is therefore suitable for use with Stored Password Protection.

Stored Password Protection hides the password length in the encrypted password file by extending the length of the UTF8-encoded password with trailing null bytes. The length is extended to the next 512-byte boundary.

  • A block cipher with no padding, such as AES/CBC/NoPadding, may only be used to encrypt data whose byte count after extension is a multiple of the algorithm's block size. The 512-byte boundary is compatible with many block ciphers. AES, for example, has a block size of 128 bits (16 bytes), and is therefore compatible with the 512-byte boundary.
  • A block cipher with padding, such as AES/CBC/PKCS5Padding, can be used to encrypt data of any length. However, CBC with padding is vulnerable to a "padding oracle attack", so Stored Password Protection performs Encrypt-then-MAC for protection from a padding oracle attack. MAC algorithms HmacSHA1 and HmacSHA256 are supported.
  • The driver does not support block ciphers used as byte-oriented ciphers via modes such as CFB8 or OFB8.

The strength of the encryption depends on your choice of cipher algorithm and key size.

  • AES uses a 128-bit (16 byte), 192-bit (24 byte), or 256-bit (32 byte) key.

Sharing Files with the Teradata JDBC Driver

This driver and the Teradata JDBC Driver can share the files containing the password encryption key and encrypted password, if you use a transformation, key size, and MAC algorithm that is supported by both drivers.

  • Recommended choices for compatibility are AES/CBC/NoPadding and HmacSHA256.
  • Use a 256-bit key if your Java environment has the Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files from Oracle.
  • Use a 128-bit key if your Java environment does not have the Unlimited Strength Jurisdiction Policy Files.
  • Use HmacSHA1 for compatibility with JDK 1.4.2.

File Locations

For the ENCRYPTED_PASSWORD( syntax of the driver, each filename must be preceded by the file: prefix. The PasswordEncryptionKeyFileName must be separated from the EncryptedPasswordFileName by a single comma. The files can be located in the current directory, specified with a relative path, or specified with an absolute path.

Example for files in the current directory:

ENCRYPTED_PASSWORD(file:JohnDoeKey.properties,file:JohnDoePass.properties)

Example with relative paths:

ENCRYPTED_PASSWORD(file:../dir1/JohnDoeKey.properties,file:../dir2/JohnDoePass.properties)

Example with absolute paths on Windows:

ENCRYPTED_PASSWORD(file:c:/dir1/JohnDoeKey.properties,file:c:/dir2/JohnDoePass.properties)

Example with absolute paths on Linux:

ENCRYPTED_PASSWORD(file:/dir1/JohnDoeKey.properties,file:/dir2/JohnDoePass.properties)

Processing Sequence

The two filenames specified for an encrypted password must be accessible to the driver and must conform to the properties file formats described above. The driver raises an exception if the file is not accessible, or the file does not conform to the required file format.

The driver verifies that the match values in the two files are present, and match each other. The driver raises an exception if the match values differ from each other. The match values are compared to ensure that the two specified files are related to each other, serving as a "sanity check" to help avoid configuration errors. The TJEncryptPassword program uses a timestamp as a shared match value, but a timestamp is not required. Any shared string can serve as a match value. The timestamp is not related in any way to the encryption of the password, and the timestamp cannot be used to decrypt the password.

Before decryption, the driver calculates the MAC using the ciphertext, transformation name, and algorithm parameters if any, and verifies that the calculated MAC matches the expected MAC. The driver raises an exception if the calculated MAC differs from the expected MAC, to indicate that either or both of the files may have been tampered with.

Finally, the driver uses the decrypted password to log on to the database.

Client Attributes

Client Attributes record a variety of information about the client system and client software in the system tables DBC.SessionTbl and DBC.EventLog. Client Attributes are intended to be a replacement for the information recorded in the LogonSource column of the system tables DBC.SessionTbl and DBC.EventLog.

The Client Attributes are recorded at session logon time. Subsequently, the system views DBC.SessionInfoV and DBC.LogOnOffV can be queried to obtain information about the client system and client software on a per-session basis. Client Attribute values may be recorded in the database in either mixed-case or in uppercase, depending on the session character set and other factors. Analysis of recorded Client Attributes must flexibly accommodate either mixed-case or uppercase values.

Warning: The information in this section is subject to change in future releases of the driver. Client Attributes can be "mined" for information about client system demographics; however, any applications that parse Client Attribute values must be changed if Client Attribute formats are changed in the future.

Client Attributes are not intended to be used for workload management. Instead, query bands are intended for workload management. Any use of Client Attributes for workload management may break if Client Attributes are changed, or augmented, in the future.

Client AttributeSourceDescription
MechanismNamedatabaseThe connection's logon mechanism; for example, TD2, LDAP, etc.
ClientIpAddressdatabaseThe client IP address, as determined by the database
ClientTcpPortNumberdatabaseThe connection's client TCP port number, as determined by the database
ClientIPAddrByClientdriverThe client IP address, as determined by the driver
ClientPortByClientdriverThe connection's client TCP port number, as determined by the driver
ClientProgramNamedriverThe client program name, followed by a streamlined call stack
ClientSystemUserIddriverThe client user name
ClientOsNamedriverThe client operating system name
ClientProcThreadIddriverThe client process ID
ClientVmNamedriverNode.js runtime information
ClientTdHostNamedriverThe database hostname as specified by the application, without any COP suffix
ClientCOPSuffixedHostNamedriverThe COP-suffixed database hostname chosen by the driver
ServerIPAddrByClientdriverThe database node's IP address, as determined by the driver
ServerPortByClientdriverThe destination port number of the TCP connection to the database node, as determined by the driver
ClientConfTypedriverThe confidentiality type, as determined by the driverV - TLS used for encryption, with full certificate verificationC - TLS used for encryption, with Certificate Authority (CA) verificationR - TLS used for encryption, with no certificate verificationE - TLS was not attempted, and TDGSS used for encryptionU - TLS was not attempted, and TDGSS encryption depends on central administrationF - TLS was attempted, but the TLS handshake failed, so this is a fallback to using TDGSS for encryptionH - SSLMODE was set to PREFER, but a non-TLS connection was made, and TDGSS encryption depends on central administration
ServerConfTypedatabaseThe confidentiality type, as determined by the databaseT - TLS used for encryptionE - TDGSS used for encryptionU - Data transfer is unencrypted
ClientConfVersiondatabaseThe TLS version as determined by the database, if this is an HTTPS/TLS connection
ClientConfCipherSuitedatabaseThe TLS cipher as determined by the database, if this is an HTTPS/TLS connection
ClientAttributesExdriverAdditional Client Attributes are available in this column as a list of name=value pairs, each terminated by a semicolon. Individual values can be accessed using the NVP system function.NODEJS - The Node.js versionGO - The Go versionSCS - The session character setCCS - The client character setLOB - Y/N indicator for LOB supportSIP - Y/N indicator for StatementInfo parcel supportTM - The transaction mode indicator A (ANSI) or T (TERA)ENC - Y/N indicator for encryptdata connection parameterDP - The dbs_port connection parameterHP - The https_port connection parameterSSL - Numeric level corresponding to sslmodeSSLM - The sslmode connection parameterCERT - The TLS certificate statusBA - Y/N indicator for Browser AuthenticationLM - The logon authentication methodJWS - The JSON Web Signature (JWS) algorithmJH - JWT header parameters to identify signature keyThe CERT attribute indicates the TLS certificate status for an HTTPS/TLS connection. When the CERT attribute indicates the TLS certificate is valid (V) or invalid (I), then additional TLS certificate status details are provided as a series of comma-separated two-letter codes.U - the TLS certificate status is unavailableV - the TLS certificate status is validI - the TLS certificate status is invalidPU - sslca PEM file is unavailable for server certificate verificationPA - server certificate was verified using sslca PEM filePR - server certificate was rejected using sslca PEM fileDU - sslcapath PEM directory is unavailable for server certificate verificationDA - server certificate was verified using sslcapath PEM directoryDR - server certificate was rejected using sslcapath PEM directorySA - server certificate was verified by the systemSR - server certificate was rejected by the systemCY - server certificate passed VERIFY-CA checkCN - server certificate failed VERIFY-CA checkHU - server hostname is unavailable for server certificate matching, because database IP address was specifiedHY - server hostname matches server certificateHN - server hostname does not match server certificateRU - resolved server hostname is unavailable for server certificate matching, because database IP address was specifiedRY - resolved server hostname matches server certificateRN - resolved server hostname does not match server certificateIY - IP address matches server certificateIN - IP address does not match server certificateFY - server certificate passed VERIFY-FULL checkFN - server certificate failed VERIFY-FULL check

LogonSource Column

The LogonSource column is obsolete and has been superseded by Client Attributes. The LogonSource column may be deprecated and subsequently removed in future releases of the database.

When the driver establishes a connection to the database, the driver composes a string value that is stored in the LogonSource column of the system tables DBC.SessionTbl and DBC.EventLog. The LogonSource column is included in system views such as DBC.SessionInfoV and DBC.LogOnOffV. All LogonSource values are recorded in the database in uppercase.

The driver follows the format documented in the Teradata Data Dictionary, section "System Views Columns Reference", for network-attached LogonSource values. Network-attached LogonSource values have eight fields, separated by whitespace. The database composes fields 1 through 3, and the driver composes fields 4 through 8.

FieldSourceDescription
1databaseThe string (TCP/IP) to indicate the connection type
2databaseThe connection's client TCP port number, in hexadecimal
3databaseThe client IP address, as determined by the database
4driverThe database hostname as specified by the application, without any COP suffix
5driverThe client process ID
6driverThe client user name
7driverThe client program name
8driverThe string 01 LSS to indicate the LogonSource string version 01

User

20.0.12

11 days ago

20.0.11

16 days ago

20.0.10

1 month ago

20.0.8

2 months ago

20.0.7

3 months ago

20.0.6

4 months ago

20.0.5

4 months ago

20.0.4

4 months ago

20.0.3

5 months ago

20.0.2

6 months ago

20.0.1

6 months ago

20.0.0

6 months ago