背景:
本码农维护的代码,需要从未鉴权的mongodb 迁移到 带鉴权的 mongodb,开始了2~3天的煎熬,总算搞定了,留下点纪念。
版本:
mongodb 3.0.x
mongo-cxx-driver-legacy-1.1.0
编译器: c++11
直接使用驱动的鉴权函数 auth(), 结果报 mongodb SCRAM-SHA-1 mechanism support not compiled into client library. (Some mechanisms require the driver be compiled with the flags --ssl or --use-sasl-client) 这个异常。
如果你就按照提示的这段信息去做,你就被坑了,别问我为什么知道
真实情况是,mongodb的驱动需要初始化,不初始化就会报这个错误,这该死的提示信息。做法如下:
在使用之前调用 mongo::client::initialize(); 一次即可,不用重复初始化。
把特~~你以为这就结束了?
我的调用 mongo 初始化函数之后就挂了~~~
最后查出来了原因,需要在 mongo-cxx-driver-legacy-1.1.0 编译的时候加 --c++11=on 选项。
OK 都搞定了。
用的时候,记得每次调用 connect() 之后都要 auth() 一下
参考链接
https://stackoverflow.com/questions/28448406/the-authentication-mechanism-scram-sha-1-is-not-supported
http://stackoverflow.com/questions/30107966/mongoclientoptionsoptions-at-options-h32