【问题标题】:MongoDB Connection ErrorMongoDB 连接错误
【发布时间】:2017-07-12 07:35:19
【问题描述】:

当我尝试使用 FDConnection 连接到 mongodb(在设置数据库、用户名、密码、服务器和端口值之后)时,我收到 [FireDAC][Phys][Mongo]The authentication mechanism "SCRAM-SHA-1" is not supported.. 错误。

如果我将 UseSSL 选项设置为 True 并这次重试,我会收到 [FireDAC][Phys][Mongo]SSL is not enabled in this build of mongo-c-driver.. 错误。

在同一台计算机上,我可以使用 MongoBooster(使用基本身份验证)连接到 MongoDB

【问题讨论】:

    标签: mongodb delphi delphi-10.1-berlin


    【解决方案1】:

    SCRAM-SHA-1 认证机制

    升级到最新的mongo-c-driver(或至少版本1.1.0),因为您使用的不支持SCRAM-SHA-1 身份验证机制(这是驱动程序异常所说的)。而且由于它是在 MongoDB 3.0 中引入并成为默认身份验证机制的,因此您必须针对新 DBMS 使用旧驱动程序。

    MONGODB-CR 认证机制

    出于上述原因,升级到最新的mongo-c-driver(或至少版本 1.1.0)。由于MONGODB-CR 不再是默认的身份验证机制,您需要通过将authMechanism 设置为MONGODB-CR 来显式指定它。

    所以如果你想要基本的身份验证,你需要在MongoAdvanced参数中指定这个:

    ...
    FDConnection1.Params.Add('MongoAdvanced=authMechanism=MONGODB-CR');
    FDConnection1.Connected := True;
    

    关于过时驱动程序的证据

    以下链接指向相应的源代码行,您可以在其中找到有关过时驱动程序的证据:

    • version 1.0.2 - 不支持身份验证机制“SCRAM-SHA-1” 由于缺少 SCRAM-SHA-1 机制,将返回消息.

    • version 1.1.0 - 不会显示此类消息,因为存在 SCRAM-SHA-1 机制。

    • version 1.6.3 - 在当前版本中,消息听起来未知身份验证机制

    因此,不支持身份验证机制“SCRAM-SHA-1”您可以使用低于 1.1.0 的驱动程序版本获得该消息。从最新的稳定源构建驱动程序并将库路径设置为物理驱动程序链接组件的VendorLib 属性。

    类似这样的东西(不要被库名称中的版本混淆,作者保持它过时了,但将来可能会改变):

    FDPhysMongoDriverLink1.VendorLib := 'C:\PathToDriver\libmongoc-1.0.dll';
    

    【讨论】:

    • 关于 link in mogoc.org 我已经构建了 mongodb 驱动程序并在“C:\mongo-c-driver\bin”目录下创建了 4 个 dll。在我的 exe 下手动复制它们并运行应用程序 [FireDAC][Phys][Mongo]The authentication mechanism "SCRAM-SHA-1" is not supported..error 仍然存在。如果我尝试你的params.addsuggestion [FireDAC][Phys][Mongo]Failed to authenticate credentials. 错误来了:(
    • 您是否正确更新了TFDPhysMongoDriverLinkVendorLib 属性?
    • 现在我尝试用我现有的旧文件设置 VendorLib,因为C:\mongo-c-driver\bin 下只有 4 个 dll(concrt140、libbson-1.0、msvcp140、vcruntime140),并且不断出现相同的错误消息。跨度>
    • 我们说的是 libmongoc-1.0.dll 库(不要被版本混淆了)。该库的路径必须设置为VendorLib 属性。很容易证明您没有使用最新的驱动程序,version 1.0.2 没有 SCRAM-SHA-1(因此消息),version 1.1.0 添加了 SCRAM-SHA-1(将导致没有这样的消息),...跨度>
    • ...current version 消息现在是“未知身份验证机制...”,而不是“不支持身份验证机制。”。因此,您必须使用 SCRAM-SHA-1 尚未识别的 1.1.0 以下版本。至于您的构建,您似乎只构建了 libbson。
    猜你喜欢
    • 1970-01-01
    • 2012-07-04
    • 2016-09-13
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多