MongoDB创建用户角色

发布时间:2017-09-11

MongoDB版本

3.4

启动MongoDB

启动MongoDB有两种方式

第一种。不推荐

// --dbpath 指定数据库目录,
// --fork  守护进程
// --port 指定端口,默认是27017,
// --logpath  指定输出日志路径, 前提是先创建好目录
mongod --dbpath=/home/mongodb/db --fork --port=27017 --logpath=/home/mongodb/mongo.log

第二种以文件配置形式启动,推荐。以后只要改动这个文件就好了。

// 直接在当前目录编辑mongo.conf,没有的话会新建。名字自己定义。
vim mongo.conf

// 写入以下内容
dbpath=/home/mongodb/db
logpath=/home/mongodb/mongo.log
fork=true

// 启动命令
mongod -f mongo.conf

连接MongoDB

mongo localhost:27017
// 或者,默认是localhost 端口是27017
mongo

创建用户角色

3.0版本以后使用 db.createUser创建, addUser已弃用。

MongoDB用户角色是跟着数据库走的。在哪个数据库创建就只能操作哪个数据库。

假如有个数据库是 test

// 先进入test数据库
use test;

创建用户

// user 是你的用户名
// pwd 是你的密码
// customData 对用户角色的描述,可省略
// roles 是一个数组里面是对象, 分配权限和数据库
db.createUser({
    user: '用户名',
    pwd: '密码',
    roles: [
        {
            role: '权限分配',
            db: '指定数据库',
        },
        {
            role: '权限分配',
            db: '指定数据库',
        }
    ]
})

这里说以下role权限分配

read            // 允许用户读取指定数据库
readWrite          // 允许用户读写指定数据库
dbAdmin           // 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin         // 允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin         // 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase     // 只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase    //  只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase     // 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase       // 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root  // 只在admin数据库中可用。超级权限
__system    // 内部角色

创建一个读写数据库的用户角色

db.createUser({user: 'root',pwd: 'root',
    roles: [
        {
            role: 'readWrite',
            db: 'test',
        },
    ]
})

// 创建之后会输出以下内容:
Successfully added user: {
    "user" : "root",
    "roles" : [
        {
            "role" : "readWrite",
            "db" : "test"
        }
    ]
}

在当前数据库验证该用户(很重要)

// 注意一定要在test数据库验证该用户,因为我们在test数据库创建的用户。
// 分别是用户名和密码
db.auth('root','root');

这个时候已经配置完成了,关闭MongoDB

// 进入admin数据库
use admin;
// 关闭mongodb, 不要乱用kill -9 进程id,会丢失数据。
db.shutdownServer();
// 这个时候已经关闭了,按Ctrl+C终止,然后输入mongo发现进入不了。

编辑mongo.conf

dbpath=/home/mongodb/db
logpath=/home/mongodb/mongo.log
fork=true
auth=true    // 加入权限验证

还记得怎么启动吗?

mongod -f mongo.conf

用户名密码连接MongoDB

// 连接,地址:端口/数据库, -u 后面是你的用户名, -p 后面是你的密码
mongo localhost:27017/test -u root -p root
// 查看数据库
show dbs;
// 发现没有权限。。。为什么? 因为我们在test数据库创建的用户只能在test操作
use test;
// 查看集合 show tables; 或者 show collections;
show tables;
// 没有出错证明成功了。试试能否插入数据
db.users.insert({name:'admin'})
// 成功插入

如果你修改了用户权限需要重新验证改用户。db.auth

删除用户

// 指定用户名删除删除。
// 注意的是你在哪个数据库创建的用户就要进入哪个数据库删除,否则出错。
db.dropUser('root')

最后要说的是要跟着步骤来,否则会入坑。

如果想用mongoose连接数据库的话

var mongoose = require('mongoose')
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://root:root@localhost/test', {useMongoClient: true})
数据库
广告