Windows下安装MongoDB

今天尝试了在Windows7环境下安装MongoDB,遇到了一些问题,这里做一下记录。

正常安装

  • 下载软件, 在MongoDB官网 下载安装包mongodb-win32-x86_64-2008plus-ssl-3.4.3-signed
  • 下载完成后开始安装,我修改了安装位置,放在了目录“C:\mongodb”下面
  • 一路next安装完成。接下来是最有问题的设置MongoDB的服务。
  • 在目录“C:\mongodb”下创建data目录和logs目录,并在logs目录下创建文件mongodb.log
  • 在目录“C:\mongodb”下创建mongodb.conf,并填入配置信息:
dbpath=C:\mongodb\data
logpath=C:\mongodb\logs\mongo.log
logappend=true 
journal=true
quiet=true 
port=27017
  • 启动cmd界面,并执行以下命令:
cd C:\mongodb\bin
mongod --config "C:\mongodb\mongo.conf" --logpath "C:\mongodb\logs\mongo.log" --install --serviceName "MongoDB"
mongod.exe --remove --serviceName "MongoDB" #如果需要移除这个服务的话

权限配置

MonogoDB默认是无需权限认证即可进行CRUD操作的,但是为了保证MongoDB的使用尤其是商业使用,MongoDB应该要求是做权限配置。
关于权限,需要理解:

  1. MongoDB是没有默认管理员账号,所以要先添加管理员账号,再开启权限认证。
  2. 切换到admin数据库,添加的账号才是管理员账号。
  3. 用户只能在用户所在数据库登录,包括管理员账号。
  4. 管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。

MongoDB有默认的角色参考官方文档,也可以自定义角色,默认的角色包括:

  • Read:允许用户读取指定数据库
  • readWrite:允许用户读写指定数据库
  • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
  • userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
  • clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  • readAnyDatabase:赋予用户所有数据库的读权限
  • readWriteAnyDatabase:赋予用户所有数据库的读写权限
  • userAdminAnyDatabase:赋予用户所有数据库的userAdmin权限
  • dbAdminAnyDatabase:赋予用户所有数据库的dbAdmin权限。
  • root:超级账号,超级权限
  • __system权限 ,用于分布式环境的权限认证,MongoDB assigns this role to user objects that represent cluster members, such as replica set members and mongos instances. The role entitles its holder to take any action against any object in the database.Do not assign this role to user objects representing applications or human administrators, other than in exceptional circumstances.If you need access to all actions on all resources, for example to run applyOps commands, do not assign this role. Instead, create a user-defined role that grants anyAction on anyResource and ensure that only the users who need access to these operations have this access.

上述的配置完成后,可以按照下面的操作进行:

  • 查看admin库
C:\Users\kejun.he>mongo
> use admin
switched to db admin
> show collections
system.version
  • 添加超级权限用户sa,root用户和admin用户
> db.createUser(
 {
 user:"sa",
 pwd:"root",
 roles:["root"]
 })
> db.createUser(
 {
 user:"root",
 pwd:"root",
 roles:["clusterAdmin", "readWriteAnyDatabase", "dbAdminAnyDatabase", "userAdminAnyDatabase"]
 })
> db.createUser(
 {
 user:"admin",
 pwd:"admin",
 roles:[{role:"dbAdminAnyDatabase",db:"admin"}]
 })
  • 在我们之前配置的mongo.conf文件中增加这一句,并重启mongoDB服务
auth=true
========================
net stop mongoDB
net start mongoDB

我们再重新登录,发现需要认证的配置生效了,这时候需要通过认证登录:

C:\Users\kejun.he>mongo
MongoDB shell version v3.4.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.3
> show dbs
2017-04-25T13:04:34.435+0800 E QUERY    [thread1] Error: listDatabases failed:{
        "ok" : 0,
        "errmsg" : "not authorized on admin to execute command { listDatabases:
1.0 }",
        "code" : 13,
        "codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:761:19
shellHelper@src/mongo/shell/utils.js:651:15
@(shellhelp2):1:1

在上面的代码中,我们可看到需要检查admin的权限,use admin之后不能直接查询,通过权限认证之后才能查看admin数据库下的表。
* 继续增加普通用户,方便用户访问特定的数据库

> use admin
> db.auth("admin","admin")
> use upwords
switched to db upwords
> db.createUser({
user:"up",
pwd:"up",
roles:[{role:"readWrite",db:"upwords"},{role:"dbAdmin",db:"upwords"}]
})

Successfully added user: {
        "user" : "up",
        "roles" : [
                {
                        "role" : "readWrite",
                        "db" : "upwords"
                },
                {
                        "role" : "dbAdmin",
                        "db" : "upwords"
                }
        ]
}
> use upwords
switched to db upwords
> db.auth("up","up")
1
> show collections
abc
test

显示添加成功。

posted @ 2017-04-21 17:55  柯君  阅读(257)  评论(0编辑  收藏  举报