适用于 Python 的 Teradata SQL 驱动程序
项目描述
适用于 Python 的 Teradata SQL 驱动程序
此包使 Python 应用程序能够连接到 Teradata 数据库。
这个包实现了PEP-249 Python 数据库 API 规范 2.0。
此软件包需要 64 位 Python 3.4 或更高版本,可在 Windows、macOS 和 Linux 上运行。不支持 32 位 Python。
如需社区支持,请访问Teradata 社区。
有关 Teradata 客户支持,请访问Teradata 客户服务。
请注意,此驱动程序可能包含测试版/预览版功能(“测试版功能”)。因此,通过下载和/或使用驱动程序,除了同意以下许可条款外,您还承认 Beta 功能本质上是实验性的,并且 Beta 功能是“按原样”提供的,可能无法在任何机器或任何环境中。
版权所有 2022 Teradata。版权所有。
目录
- 特征
- 限制
- 安装
- 执照
- 文档
- 示例程序
- 使用驱动程序
- 连接参数
- COP 发现
- 存储密码保护
- 客户端属性
- 交易模式
- 自动提交
- 数据类型
- 空值
- 字符导出宽度
- 模块构造函数
- 模块全局变量
- 模块异常
- 连接方法
- 光标属性
- 光标方法
- 类型对象
- 转义语法
- 快速加载
- 快速导出
- CSV 批量插入
- CSV 导出结果
- 更改日志
由于PyPI 限制,目录链接在 PyPI 上不起作用。
特征
适用于 Python的Teradata SQL 驱动程序是一个 DBAPI 驱动程序,它使 Python 应用程序能够连接到 Teradata 数据库。该驱动程序实现PEP-249 Python 数据库 API 规范 2.0。
该驱动程序是一个提供基本功能集的年轻产品。我们正在努力为驱动程序添加功能,我们的目标是与 Teradata JDBC 驱动程序实现功能对等。
目前,驱动程序提供以下功能。
- 支持与 Teradata Database 14.10 及更高版本一起使用。经非正式测试可与 Teradata Database 12.0 及更高版本一起使用。
- 缔约方会议发现。
- 梯形并发连接。
- 与 Teradata SQL Engine 16.20.53.30 及更高版本的 HTTPS/TLS 连接。
TD2使用,JWT,LDAP,KRB5(Kerberos) 或TDNEGO登录机制加密登录。- 数据加密由中央管理部门管理,或通过
encryptdata连接参数启用。 - 通过 UTF8 会话字符集传输的 Unicode 字符数据。
- ANSI 和 TERA 事务模式的自动提交。
- Teradata Database 16.0 及更高版本支持 1 MB 行。
- 返回多个结果集的多语句请求。
- 大多数 JDBC 转义语法。
- 带有问号参数标记的参数化 SQL 请求。
- 多行数据绑定到问号参数标记的参数化批处理 SQL 请求。
- 复杂的数据类型,例如
XML、JSON、DATASET STORAGE FORMAT AVRO和DATASET STORAGE FORMAT CSV。 - ElicitFile 协议支持创建外部 UDF 或存储过程并将文件从客户端上传到数据库的 DDL 命令。
CREATE PROCEDURE和REPLACE PROCEDURE命令。- 存储过程动态结果集。
- 快速加载和快速导出。
限制
- 始终使用 UTF8 会话字符集。
charset不支持连接参数。 - 尚不支持可恢复网络协议和重新驱动。
- 监视器分区支持尚不可用。
安装
驱动程序依赖于pycryptodomePyPI 提供的包。
用于pip install自动下载和安装驱动程序及其依赖项。
| 平台 | 命令 |
|---|---|
| macOS 或 Linux | pip install teradatasql |
| 视窗 | py -3 -m pip install teradatasql |
当升级到新版本的驱动时,你可能需要使用 pip install 的--no-cache-dir选项来强制下载新版本。
| 平台 | 命令 |
|---|---|
| macOS 或 Linux | pip install --no-cache-dir -U teradatasql |
| 视窗 | py -3 -m pip install --no-cache-dir -U teradatasql |
执照
驱动程序的使用受Teradata SQL Driver for Python 许可协议的约束。
安装驱动程序后,LICENSE和THIRDPARTYLICENSE文件将放在teradatasql您的 Python 安装目录下的目录中。
除许可条款外,驱动程序可能包含测试版/预览版功能(“测试版功能”)。因此,通过下载和/或使用驱动程序,除许可条款外,您承认 Beta 功能本质上是实验性的,并且 Beta 功能是“按原样”提供的,可能无法在任何机器上或在任何环境。
文档
安装驱动程序后,该README.md文件将放置在teradatasql您的 Python 安装目录下的目录中。这允许您在未连接到 Internet 时离线查看文档。
该README.md文件是包含驱动程序文档的纯文本文件。虽然可以使用任何文本文件查看器或编辑器查看文件,但使用理解 Markdown 格式的编辑器,您的查看体验将是最好的。
示例程序
提供示例程序来演示如何使用驱动程序。安装驱动程序时,示例程序将放置在teradatasql/samples您的 Python 安装目录下的目录中。
示例程序使用假数据库主机名whomooz、用户名guest和密码进行编码please。在运行示例程序之前替换您的实际数据库主机名和凭据。
| 程序 | 目的 |
|---|---|
| 批量插入.py | 演示如何插入一批行 |
| 批量插入CSV.py | 演示如何从 CSV 文件中插入一批行 |
| BatchInsPerf.py | 测量插入一百万行的时间 |
| CharPadding.py | 演示数据库的字符导出宽度行为 |
| 提交回滚.py | 演示关闭自动提交的提交和回滚方法。 |
| 十进制数字.py | 演示如何格式化 decimal.Decimal 值。 |
| 驱动程序数据库版本.py | 显示驱动程序版本和数据库版本 |
| 引出文件.py | 演示 C 源文件上传以创建用户定义函数 (UDF) |
| 导出CSVResult.py | 演示如何将查询结果集导出到 CSV 文件 |
| 导出CSVResults.py | 演示如何将多个查询结果集导出到 CSV 文件 |
| FakeExportCSVResults.py | 演示如何将带有元数据的多个查询结果集导出到 CSV 文件 |
| FakeResultSetCon.py | 演示假结果集的连接参数 |
| FakeResultSetEsc.py | 演示假结果集的转义函数 |
| 快速导出CSV.py | 演示如何将表中的行快速导出到 CSV 文件 |
| 快速导出表.py | 演示如何从表中快速导出行 |
| FastLoadBatch.py | 演示如何快速加载成批的行 |
| 快速加载CSV.py | 演示如何从 CSV 文件中快速加载成批的行 |
| 帮助会话.py | 显示会话信息 |
| 忽略错误.py | 演示如何忽略错误 |
| 插入XML.py | 演示如何插入和检索 XML 值 |
| 加载CSV文件.py | 演示如何将数据从 CSV 文件加载到表中 |
| MetadataFromPrepare.py | 演示如何准备 SQL 请求并获取 SQL 语句元数据 |
| 参数数据类型.py | 演示如何为参数标记绑定值指定数据类型 |
| 显示命令.py | 显示SHOW命令的结果 |
| 存储过程.py | 演示如何创建和调用 SQL 存储过程 |
| TJEncryptPassword.py | 创建加密的密码文件 |
使用驱动程序
您的 Python 脚本必须导入teradatasql包才能使用驱动程序。
import teradatasql
导入teradatasql包后,您的 Python 脚本会调用该teradatasql.connect函数来打开与数据库的连接。
您可以将连接参数指定为 JSON 字符串、askwargs或使用这两种方法的组合。该teradatasql.connect函数的第一个参数是一个可选的 JSON 字符串。该teradatasql.connect函数的第二个和后续参数是可选的kwargs。
连接参数仅指定为kwargs:
con = teradatasql.connect(host="whomooz", user="guest", password="please")
仅指定为 JSON 字符串的连接参数:
con = teradatasql.connect('{"host":"whomooz","user":"guest","password":"please"}')
使用组合指定的连接参数:
con = teradatasql.connect('{"host":"whomooz"}', user="guest", password="please")
指定参数组合时,指定为的连接参数kwargs优先于 JSON 字符串中指定的同名连接参数。
连接参数
下表列出了驱动程序当前提供的连接参数。除非另有说明,否则连接参数值区分大小写。
我们的目标是让此驱动程序和 Teradata JDBC 驱动程序提供的连接参数在连接参数名称和功能方面保持一致。为了进行比较,此处记录了Teradata JDBC 驱动程序连接参数。
| 范围 | 默认 | 类型 | 描述 |
|---|---|---|---|
account |
细绳 | 指定数据库帐户。等效于 Teradata JDBC DriverACCOUNT连接参数。 |
|
browser |
细绳 | 指定打开浏览器进行浏览器身份验证的命令,当logmech是时BROWSER。Windows 和 macOS 支持浏览器身份验证。等效于 Teradata JDBC DriverBROWSER连接参数。指定的命令必须包含一个占位符标记,字面上指定为 PLACEHOLDER,驱动程序将用从数据库获得的身份提供者元数据 URL 替换它。PLACEHOLDER标记区分大小写,并且必须以大写形式指定。• 在 Windows 上,默认命令是 cmd /c start "title" "PLACEHOLDER"。Windows 命令语法要求引用的标题位于引用的 URL 之前。• 在 macOS 上,默认命令是 open PLACEHOLDER. macOS 命令语法不允许引用 URL。 |
|
browser_tab_timeout |
"5" |
带引号的整数 | 指定完成浏览器身份验证后关闭浏览器选项卡之前要等待的秒数。默认值为 5 秒。该行为受浏览器控制,并非所有浏览器都支持自动关闭浏览器选项卡。通常,用于登录的选项卡将无限期保持打开状态,但第二个和后续选项卡将自动关闭。指定0(零)以立即关闭选项卡。指定-1关闭浏览器选项卡的自动关闭。Windows 和 macOS 支持浏览器身份验证。等效于 Teradata JDBC DriverBROWSER_TAB_TIMEOUT连接参数。 |
browser_timeout |
"180" |
带引号的整数 | 指定驱动程序将等待浏览器身份验证完成的秒数。默认值为 180 秒(3 分钟)。Windows 和 macOS 支持浏览器身份验证。等效于 Teradata JDBC DriverBROWSER_TIMEOUT连接参数。 |
column_name |
"false" |
引用的布尔值 | 控制光标.description序列name项的行为。等效于 Teradata JDBC DriverCOLUMN_NAME连接参数。False 指定游标.description序列name项提供 AS 子句名称(如果可用)或列名称(如果可用)或列标题。True 指定游标.description序列name项提供列名(如果可用),但在 StatementInfo 包裹支持不可用时无效。 |
connect_failure_ttl |
"0" |
带引号的整数 | 指定以秒为单位的生存时间,以记住每个 IP 地址/端口组合的最近连接失败。驱动程序随后在生存时间期间跳过对该 IP 地址/端口的连接尝试。默认值零禁用此功能。推荐值是数据库重新启动时间的一半。等效于 Teradata JDBC DriverCONNECT_FAILURE_TTL连接参数。 |
cop |
"true" |
引用的布尔值 | 指定是否执行 COP 发现。等效于 Teradata JDBC DriverCOP连接参数。 |
coplast |
"false" |
引用的布尔值 | 指定 COP 发现如何确定最后一个 COP 主机名。等效于 Teradata JDBC DriverCOPLAST连接参数。如果coplast是false或省略,或者关闭 COP 发现,则不会对 coplast 主机名进行 DNS 查找。当coplast是true并且 COP Discovery 已打开时,将对 coplast 主机名进行 DNS 查找。 |
database |
细绳 | 指定登录后要使用的初始数据库,而不是用户的默认数据库。等效于 Teradata JDBC DriverDATABASE连接参数。 |
|
dbs_port |
"1025" |
带引号的整数 | 指定数据库端口号。等效于 Teradata JDBC DriverDBS_PORT连接参数。 |
encryptdata |
"false" |
引用的布尔值 | 控制驱动程序和数据库之间交换的数据的加密。等效于 Teradata JDBC DriverENCRYPTDATA连接参数。 |
fake_result_sets |
"false" |
引用的布尔值 | 控制包含语句元数据的虚假结果集是否位于每个真实结果集之前。 |
field_quote |
"\"" |
细绳 | 指定用于引用 CSV 文件中的字段的单个字符串。 |
field_sep |
"," |
细绳 | 指定用于分隔 CSV 文件中的字段的单个字符串。等效于 Teradata JDBC DriverFIELD_SEP连接参数。 |
host |
细绳 | 指定数据库主机名。 | |
https_port |
"443" |
带引号的整数 | 指定 HTTPS/TLS 连接的数据库端口号。等效于 Teradata JDBC DriverHTTPS_PORT连接参数。 |
lob_support |
"true" |
引用的布尔值 | 控制 LOB 支持。等效于 Teradata JDBC DriverLOB_SUPPORT连接参数。 |
log |
"0" |
带引号的整数 | 控制调试日志记录。有点相当于 Teradata JDBC DriverLOG连接参数。此参数的行为将来可能会发生变化。此参数的值当前定义为整数,其中 1 位控制函数和方法跟踪,2 位控制调试日志记录,4 位控制发送和接收消息十六进制转储,8 位控制时序。通过将 1、2、4 和/或 8 相加来构成值。 |
logdata |
细绳 | 指定所选登录身份验证方法的额外数据。等效于 Teradata JDBC DriverLOGDATA连接参数。 |
|
logmech |
"TD2" |
细绳 | 指定登录验证方法。等效于 Teradata JDBC DriverLOGMECH连接参数。可能的不区分大小写的值是TD2(默认值)、、、、,对于 Kerberos BROWSER,或。Windows 和 macOS 支持浏览器身份验证。JWTLDAPKRB5TDNEGO |
max_message_body |
"2097000" |
带引号的整数 | 指定最大响应消息大小(以字节为单位)。等效于 Teradata JDBC DriverMAX_MESSAGE_BODY连接参数。 |
oidc_scope |
"openid" |
细绳 | 指定用于浏览器身份验证的 OpenID Connect (OIDC) 范围。Windows 和 macOS 支持浏览器身份验证。等效于 Teradata JDBC DriverOIDC_SCOPE连接参数。 |
oidc_token |
"access_token" |
细绳 | 指定用于浏览器身份验证的 OIDC 令牌类型。指定id_token使用 id_token 而不是 access_token。Windows 和 macOS 支持浏览器身份验证。等效于 Teradata JDBC DriverOIDC_TOKEN连接参数。 |
partition |
"DBC/SQL" |
细绳 | 指定数据库分区。等效于 Teradata JDBC DriverPARTITION连接参数。 |
password |
细绳 | 指定数据库密码。等效于 Teradata JDBC DriverPASSWORD连接参数。 |
|
sip_support |
"true" |
引用的布尔值 | 控制是否使用 StatementInfo 包裹。等效于 Teradata JDBC DriverSIP_SUPPORT连接参数。 |
sslca |
细绳 | 指定 PEM 文件的文件名,该文件包含证书颁发机构 (CA) 证书以用于sslmode值VERIFY-CA或VERIFY-FULL. 等效于 Teradata JDBC DriverSSLCA连接参数。 |
|
sslcapath |
细绳 | 指定 PEM 文件的目录,其中包含证书颁发机构 (CA) 证书以用于sslmode值VERIFY-CA或VERIFY-FULL. 仅使用扩展名为 的文件.pem。不使用指定目录中的其他文件。等效于 Teradata JDBC DriverSSLCAPATH连接参数。 |
|
sslcipher |
细绳 | 为 HTTPS/TLS 连接指定 TLS 密码。等效于 Teradata JDBC DriverSSLCIPHER连接参数。 |
|
sslmode |
"PREFER" |
细绳 | 指定连接到数据库的模式。等效于 Teradata JDBC DriverSSLMODE连接参数。值不区分大小写。• DISABLE禁用HTTPS/TLS 连接并仅使用非TLS 连接。• ALLOW除非数据库需要HTTPS/TLS 连接,否则使用非TLS 连接。• PREFER除非数据库不提供 HTTPS/TLS 连接,否则使用 HTTPS/TLS 连接。• REQUIRE仅使用 HTTPS/TLS 连接。• VERIFY-CA仅使用 HTTPS/TLS 连接并验证服务器证书是否有效且受信任。• VERIFY-FULL仅使用 HTTPS/TLS 连接,验证服务器证书是否有效且受信任,并验证服务器证书是否与数据库主机名匹配。 |
sslprotocol |
"TLSv1.2" |
细绳 | 为 HTTPS/TLS 连接指定 TLS 协议。等效于 Teradata JDBC DriverSSLPROTOCOL连接参数。 |
teradata_values |
"true" |
引用的布尔值 | 控制是否str对某些结果集列值类型使用或更具体的 Python 数据类型。有关详细信息,请参阅下面的数据类型表。 |
tmode |
"DEFAULT" |
细绳 | 指定事务模式。等效于 Teradata JDBC DriverTMODE连接参数。可能的值为DEFAULT(默认值)ANSI、 或TERA。 |
user |
细绳 | 指定数据库用户名。等效于 Teradata JDBC DriverUSER连接参数。 |
COP 发现
当cop连接参数被true或省略时,驱动程序提供通信处理器 (COP) 发现行为。cop当连接参数为时,COP 发现关闭false。
一个数据库系统可以由多个数据库节点组成。一个或多个数据库节点可以配置为运行数据库网关进程。运行数据库网关进程的每个数据库节点称为通信处理器或 COP。COP 发现是指识别所有可用的 COP 主机名及其 IP 地址的过程。COP 主机名可以在 DNS 中定义,也可以在客户端系统的hosts文件中定义。Teradata 强烈建议在 DNS 中定义 COP 主机名,而不是在客户端系统的hosts文件中。在 DNS 中定义 COP 主机名可提供集中管理,并在重新配置数据库时启用对 COP 主机名的集中更改。
连接参数指定 COP 发现如何确定最后coplast一个 COP 主机名。
- 当
coplastisfalse或省略时,或者 COP Discovery 关闭时,驱动程序将不会执行 coplast 主机名的 DNS 查找。 - 当
coplast是true并且 COP Discovery 开启时,驱动程序将首先对 coplast 主机名执行 DNS 查找,以获取最后一个 COP 主机名的 IP 地址,然后再执行 COP Discovery。随后,在 COP 发现期间,当遇到未知的 COP 主机名或遇到 IP 地址与 coplast 主机名的 IP 地址匹配的 COP 主机名时,驱动程序将停止搜索 COP 主机名。
指定coplastastrue可以提高对 DNS 查找失败响应较慢的 DNS 的性能,并且对于从不返回 DNS 查找失败的 DNS 是必需的。
执行 COP Discovery 时,驱动程序以 cop1 开始,将其附加到数据库主机名,然后继续 cop2、cop3、...、copN。驱动程序支持 COP 发现和 coplast 主机名的域名限定。建议使用域名限定,因为它可以通过避免对 DNS 搜索后缀进行不必要的 DNS 查找来提高性能。
下表说明了为名为“whomooz”的假设三节点数据库系统执行的 DNS 查找。
| 无域名资格 | 有域名资格 (推荐) |
|
|---|---|---|
| 应用程序指定的 数据库主机名 |
whomooz |
whomooz.domain.com |
默认值:COP Discovery 已打开,并且coplast是false或省略,执行 DNS 查找,直到遇到未知的 COP 主机名 |
whomoozcop1→ 10.0.0.1whomoozcop2→ 10.0.0.2whomoozcop3→ 10.0.0.3whomoozcop4→ 未定义 |
whomoozcop1.domain.com→ 10.0.0.1whomoozcop2.domain.com→ 10.0.0.2whomoozcop3.domain.com→ 10.0.0.3whomoozcop4.domain.com→ 未定义 |
COP Discovery 已打开,并且coplast正在执行 DNS 查找true,直到找到其 IP 地址与 coplast 主机名匹配的 COP 主机名,或者遇到未知的 COP 主机名 |
whomoozcoplast→ 10.0.0.3whomoozcop1→ 10.0.0.1whomoozcop2→ 10.0.0.2whomoozcop3→10.0.0.3 |
whomoozcoplast.domain.com→ 10.0.0.3whomoozcop1.domain.com→ 10.0.0.1whomoozcop2.domain.com→ 10.0.0.2whomoozcop3.domain.com→10.0.0.3 |
| COP Discovery 关闭并循环 DNS, 执行一个返回多个 IP 地址的 DNS 查找 |
whomooz→ 10.0.0.1, 10.0.0.2,10.0.0.3 |
whomooz.domain.com→ 10.0.0.1, 10.0.0.2,10.0.0.3 |
循环 DNS 自动轮换 IP 地址列表以提供负载分配。轮询仅适用于 DNS,不适用于客户端系统hosts文件。
驱动程序支持为 COP 主机名和非 COP 主机名定义多个 IP 地址。
对于与特定数据库系统的第一次连接,驱动程序会生成一个随机数以索引到 COP 列表中。对于每个后续连接,驱动程序都会递增保存的索引,直到它环绕到第一个位置。此行为提供跨所有发现的 COP 的负载分布。
驱动程序将连接故障屏蔽到关闭的 COP,从而对客户端应用程序隐藏大多数连接故障。仅当该数据库的所有 COP 都关闭时,才会向应用程序抛出异常。如果一个 COP 发生故障,则序列中的下一个 COP(包括对第一个 COP 的回绕)会接收原本用于故障 COP 的额外连接。当在 DNS 中为 COP 定义多个 IP 地址时,驱动程序将尝试连接到每个 COP 的 IP 地址,并且仅当连接尝试失败到所有 COP 的 IP 地址时,才认为 COP 已关闭。
如果关闭 COP 发现,或者在 DNS 中未定义 COP 主机名,驱动程序将直接连接到host连接参数中指定的主机名。这允许除 COP Discovery 方法之外的负载分配方案。例如,可以使用循环 DNS 或 TCP/IP 负载分配产品。COP 发现优先于简单的数据库主机名查找。cop要使用替代负载分配方案,请确保未在 DNS 中定义 COP 主机名,或者使用as关闭 COP Discovery false。
存储密码保护
概述
存储密码保护使应用程序能够以加密形式向驱动程序提供连接密码。
可以在以下上下文中指定加密密码:
- 指定为
password连接参数的登录密码。 logdata在连接参数中指定的登录密码。
如果密码以前缀开头,ENCRYPTED_PASSWORD(那么指定的密码必须遵循以下格式:
ENCRYPTED_PASSWORD(file:PasswordEncryptionKeyFileName ,file:EncryptedPasswordFileName)
每个文件名前面必须有file:前缀。PasswordEncryptionKeyFileName必须与EncryptedPasswordFileName用一个逗号分隔。
PasswordEncryptionKeyFileName指定包含密码加密密钥和相关信息的文件的名称。EncryptedPasswordFileName指定包含加密密码和相关信息的文件的名称。这两个文件如下所述。
此驱动程序、Teradata JDBC 驱动程序和用于 R 的 Teradata SQL 驱动程序提供存储密码保护。这些驱动程序使用相同的文件格式。
程序 TJEncryptPassword
TJEncryptPassword.py是一个示例程序,用于创建用于存储密码保护的加密密码文件。安装驱动程序时,示例程序将放置在teradatasql/samples您的 Python 安装目录下的目录中。
该程序与驱动程序提供的存储密码保护结合使用。该程序创建包含密码加密密钥和加密密码的文件,随后可以通过ENCRYPTED_PASSWORD(语法指定。
您不需要使用此程序来创建包含密码加密密钥和加密密码的文件。您可以开发自己的软件来创建必要的文件。您还可以使用随Teradata JDBC 驱动程序参考TJEncryptPassword.java提供的示例程序。唯一的要求是文件必须与驱动程序预期的格式相匹配,如下所述。
本程序对密码进行加密,然后立即对密码进行解密,以验证密码是否可以成功解密。该程序模仿驱动程序的密码解密,旨在公开说明其操作并让社区进行审查。
加密密码仅与这两个文件一样安全。您有责任限制对包含密码加密密钥和加密密码的文件的访问。如果攻击者获得了这两个文件,密码就可以被解密。这两个文件的操作系统文件权限应尽可能有限和严格,以确保只有预期的操作系统用户 ID 才能访问这些文件。
这两个文件可以保存在不同的物理卷上,以降低两个文件可能同时丢失的风险。如果其中一个或两个文件都位于网络卷上,则可以使用加密的有线协议来访问网络卷,例如 sshfs、加密的 NFSv4 或加密的 SMB 3.0。
该程序接受八个命令行参数:
| 争论 | 例子 | 描述 |
|---|---|---|
| 转型 | AES/CBC/NoPadding |
以Algorithm /Mode /Padding形式指定转换。下表列出了支持的转换。 |
| KeySizeInBits | 256 |
指定控制加密强度的算法密钥大小。 |
| 苹果电脑 | HmacSHA256 |
指定消息验证码 (MAC) 算法HmacSHA1或HmacSHA256. |
| 密码加密密钥文件名 | PassKey.properties |
指定当前目录中的文件名、相对路径名或绝对路径名。该文件由该程序创建。如果文件已经存在,它将被新文件覆盖。 |
| 加密密码文件名 | EncPass.properties |
指定当前目录中的文件名、相对路径名或绝对路径名。必须不同于 PasswordEncryptionKeyFileName 的文件名或路径名。该文件由该程序创建。如果文件已经存在,它将被新文件覆盖。 |
| 主机名 | whomooz |
指定数据库主机名。 |
| 用户名 | guest |
指定数据库用户名。 |
| 密码 | please |
指定要加密的数据库密码。可以使用\uXXXX转义序列指定密码中的 Unicode 字符。 |
示例命令
TJEncryptPassword程序通过驱动使用加密密码登录到指定的数据库,所以该驱动肯定已经安装了该pip install teradatasql命令。
以下命令假定TJEncryptPassword.py程序文件位于当前目录中。安装驱动程序时,示例程序将放置在teradatasql/samples您的 Python 安装目录下的目录中。将当前目录更改为teradatasql/samplesPython 安装目录下的目录。
以下示例命令说明了使用 256 位 AES 密钥和使用 HmacSHA256 算法。
| 平台 | 命令 |
|---|---|
| macOS 或 Linux | python TJEncryptPassword.py AES/CBC/NoPadding 256 HmacSHA256 PassKey.properties EncPass.properties whomooz guest please |
| 视窗 | py -3 TJEncryptPassword.py AES/CBC/NoPadding 256 HmacSHA256 PassKey.properties EncPass.properties whomooz guest please |
密码加密密钥文件格式
您不需要使用 TJEncryptPassword 程序来创建包含密码加密密钥和加密密码的文件。您可以开发自己的软件来创建必要的文件,但文件必须与驱动程序预期的格式相匹配。
密码加密密钥文件是 Java 属性文件格式的文本文件,使用 ISO 8859-1 字符编码。
该文件必须包含以下字符串属性:
| 财产 | 描述 |
|---|---|
version=1 |
版本号必须是1. 此属性是必需的。 |
transformation=算法/模式/填充 |
以Algorithm /Mode /Padding形式指定转换。下表列出了支持的转换。此属性是必需的。 |
algorithm=算法 |
此值必须对应于转换的算法部分。此属性是必需的。 |
match=匹配值 |
密码加密密钥和加密密码文件必须包含相同的匹配值。比较匹配值以确保两个指定文件相互关联,用作“健全性检查”以帮助避免配置错误。此属性是必需的。 |
key=十六进制数 |
此值是密码加密密钥,编码为十六进制数字。此属性是必需的。 |
mac=MAC算法 |
指定消息验证码 (MAC) 算法HmacSHA1或HmacSHA256. 存储密码保护执行 Encrypt-then-MAC 以防止填充 oracle 攻击。此属性是必需的。 |
mackey=十六进制数 |
该值是 MAC 密钥,编码为十六进制数字。此属性是必需的。 |
TJEncryptPassword 程序使用时间戳作为共享匹配值,但不需要时间戳。任何共享字符串都可以作为匹配值。时间戳与密码的加密没有任何关系,也不能使用时间戳来解密密码。
加密密码文件格式
加密密码文件是 Java 属性文件格式的文本文件,使用 ISO 8859-1 字符编码。
该文件必须包含以下字符串属性:
| 财产 | 描述 |
|---|---|
version=1 |
版本号必须是1. 此属性是必需的。 |
match=匹配值 |
密码加密密钥和加密密码文件必须包含相同的匹配值。比较匹配值以确保两个指定文件相互关联,用作“健全性检查”以帮助避免配置错误。此属性是必需的。 |
password=十六进制数 |
此值是加密密码,编码为十六进制数字。此属性是必需的。 |
params=十六进制数 |
此值包含编码为十六进制数字的密码算法参数(如果有)。一些密码需要无法从密钥导出的算法参数,例如初始化向量。此属性是可选的,具体取决于密码算法是否具有相关参数。 |
hash=十六进制数 |
此值是预期的消息验证码 (MAC),编码为十六进制数字。加密后,使用密文、转换名称和算法参数(如果有)计算预期 MAC。在解密之前,驱动程序使用密文、转换名称和算法参数(如果有)计算 MAC,并验证计算的 MAC 是否与预期的 MAC 匹配。如果计算出的 MAC 与预期的 MAC 不同,则其中一个或两个文件可能已被篡改。此属性是必需的。 |
虽然在技术上是可选的,但驱动程序支持的所有三种分组密码模式、和都params需要初始化向量。ECB(电子密码本)不需要,但驱动程序不支持ECB。CBCCFBOFBparams
转换、密钥大小和 MAC
转换是一个字符串,它描述要对给定输入执行的一组操作,以产生转换后的输出。转换指定加密算法的名称,例如 DES 或 AES,后跟反馈模式和填充方案。
驱动程序支持以下转换和密钥大小。
| 转型 | 密钥大小 |
|---|---|
DES/CBC/NoPadding |
64 |
DES/CBC/PKCS5Padding |
64 |
DES/CFB/NoPadding |
64 |
DES/CFB/PKCS5Padding |
64 |
DES/OFB/NoPadding |
64 |
DES/OFB/PKCS5Padding |
64 |
DESede/CBC/NoPadding |
192 |
DESede/CBC/PKCS5Padding |
192 |
DESede/CFB/NoPadding |
192 |
DESede/CFB/PKCS5Padding |
192 |
DESede/OFB/NoPadding |
192 |
DESede/OFB/PKCS5Padding |
192 |
AES/CBC/NoPadding |
128 |
AES/CBC/NoPadding |
192 |
AES/CBC/NoPadding |
256 |
AES/CBC/PKCS5Padding |
128 |
AES/CBC/PKCS5Padding |
192 |
AES/CBC/PKCS5Padding |
256 |
AES/CFB/NoPadding |
128 |
AES/CFB/NoPadding |
192 |
AES/CFB/NoPadding |
256 |
AES/CFB/PKCS5Padding |
128 |
AES/CFB/PKCS5Padding |
192 |
AES/CFB/PKCS5Padding |
256 |
AES/OFB/NoPadding |
128 |
AES/OFB/NoPadding |
192 |
AES/OFB/NoPadding |
256 |
AES/OFB/PKCS5Padding |
128 |
AES/OFB/PKCS5Padding |
192 |
AES/OFB/PKCS5Padding |
256 |
存储密码保护使用对称加密算法,例如 DES 或 AES,其中相同的密钥用于加密和解密密码。存储密码保护不使用具有单独公钥和私钥的非对称加密算法,例如 RSA。
CBC(Cipher Block Chaining)是一种分组密码加密模式。使用 CBC,每个密文块都依赖于到该点处理的所有明文块。CBC 适用于加密总字节数超过算法块大小的数据,因此适用于存储密码保护。
存储密码保护通过使用尾随空字节扩展 UTF8 编码密码的长度来隐藏加密密码文件中的密码长度。长度扩展到下一个 512 字节边界。
- 没有填充的块密码,例如
AES/CBC/NoPadding,只能用于加密扩展后的字节数是算法块大小的倍数的数据。512 字节边界与许多分组密码兼容。例如,AES 的块大小为 128 位(16 字节),因此与 512 字节边界兼容。 - 带有填充的分组密码,例如
AES/CBC/PKCS5Padding,可用于加密任何长度的数据。但是,带有填充的 CBC 容易受到“填充预言攻击”的影响,因此存储密码保护执行 Encrypt-then-MAC 以防止填充预言攻击。支持MACHmacSHA1算法HmacSHA256。 CFB8驱动程序不支持通过或等模式用作面向字节的密码的分组密码OFB8。
加密强度取决于您选择的密码算法和密钥大小。
- AES 使用 128 位(16 字节)、192 位(24 字节)或 256 位(32 字节)密钥。
- DESede 使用 192 位(24 字节)密钥。驱动程序不支持 DESede 的 128 位(16 字节)密钥。
- DES 使用 64 位(8 字节)密钥。
使用 Teradata JDBC 驱动程序共享文件
如果您使用两个驱动程序都支持的转换、密钥大小和 MAC 算法,此驱动程序和 Teradata JDBC 驱动程序可以共享包含密码加密密钥和加密密码的文件。
- 兼容性的推荐选择是
AES/CBC/NoPadding和HmacSHA256。 - 如果您的 Java 环境具有 Oracle 的 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files,请使用 256 位密钥。
- 如果您的 Java 环境没有 Unlimited Strength Jurisdiction Policy Files,请使用 128 位密钥。
- 用于
HmacSHA1与 JDK 1.4.2 兼容。
文件位置
对于ENCRYPTED_PASSWORD(驱动程序的语法,每个文件名必须以file:前缀开头。PasswordEncryptionKeyFileName必须与EncryptedPasswordFileName用一个逗号分隔。这些文件可以位于当前目录中,可以使用相对路径指定,也可以使用绝对路径指定。
当前目录中的文件示例:
ENCRYPTED_PASSWORD(file:JohnDoeKey.properties,file:JohnDoePass.properties)
相对路径的示例:
ENCRYPTED_PASSWORD(file:../dir1/JohnDoeKey.properties,file:../dir2/JohnDoePass.properties)
Windows 上的绝对路径示例:
ENCRYPTED_PASSWORD(file:c:/dir1/JohnDoeKey.properties,file:c:/dir2/JohnDoePass.properties)
Linux 上的绝对路径示例:
ENCRYPTED_PASSWORD(file:/dir1/JohnDoeKey.properties,file:/dir2/JohnDoePass.properties)
处理顺序
为加密密码指定的两个文件名必须可供驱动程序访问,并且必须符合上述属性文件格式。如果文件不可访问,或者文件不符合所需的文件格式,驱动程序将引发异常。
驱动程序验证两个文件中的匹配值是否存在,并且相互匹配。如果匹配值彼此不同,驱动程序会引发异常。比较匹配值以确保两个指定文件相互关联,用作“健全性检查”以帮助避免配置错误。TJEncryptPassword 程序使用时间戳作为共享匹配值,但不需要时间戳。任何共享字符串都可以作为匹配值。时间戳与密码的加密没有任何关系,也不能使用时间戳来解密密码。
在解密之前,驱动程序使用密文、转换名称和算法参数(如果有)计算 MAC,并验证计算的 MAC 是否与预期的 MAC 匹配。如果计算的 MAC 与预期的 MAC 不同,驱动程序会引发异常,以指示其中一个或两个文件可能已被篡改。
最后,驱动程序使用解密后的密码登录数据库。
客户端属性
客户端属性在系统表DBC.SessionTbl和DBC.EventLog. 客户端属性旨在替代记录在LogonSource系统表列中的信息DBC.SessionTbl和DBC.EventLog.
客户端属性在会话登录时记录。随后,系统查看DBC.SessionInfoV并DBC.LogOnOffV可以查询以获取有关每个会话的客户端系统和客户端软件的信息。取决于会话字符集和其他因素,客户端属性值可能以混合大小写或大写形式记录在数据库中。记录的客户端属性的分析必须灵活地适应大小写混合或大写的值。
警告:本节中的信息可能会在驱动程序的未来版本中发生变化。可以“挖掘”客户端属性以获取有关客户端系统人口统计的信息;但是,如果将来更改客户端属性格式,则必须更改解析客户端属性值的任何应用程序。
客户端属性不适用于工作负载管理。相反,查询带旨在用于工作负载管理。如果将来更改或增加客户端属性,则任何用于工作负载管理的客户端属性都可能会中断。
| 客户端属性 | 资源 | 描述 |
|---|---|---|
MechanismName |
数据库 | 连接的登录机制;例如,TD2、LDAP 等。 |
ClientIpAddress |
数据库 | 由数据库确定的客户端 IP 地址 |
ClientTcpPortNumber |
数据库 | 连接的客户端 TCP 端口号,由数据库确定 |
ClientIPAddrByClient |
司机 | 客户端 IP 地址,由驱动程序确定 |
ClientPortByClient |
司机 | 连接的客户端 TCP 端口号,由驱动程序确定 |
ClientProgramName |
司机 | 客户端程序名称,后跟简化的调用堆栈 |
ClientSystemUserId |
司机 | 客户端用户名 |
ClientOsName |
司机 | 客户端操作系统名称 |
ClientProcThreadId |
司机 | 客户端进程 ID |
ClientVmName |
司机 | Python 运行时信息 |
ClientTdHostName |
司机 | 应用程序指定的数据库主机名,不带任何 COP 后缀 |
ClientCOPSuffixedHostName |
司机 | 驱动程序选择的以 COP 为后缀的数据库主机名 |
ServerIPAddrByClient |
司机 | 由驱动程序确定的数据库节点的 IP 地址 |
ServerPortByClient |
司机 | 与数据库节点的 TCP 连接的目标端口号,由驱动程序确定 |
ServerConfType |
数据库 | 由数据库确定的机密性类型T- 用于加密的 TLS - 用于加密的ETDGSS U- 数据传输未加密 |
ClientConfVersion |
数据库 | 由数据库确定的 TLS 版本(如果这是 HTTPS/TLS 连接) |
ClientConfCipherSuite |
数据库 | 由数据库确定的 TLS 密码(如果这是 HTTPS/TLS 连接) |
ClientAttributesEx |
司机 | 附加客户端属性在此列中以名称=值对列表的形式提供,每个都以分号结尾。可以使用NVP系统功能访问各个值。PYTHON- Python 版本TZ- Python 当前时区GO- Go 版本SCS- 会话字符集CCS- 客户端字符集LOB- LOB 支持的SIPY/N 指示器 - StatementInfo 包裹支持的 Y/N 指示器TM- 事务模式指示器 A (ANSI)或 T (TERA) -连接参数的ENCY/N 指示符-连接参数-连接参数- 对应的数值级别-连接参数encryptdataDPdbs_portHPhttps_portSSLsslmodeSSLMsslmodeCERT- TLS 证书状态BA- 浏览器身份验证的 Y/N 指示器该 CERT属性指示 HTTPS/TLS 连接的 TLS 证书状态。当CERT属性指示 TLS 证书有效 ( V) 或无效 ( I) 时,附加的 TLS 证书状态详细信息将作为一系列逗号分隔的两个字母代码提供。U- TLS 证书状态不可用V- TLS 证书状态有效I- TLS 证书状态无效PU- sslca PEM 文件不可用于服务器证书验证PA- 使用 sslca PEM 文件验证服务器证书 - 使用 sslca PEM 文件PR拒绝服务器证书DU- sslcapath PEM 目录不可用于服务器证书验证DA- 使用 sslcapath PEM 目录验证服务器证书 - 使用 sslcapath PEM 目录DR拒绝SA服务器证书 - 系统验证SR服务器证书 - 系统拒绝CY服务器证书 - 通过验证服务器证书CA 检查CN- 服务器证书失败 VERIFY-CA 检查HU- 服务器主机名不可用于服务器证书匹配,因为指定了数据库 IP 地址HY- 服务器主机名与服务器证书匹配 - 服务器主机名与服务器证书HN不匹配RU- 已解析的服务器主机名不可用于服务器证书匹配,因为指定了数据库 IP 地址RY- 解析的服务器主机名与服务器证书匹配 - 解析的服务器主机名与服务器证书RN不匹配IY- IP 地址与服务器证书匹配 - IP 地址与服务器证书IN不匹配FY- 服务器证书通过 VERIFY-FULL 检查FN- 服务器证书失败 VERIFY-FULL 检查 |
登录来源栏
该LogonSource列已过时,已被客户端属性取代。该LogonSource列可能会被弃用,随后在数据库的未来版本中被删除。
当驱动程序建立与数据库的连接时,驱动程序将组成一个字符串值,该值存储在LogonSource系统表DBC.SessionTbl和DBC.EventLog. 该LogonSource列包含在系统视图中,例如DBC.SessionInfoV和DBC.LogOnOffV。所有LogonSource值都以大写形式记录在数据库中。
驱动程序遵循 Teradata 数据字典“系统视图列参考”部分中记录的格式,用于网络附加值LogonSource。网络附加值LogonSource有八个字段,由空格分隔。数据库由字段 1 到 3 组成,驱动程序由字段 4 到 8 组成。
| 场地 | 资源 | 描述 |
|---|---|---|
| 1 | 数据库 | (TCP/IP)指示连接类型的字符串 |
| 2 | 数据库 | 连接的客户端 TCP 端口号,十六进制 |
| 3 | 数据库 | 由数据库确定的客户端 IP 地址 |
| 4 | 司机 | 应用程序指定的数据库主机名,不带任何 COP 后缀 |
| 5 | 司机 | 客户端进程 ID |
| 6 | 司机 | 客户端用户名 |
| 7 | 司机 | 客户端程序名称 |
| 8 | 司机 | 01 LSS表示LogonSource字符串版本的字符串01 |
交易模式
tmode连接参数使应用程序能够指定连接的事务模式。
"tmode":"ANSI"p