我正在尝试在连接字符串中设置
SSL Mode
:
SSL Mode=preferred;
但是当我的代码尝试连接到数据库时,我得到了
ArgumentException
:
请注意,
InnerException
说:
未找到请求的值“首选”。
查看以下文档,指定
required
、disabled
或 preferred
应该是有效的:
我正在使用 Npgsql 3.0.3,这是我使用 NuGet 获得的:
添加 sslmode=Require; 和 Trust Server Certificate=true;,因为它在连接字符串中。它肯定会起作用。
设置 Ssl 模式时允许使用以下值:
Npgsql v6.0+:
Npgsql v6.0 之前版本:
默认值表示未指定 Ssl 模式时选择的设置。
文档链接: https://www.npgsql.org/doc/security.html#cryption-ssltls
Ssl 模式设置的值似乎也区分大小写。
使用“prefer”而不是“Prefer”时从日志文件中获取的示例:
Exception Type: System.ArgumentException
Exception Messsage: Couldn't set ssl mode, Parameter name: ssl mode
InnerException Messsage: Requested value 'prefer' was not found.
注意:上述日志来自使用 Npgsql 4.0.3 的 DotNet Core 2.1 应用程序(因此 v4.1+ 的区分大小写声明可能不再相关)
虽然发现该值区分大小写,但设置本身并不区分大小写(即 ssl mode 与 Ssl Mode 的工作原理相同);例如
Server=localhost;Port=5432;ssl mode='Prefer';...
和
Server=localhost;Port=5432;Ssl Mode='Prefer';...
两者都工作得很好。
旁白:
v3.0 之前的“允许”似乎是一个有效的设置,因为 v3.0 发行说明指出它已被删除; 请参阅 https://www.npgsql.org/doc/release-notes/3.0.html#ssl。
大概是在 Npgsql 与 PostgreSQL 标准保持一致时,在 v.6.0 中再次重新引入了它; 请参阅https://www.npgsql.org/doc/release-notes/6.0.html#ssltls-improvements。
v6.0 发行说明中的附加内容:
默认 SSL 模式现为 Prefer; 请参阅https://www.npgsql.org/doc/release-notes/6.0.html#the-default-ssl-mode-is-now-prefer
SSL 配置更改(SSL 模式=需要); 请参阅https://www.npgsql.org/doc/release-notes/6.0.html#changes-to-ssl-configuration-ssl-moderequire