6. 安全和加密
6.1. 登录
登录 KingbaseES 的最简单方法是在连接字符串中指定 Username 和 Password 。 Password 根据 KingbaseES 的配置方式(在 .conf 文件中), Kdbndp 将以MD5或明文形式发送密码(不推荐)。
如果未指定 Password 且 KingbaseES 配置为请求密码(普通或MD5),Kdbndp 将查找标准 KingbaseES 密码文件。如果您指定 Passfile 连接字符串参数,将使用它指定的文件。如果未定义该参数,Kdbndp 将在从 KESPASSFILE 环境变量获取的路径下查找。 如果未定义环境变量,Kdbndp将回退到与系统相关的默认目录。
KdbndpConnection 也可以配置一个 ProvidePasswordCallback 。这将在打开新的数据库连接以在代码中生成密码时执行。可以将其配置为使用基于访问凭证生成的短期令牌。 未指定 ProvidePasswordCallback 密码和 Passfile 连接字符串参数时执行委托。
6.2. 集成安全性(GSS/SSPI/Kerberos)
以用户名和密码登录的方式并不推荐,因为这必须要让应用程序有权访问您的密码。另一种身份验证的方式是 “集成安全”,它使用 GSS 或 SSPI 来通过 Kerberos验证。这种方法的优点是,通过已经打开的登录会话将身份验证移交给操作系统。应用程序永远不需要处理密码。
正确配置KingbaseES之后,只需在连接字符串中包含 Intefrated Sercurity=true 并且删除密码参数,但是 Kdbndp 仍然需要向 KingbaseES 发送用户名。 如果在连接字符串中指定了 Username 参数, Kdbndp 会正常发送。如果省略了该参数,Kdbndp 将尝试检测系统用户名,包括 Kerberos域。 默认情况下,KingbaseES 期望您的 Kerberos 域以您的用户名发送;您可以通过在连接字符串中设置 Include Realm 为true来让 Kdbndp 检测领域。 或者,您可以在 KingbaseES 的kdb.conf 条目中禁用添加 include_realm=0 来将其脱离领域,这样就可以自己指定发送到 KingbaseES 的用户名。
6.3. 加密(SSL/TLS)
默认情况下 KingbaseES 连接时未加密的,您可以根据需要打开 SSL/TLS 加密。
-
首先,需要设置 KingbaseES 以接收 SSL/TLS 连接。
-
完成后,在连接字符串中指定 "SSL Mode",将其设置为 Require (如果服务器没有设置加密,连接将失败),或者 Prefer (如果服务器设置了加密,则使用加密,否则会回退到未加密状态)。
默认情况下,Kdbndp将验证您的服务器的证书是否有效。如果您使用的是自签名证书,验证将会失败。您可以通过在连接字符串中指定 Trust Server Certificate=true 来指示 Kdbndp 忽略验证。为了精确的控制服务器的证书是如何验证的,您可以再 KdbndpConnection 上注册 UserCertificateValidationCallback (和在 .NET上的SSLStream一样)。
您还可以通过在 KdbndpConnection 上注册 ProvideClientCertificatesCallback 来让Kdbndp向服务器提供客户端证书。