【问题标题】:Postfix + Dovecot Connect failed to databasePostfix + Dovecot 连接数据库失败
【发布时间】:2016-04-22 03:46:21
【问题描述】:

我已经安装了一个基于 Postfix 和 Dovecot 的新邮件服务器。 当我配置一切时,设置很好。没有错误输出或其他东西。

问题是: 当我尝试通过客户端连接到邮件帐户时,它会在身份验证时空闲。

/var/log/mail.log 里面

dovecot: auth-worker(15467): Error: mysql(localhost): Connect failed to database (mail): Access denied for user 'mail'@'localhost' (using password: YES) - waiting for 1 seconds before retry

所以,我会说 Dovecot 无法连接到数据库/不会进行身份验证。 但我不知道为什么。 数据库用户对该数据库具有正确的权限/还尝试刷新权限。 我读到有时身份验证失败是因为加密算法。 所以我用OLD_PASSWORD函数设置了邮件用户密码(发现here)。也不行。

这是我的驱动程序配置文件 (dovecot-mysql.conf)

driver = mysql
connect = host=localhost dbname=mail user=mail password='mypassword'
default_pass_scheme = PLAIN-MD5
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT CONCAT('maildir:/var/vmail/',maildir) AS mail, 6000 AS uid, 6000 AS gid FROM mailbox WHERE username = '%u'

(我的密码在这里改了)

所以我不知道为什么它不会让我访问数据库。 有人知道吗?

如有任何帮助,我将不胜感激!


注释:
服务器:Debian v7.9
数据库:MySQL 5.6.25
鸽舍:2.1.7
后缀:2.9.6

postconf -n

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
broken_sasl_auth_clients = yes
config_directory = /etc/postfix
disable_vrfy_command = yes
dovecot_destination_recipient_limit = 1
inet_interfaces = all
local_transport = virtual
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
mydestination = markheumueller.de, localhost
myhostname = h2377359.stratoserver.net
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
readme_directory = no
recipient_delimiter = +
relayhost =
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
smtpd_recipient_restrictions = permit_sasl_authenticated permit_mynetworks reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_path = private/auth_dovecot
smtpd_sasl_type = dovecot
smtpd_sender_login_maps = proxy:mysql:/etc/postfix/mysql-sender-login-maps.cf
smtpd_sender_restrictions = reject_authenticated_sender_login_mismatch reject_unknown_sender_domain
smtpd_tls_cert_file = /etc/postfix/ssl/mailserver.crt
smtpd_tls_key_file = /etc/postfix/ssl/mailserver.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual-alias-maps.cf
virtual_gid_maps = static:6000
virtual_mailbox_base = /var/vmail/
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual-domains-maps.cf
virtual_mailbox_limit = 0
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_minimum_uid = 104
virtual_transport = dovecot
virtual_uid_maps = static:6000

【问题讨论】:

  • 您的密码中有dollar sign等特殊字符吗?
  • 只有*(星号)符号。但我已经只尝试了“密码”。

标签: mysql linux email postfix-mta dovecot


【解决方案1】:

日志文件中的错误明显是从Mysql Server转发过来的。 它指出用户邮件无法连接到本地主机。

你需要检查mysql-server是否:

  • 1.真的在运行。
  • 2.真的在标准端口(3306)上监听本地主机,我会使用“netstat -tnla”

看看是否真的有这样的条目:

Proto Recv-Q Send-Q Local Address           Foreign Address        State      
tcp        0      0 127.0.0.1:3306            0.0.0.0:*            LISTEN

如果有这样一行,请尝试将您的设置更改为:

driver = mysql
connect = host=127.0.0.1 dbname=mail user=mail password='mypassword'

有时会有所帮助。

如果“netstat”突击队没有提供包含 127.0.0.1:3306 的行,

  • 确保 mysql 服务器真正监听 tcp 套接字 以及 unix 套接字、Debian 和 co。查看 /etc/my.cnf 文件。

如果它运行并监听正常,但仍然没有通过 dovecot/postfix 使用您的 mysql 帐户和数据库设置的身份验证,然后尝试在终端窗口中通过命令行使用相同的凭据进行连接:

mysql -u 邮件 -h 本地主机邮件 -p

你应该在这样的控制台登录成功。

如果您在登录尝试时收到与日志文件中类似的错误,那么您没有正确设置 mysql 中的用户访问参数。只需为此使用正确的 GRANT SQL Sentence,就像我在这里一样:

~$ mysql -u root -p 
Enter password: 

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 505705
Server version: 5.5.49-0+deb8u1 (Debian)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> GRANT ALL PRIVILEGES ON mail.* TO 'mail'@'localhost' IDENTIFIED BY 'your.password.here';

mysql> GRANT ALL PRIVILEGES ON mail.* TO 'mail'@'127.0.0.1' IDENTIFIED BY 'your.password.here';

在mysql中使用GRANT语句不需要FLASH PRIVILEGES。

您可以限制您的用户权限,而不是 GRANT ALL PRIVILEGES 部分,只需使用: GRANT 使用邮件。* TO 'mail'@'127.0.0.1' IDENTIFIED BY 'your.password.here'; GRANT SELECT on mail.* TO 'mail'@'127.0.0.1' IDENTIFIED BY 'your.password.here';

希望这会有所帮助。

【讨论】:

  • 您好,从 2022 年开始。GRANT USAGE 和 GRANT SELECT 对我有用。似乎 postfixadmin 设置页面本身并没有授予这些权限,所以手动完成了。
【解决方案2】:

有同样的错误。删除“default_pass_scheme”行并重试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 2017-06-12
    • 2023-03-02
    • 2020-05-05
    相关资源
    最近更新 更多