Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数据库的MongoDB身份验证限制_Mongodb_Database Connection_Compass - Fatal编程技术网

数据库的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
时。。。它给出了与上面相同的错误。。。