OpenDKIM:在 KeyTable/SigningTable 中使用 MySQL 套接字

OpenDKIM:在 KeyTable/SigningTable 中使用 MySQL 套接字

如何使用 OpenDKIM 中的 KeyTable/SigningTable 连接到 MySQL 套接字(不是 TCP)?

需要使用的数据集是“dsn:”,手册上说:

如果字符串以“dsn:”开头,并且 OpenDKIM 库已编译为支持该数据库类型,则字符串的其余部分是数据存储名称,用于描述 ODBC 或 SQL 数据库的类型、位置参数和访问凭据。DSN 的格式为:backend://[user[:pwd]@][port+]host/dbase[/key=value[?...]]

其中 backend 是受支持的后端数据库机制的名称(例如“mysql”),用户和密码是数据库的可选登录凭据,端口和主机描述连接到该数据库的 TCP 连接的目标,dbase 是要访问的数据库的名称,并且 key=value 对必须至少指定“table”、“keycol”和“datacol”值,指定表的名称、要视为键的列的名称以及要视为值的列的名称(以逗号分隔)。例如(所有内容都在一行中):

mysql:://dbuser:dbpass@3306+dbhost/odkim/table=macros?keycol=host?datacol=v1,v2

定义一个在主机“dbhost”上监听端口 3306 的 MySQL 数据库;应使用用户 ID“dbuser”和密码“dbpass”来访问数据库;数据库名称为“odkim”,数据位于表“macros”内的列“host”(键)和“v1”和“v2”(值)中。因此,当找到匹配项时,此示例将返回两个值。

DSN 中的任何值都不能包含用于将 DSN 各部分相互分隔的六个标点符号(“:”、“/”、“@”、“+”、“?”和“=”)。

似乎无法连接到 MySQL 套接字,只能通过 TCP?

答案1

OpenDKIM用途OpenDBX 库用于连接后端数据库,包括 MySQL;目前只有OpenDBX 1.2+ 支持 MySQL 的 UNIX 套接字. OpenDBX 1.1仅支持 PostgreSQL 的 UNIX 套接字

此外,OpenDKIM 限制其配置使用 DSN 字符串,要求其解析 DSN 字符串分解成各个组成部分(host,,,...)。portdatabase

尽管 OpenDBX 可以使用 UNIX 套接字连接到 MySQL,但即使在最新master(20220402) 分支中,OpenDKIM 也期望/字符 (在 DSN 后端之后) 作为主机+端口和数据库名称之间的分隔符,而不是 UNIX 套接字路径组件。使用 DSN 值如下:

mysql://user:pass@3306+/path/to/mysql.socket/odkim/table=macros?keycol=host?datacol=v1,v2

应该会导致一个空的主机名(dsn->dsn_host)并且 OpenDKIM 返回一个错误。

可能会打开一个问题他们的 Github 页面向开发人员提出这一担忧。

答案2

我刚刚设置了 OpenDKIM 以通过其套接字连接到 MySQL。

opendkim首先,在 MySQL 服务器中创建用户:

CREATE USER 'opendkim'@'localhost' IDENTIFIED VIA unix_socket;
GRANT SELECT ON opendkim.* TO 'opendkim'@'localhost';

并在 opendkim 配置文件(Debian 上为 /etc/opendkim.conf)中添加以下行:

SigningTable dsn:mysql://localhost/opendkim/table=dkim?keycol=domain_name?datacol=id
KeyTable     dsn:mysql://localhost/opendkim/table=dkim?keycol=id?datacol=domain_name,selector,private_key

如您所见,您只需定义 MySQL 服务器的主机名(无用户、无密码)localhost:。

配置 :

  • Debian 11
  • OpenDKIM 2.11.0(从 apt 安装)
  • libopendbx1-mysql 1.4.6
  • MariaDB 服务器 10.5.15

相关内容