我用的: Delphi 12、FireDac、Postgres 11、Windows
我在 FireDac 中的连接配置如下所示:
dm.DMForm.Connect.Params.Clear;
dm.DMForm.Connect.Params.Add('DriverID=PG');
dm.DMForm.Connect.Params.Add('Server=localhost');
dm.DMForm.Connect.Params.Add('Database=dbname');
dm.DMForm.Connect.Params.Add('User_Name=username');
dm.DMForm.Connect.Params.Add('Password=pass');
dm.DMForm.Connect.Params.Add('Port=5432');
dm.DMForm.Connect.Params.Add('UseSSL=True');
dm.DMForm.Connect.Params.Add('SSLMode=require')
在我看来,这个配置是错误的,尽管它符合规范。 SSLMODE 不强制 SSL 连接。当我连接到未配置 SSL 的服务器时,firedac 会建立连接,但它应该报告错误。
当我使用 UniDac 组件执行相同的操作并尝试连接到同一服务器时,该组件无法连接并返回错误。也就是说,它的行为正确。
有谁知道如何在firedac中正确强制SSL连接?
FireDAC 不直接支持的参数需要放入
PGAdvanced
参数中并使用 PostgreSQL 文档中记录的参数和名称。
dm.DMForm.Connect.Params.Add('PGAdvanced=sslmode=require');
参考资料: 连接到 PostgreSQL (FireDAC) - 连接定义参数和文档 → PostgreSQL 16,数据库连接控制函数,sslmode