当我尝试通过 vbscript 从 Windows 桌面连接到(Linux)docker 容器中的 PostgreSql 数据库时遇到以下错误:
用于 ODBC 驱动程序的 Microsoft OLE DB 提供程序(30、11):严重错误:用户“dev”的密码验证失败严重错误:用户“dev”的密码验证失败
以下是演示 vb 代码:
Dim cn
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
'Open the Postgre Databse connection (Driver must be installed)
cn.Open "Driver={PostgreSQL ANSI};" & _
"Server=localhost;" & _
"Port=5432;" & _
"UID=dev;" & _
"PWD=dev;" & _
"Database=dbname;"
rs.Open "SELECT * FROM tablename", cn
While Not rs.EOF
WScript.Echo( rs("id") & ": " & rs("name"))
rs.MoveNext
Wend
这是docker-compose.yml:
version: "3.8"
services:
anon-db:
image: postgres:9.6.3
environment:
POSTGRES_USER: dev
POSTGRES_PASSWORD: dev
POSTGRES_DB: dbname
ports:
- 5432:5432
volumes:
- anon-pgdata:/var/lib/postgresql/data
container_name: anon-db
上面的 Vbscript 与非容器化的 PostgreSQL 数据库配合得很好。有人能找出容器设置或代码中的其他问题吗?给出的错误说明了密码/身份验证问题,但我不明白为什么。
答案1
我自己找到了解决方案 - 问题的原因是:如果容器化的(即主机暴露的)postgre 服务器与非容器化的 postgre 服务器同时运行,则连接不起作用。
关闭非容器化的 postgre-server 后,与容器化的 postgre-server 的连接正常进行。
以下链接的最后一条评论对此有所暗示:https://social.msdn.microsoft.com/Forums/windows/es-ES/6a2fda0a-69b1-4503-8aee-a223e4e9a9d2/fatal-password-authentication-failed-for-user?forum=netfxes