一直想试试使用 MongoDB, 今天终于决定要在 Linux 上安装了. 准备使用 apt-get 安装, 因为比较方便. 但是网上的教程有的提到了 mongodb-10gen, 有的提到了 mongodb-org, 不知道安装哪个. 查证后发现开发 MongoDB 的公司叫做 10gen, 现已改名为 MongoDB Inc.(Wiki). 所以基本可以判断 mongodb-10gen 是 mongoDB 以前使用的名字, 现在应该使用 mongodb-org. 后来在 StackOverflow 上也得到了证实(StackOverflow).

安装

MongoDB 官方提供了 Ubuntu 下的安装教程(链接), 其中主要步骤摘录如下:

  1. Import the public key used by the package management system

    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
    
  2. Create a list file for MongoDB. (Ubuntu 12.04)

    echo "deb [ arch=amd64 ] http://repo.mongodb.org/apt/ubuntu precise/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
    
  3. Reload local package database

    sudo apt-get update
    
  4. Install the MongoDB packages

    sudo apt-get install -y mongodb-org
    

至此, 安装完成.

权限控制

  1. 切换到 Collection admin:

    use admin
    
  2. 创建用户 admin (也可是其他名字):

    db.createUser({
        user: "admin",
        pwd: "admin",
        roles: [
            { role: "userAdminAnyDatabase", db: "admin" },
            { role: "dbAdminAnyDatabase", db: "admin" },
            { role: "readWriteAnyDatabase", db: "admin" }
        ]
    })
    

    此处如果给的角色(role)不够, 可以使用如下命令追加:

    db.grantRolesToUser(
        "<username>", [{ role: "<role>", db: "<database>" }]
    )
    

    需要注意, 对于一个用户, 即使赋予了 "Any" 的权限, 它的登录也必须在赋予权限的 Collection 中完成.
    比如我刚才建立的 admin 用户, 是在 Collection admin 中创见的, 虽然他具有 "readWriteAny" 等权限, 但是我想使用 admin 帐号在 Collection test 中追加或者查看数据, 仍然要先 use admin, db.auth("admin", "admin")完成登录, 然后 use test 再进行相关操作, 直接在 test 中使用 db.auth() 将无法成功.

  3. 启用认证:

    sudo vim /etc/mongod.conf
    

    添加如下内容:

    security:
        authorization: enabled
    

    然后重启:

    sudo service mongod restart
    
2017-05-26 14:2610