数据库的MongoDB身份验证限制
我有一个名为数据库的MongoDB身份验证限制,mongodb,database-connection,compass,Mongodb,Database Connection,Compass,我有一个名为flowers的数据库,其中有一个名为flower的集合。当我第一次在MongoDB中创建它时,我没有为它设置身份验证(我只使用默认端口27017和localhost连接到它) 然后我想限制对这个数据库的访问,以便只使用一组用户名和密码进行访问。首先,我在admin数据库中创建了一个admin: > use admin switched to db admin > db.createUser( ... { ... user: "myUserAdmin", ..
flowers
的数据库,其中有一个名为flower
的集合。当我第一次在MongoDB中创建它时,我没有为它设置身份验证(我只使用默认端口27017和localhost连接到它)
然后我想限制对这个数据库的访问,以便只使用一组用户名和密码进行访问。首先,我在admin
数据库中创建了一个admin
:
> use admin
switched to db admin
> db.createUser(
... {
... user: "myUserAdmin",
... pwd: "abc123",
... roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
... }
... )
Successfully added user: {
"user" : "myUserAdmin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
> show users
{
"_id" : "admin.myUserAdmin",
"user" : "myUserAdmin",
"db" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
> use flowers
switched to db flowers
> db.createUser(
... {
... user: "adminfl",
... pwd: "flower1",
... roles: [ "dbOwner", "readWrite"]
... }
... )
Successfully added user: { "user" : "adminfl", "roles" : [ "dbOwner", "readWrite" ] }
然后我退出了mongo,重新启动了服务。然后我为我的数据库创建了一个用户:
> use admin
switched to db admin
> db.createUser(
... {
... user: "myUserAdmin",
... pwd: "abc123",
... roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
... }
... )
Successfully added user: {
"user" : "myUserAdmin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
> show users
{
"_id" : "admin.myUserAdmin",
"user" : "myUserAdmin",
"db" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
> use flowers
switched to db flowers
> db.createUser(
... {
... user: "adminfl",
... pwd: "flower1",
... roles: [ "dbOwner", "readWrite"]
... }
... )
Successfully added user: { "user" : "adminfl", "roles" : [ "dbOwner", "readWrite" ] }
在此之后,我再次退出mongo,重新启动服务。。。。从Compass,我尝试使用用户名和密码连接到数据库flowers
,并指定身份验证数据库:flowers
。在这一点上,一切进展顺利
我的问题是:当我使用身份验证连接到mongo时,我可以看到所有的数据库,而当我在没有身份验证的情况下连接时,我得到了相同的结果
如何使我的数据库flowers
仅在使用用户名和密码连接时可见
更新:这是我的mongod.cfg:
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: C:\Program Files\MongoDB\Server\4.0\data
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: C:\Program Files\MongoDB\Server\4.0\log\mongod.log
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
#processManagement:
#security:
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options:
#auditLog:
#snmp:
如果mongod.conf=>
security:
authorization: enabled
然后重新启动mongodb,您就可以开始了。好的,查看您的mongo配置,我们可以看到您的数据库和日志路径中有空间,即“程序文件”,这可能会产生问题。 解决办法是: 1) 将数据、日志和conf目录设置为
C:\data\db、C:\data\log和C:\data\mongod.conf.
2) 在mongod.conf中更改dbpath和logpath的路径。
3) 根据建议在mongod.conf中添加安全授权:已启用。
4) 删除mongod服务(如果已安装),然后重新安装服务。
5) 重新启动服务。希望这能有所帮助。正如@Himanshu所说,您可能不是从启用auth开始的。您还可以通过命令行使用--auth执行此操作。您使用的是哪个版本的Mongo?限制用户只列出他可以读取的数据库是Mongo 4.0中的一项改进。@Robertseam我使用的是4.0.6版…我也尝试过这一点,但随后它给了我以下错误:错误1053:该服务没有及时响应启动或控制请求。
然后我无法再次启动该服务…我想您正在使用Windows。此链接可能会有帮助=>是否检查了此链接=>是否已将Mongod作为服务安装,或者是否正在使用命令线分享你的mongod.conf。我已经将mongod.cfg添加到我的帖子中,我已经重新安装了所有内容。。。使数据、日志和conf目录与您的答案类似。但是当我尝试在配置文件中添加授权:enabled
时。。。它给出了与上面相同的错误。。。