如何与teradatasql建立安全连接
我正在使用 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)
但我不确定这是否真的有效。
所以简单来说,我有两个问题:
- 什么算是安全的连接?
- 在使用用户名和密码认证的情况下,如何建立这样的安全连接?
3 个回答
没错,你说得对。要确保消息传输是加密的,对于非HTTPS连接,需要设置连接参数encryptdata=True
。
如果你的Teradata数据库配置了HTTPS连接,那么teradatasql这个Python驱动会自动使用HTTPS连接。
当teradatasql Python驱动通过HTTPS连接到数据库时,encryptdata
这个连接参数就会被忽略,因为通过HTTPS连接的所有消息传输都是加密的。
这个驱动程序默认使用 sslmode=prefer
,这意味着如果数据库已经配置并启用了TLS(传输层安全协议),那么登录信息和传输的数据都会通过TLS进行加密。如果你设置为 sslmode=require
,那么如果没有TLS可用,登录就会失败。
如果没有启用TLS,登录信息会使用旧版的TeraGSS加密。此外,如果数据库网关设置了“需要保密”这个标志,或者客户端请求 encryptdata=true
(或者两者都请求),那么数据也会使用TeraGSS进行加密。否则,数据就不会被加密。
我建议你把问题中的 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 这样的数据包嗅探工具来测试通信。关于这个,有一个 类似的讨论,应该能帮到你。