一直搞oracle的人,最近被通知要搭建个Mongodb环境。 只能自学上了,踩了不少坑。

在Mongodb的官网上 下载了 最新的linux 64位版本 3.2.7 .  

有gz和 rpm包两种 ,安装步骤这里简略。可以参考:

http://www.osyunwei.com/archives/7629.html

http://www.yiibai.com/mongodb/mongodb_create_database.html


这里说下几个注意的:

1.mongodb   不是创建个数据库就马上有的,需要往里面插入数据才有。

2. 3.2.7版本默认是没有 admin库的。需要创建root权限级别用户。


db.createUser(user:"sa",pwd:"sa",roles:[{role:"root",db:"admin"}]})


3.mongodb权限级别很细致,可以在网上找到很多文章。这里简介个 dbOwner的权限


db.createUser({user:"test",pwd:"test",roles:[{role:"dbOwner",db:"dbname"}]})


4.凡是看到 addUser的文章,就不用看了,因为这是老版本的。3.0以上的版本都换成creatUser()

5.数据是否启用auth认证 ,可以在配置文件 mongodb.conf文件设置 auth=true,第一次启动数据库的时候先注释掉。


二· 

下面重点来了,说说这个坑了我很久的 3.2.7的认证机制。

在开启认证之前创建了一个管理员帐户 sa 和一个普通用户。然后关掉数据库,改配置文件,开启auth ,然后再登入数据库后,db.auth("user","password") 认证。

然后用 show collections测试。  数据库命令行操作没问题。


结果开发人员用软件登录的时候 直接报错,说认证报错。 我以为是自己开启的auth的问题,重新做了N多遍的测试。

开发人员用的软件 mongoVUE  版本是1.6.9的。

最后发现mongodb 3.2.7的authschema 是 5级别的。而3.0一下版本的是 3 级别。所以之前创建的任何帐户加密机制都是(SCRAM-SHA-1),而3.0版本以下的创建出来的帐户都是 (MONGODB-CR). 这点可以通过 admin下  db.system.users.find()  查看。

所以 :

1.要删除之前所有创建过的user

2.修改authSchema级别

> var schema = db.system.version.findOne({'_id':'authSchema'})

>schema.currentVersion=3

>db.system.version.save(schema)

3.重建user

4.关闭数据库 开启认证,重新连接。


到这一般都结束了。正常使用图形操作没问题了。

但是开发人员是能进去了,但是在图形操作里面添加collection时又报错“未将对象引用设置到对象的实例." 

下面的具体的是:Type:System.NullReferenceException .

网上对这个报错的解释可是玲琅满目,但是不一定都是符合自己的情况。最后觉得还是UI框架功能上的问题。

最后查到 mongoVUE 最高只能支持到 mongodb的 2.6版本,再往上就不支持了。

现在确定能支持 mongodb 3.0及以上的 客户端可视化工具是 mongochef (http://3t.io/mongochef/) 非商用的是免费的。


最后为了满足开发,降到2.6.5版本的mongodb 一切问题解决。

至于数据库开不开 auth认证,可以根据情况而言,有人说auth开启影响性能。这里不知对否。



Logo

前往低代码交流专区

更多推荐