如何与teradatasql建立安全连接

0 投票
3 回答
50 浏览
提问于 2025-04-14 16:50

我正在使用 teradatasql 17.20.0.32 这个 Python 包,通过 Python 连接到 Teradata 数据库。

文档里有很多连接参数,但由于我对安全概念了解有限,不太确定我使用这个 Python 包的方式是否安全。

从我的角度来看,连接数据库的安全方式是使用像 https 或 tls 这样的安全协议,或者数据是加密的。(欢迎大家分享你们的看法)

我的代码大致是这样的:

conn = teradatasql.connect(host=host, user=user_name, password=password)
cursor = conn.cursor()
cursor.autocommit = True
try:
  [... execute some queries here..]       
finally:
  cursor.close()
  conn.close()

我了解到可以在 connect 函数中使用 encryptdata 这个参数:

conn = teradatasql.connect(host=host, user=user_name, password=password, encryptdata=True)

但我不确定这是否真的有效。

所以简单来说,我有两个问题:

  1. 什么算是安全的连接?
  2. 在使用用户名和密码认证的情况下,如何建立这样的安全连接?

3 个回答

0

没错,你说得对。要确保消息传输是加密的,对于非HTTPS连接,需要设置连接参数encryptdata=True

如果你的Teradata数据库配置了HTTPS连接,那么teradatasql这个Python驱动会自动使用HTTPS连接。

当teradatasql Python驱动通过HTTPS连接到数据库时,encryptdata这个连接参数就会被忽略,因为通过HTTPS连接的所有消息传输都是加密的。

1

这个驱动程序默认使用 sslmode=prefer,这意味着如果数据库已经配置并启用了TLS(传输层安全协议),那么登录信息和传输的数据都会通过TLS进行加密。如果你设置为 sslmode=require,那么如果没有TLS可用,登录就会失败。

如果没有启用TLS,登录信息会使用旧版的TeraGSS加密。此外,如果数据库网关设置了“需要保密”这个标志,或者客户端请求 encryptdata=true(或者两者都请求),那么数据也会使用TeraGSS进行加密。否则,数据就不会被加密。

1

我建议你把问题中的 or 替换成 and,这样你的字符串就变成了 secure protocol like https and tls and if the data is encrypted

登录和数据传输都应该在传输过程中进行加密。

如果客户端连接没有加密,密码就容易被窃听攻击者获取。

如果只有登录部分是加密的,那么数据传输就会容易受到窃听或中间人攻击。

我没有使用过 Python 驱动,但在 文档 中提到过:

我们的目标是确保这个驱动和 Teradata JDBC 驱动在连接参数名称和功能上保持一致。

简单来说,设置 encryptdata=True 参数应该就足够了,因为根据 Java 文档:

Teradata JDBC 驱动始终使用加密登录,这意味着登录密码在网络上传输到数据库时是加密的。

Teradata JDBC 驱动提供了 ENCRYPTDATA 连接参数,可以开启或关闭连接的数据加密。在这个上下文中,“数据加密”是指非登录消息流量的加密。默认情况下,Teradata JDBC 驱动只加密登录,不加密非登录消息流量。要加密非登录消息流量,请指定 JDBC 连接参数 ENCRYPTDATA=ON。

不过我强烈建议你“信任但要验证”,可以使用像 Wireshark 这样的数据包嗅探工具来测试通信。关于这个,有一个 类似的讨论,应该能帮到你。

撰写回答