MongoDB用户授权和管理

mongodb安装好后第一次进入是不需要密码的,也没有任何用户,通过shell命令可直接进入,mongo

运行如下:

1
2
3
4
5
[root@namenode mongodb]# mongo
MongoDB shell version v3.4.9
connecting to: test
> use test;
switched to db test

添加管理用户(mongoDB 没有无敌用户root,只有能管理用户的用户 userAdminAnyDatabase),

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
> use admin
switched to db admin
> show dbs
admin 0.000GB
local 0.000GB
> use admin
switched to db admin
> db.createUser({user:"anziguoer", pwd:"anziguoer", roles:[{role:"userAdminAnyDatabase", db:"admin"}]})
Successfully added user: {
"user" : "anziguoer",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}

注:添加完用户后可以使用show users或db.system.users.find()查看已有用户

添加完管理用户后,关闭MongoDB,并使用权限方式再次开启MongoDB,这里注意不要使用kill直接去杀掉mongodb进程,(如果这样做了,请去data/db目录下删除mongo.lock文件),可以使用db.shutdownServer()关闭

使用权限方式启动MongoDB

1
sudo /usr/local/mongodb/3.4.9/bin/mongod -f /usr/local/etc/mongod.conf --fork --auth

或者在配置文件中修改:

1
2
auth = true
#noauth = true

进入mongo shell,使用admin数据库并进行验证,如果不验证,是做不了任何操作的。

1
2
3
4
5
> use admin
switched to db admin
> db.auth("anziguoer", "anziguoer")
1
>

1 表示认证成功

验证之后还是做不了操作,因为admin只有用户管理权限,下面创建用户,用户都跟着库走,

1
2
3
4
5
6
7
8
9
10
11
12
> use mydb
switched to db mydb
> db.createUser({user:"anziguoer", pwd:"anziguoer", roles:[{role:"readWrite", db:"mydb"}]})
Successfully added user: {
"user" : "anziguoer",
"roles" : [
{
"role" : "readWrite",
"db" : "mydb"
}
]
}

使用创建的用户root登录进行数据库操作:

1
2
3
4
5
6
7
8
mongo localhost/mydb -uanziguoer -p
MongoDB shell version v3.4.9
Enter password:
connecting to: mongodb://localhost/mydb
MongoDB server version: 3.4.9
> show dbs
>
> show collections

或者使用:

1
mongo -u username -p password --port port --authenticationDatabase databaseName
1
mongo databaseName -u username -p password --port port

然后就可以进行增删改查各种数据操作…

1
2
3
4
5
6
> use mydb
switched to db mydb
> show tables;
> db.aaa.insert({name:"anziguoer", age:"20", description:"我还很年轻"})
WriteResult({ "nInserted" : 1 })
>

1
2
3
4
5
> show tables;
aaa
> db.aaa.find()
{ "_id" : ObjectId("5a0d33de84b5967474601f50"), "name" : "anziguoer", "age" : "20", "description" : "我还很年轻" }
>

查看已存在的用户

1
> db.system.users.find()

删除用户

1
2
3
4
5
6
7
8
> use mydb
switched to db mydb
> show collections
aaa
> db.system.users.remove({user:"anziguoer"})
WriteResult({ "nRemoved" : 0 })
> db.system.users.find()
>
坚持原创技术分享,您的支持将鼓励我继续创作!
//