数据库的MongoDB身份验证限制

时间:2019-03-15 10:07:35

标签: mongodb database-connection compass

我有一个名为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"
        ]
}

然后我退出mongo,重新启动了服务。然后,我为数据库创建了一个用户:

> 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,并指定authentication database: 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:

2 个答案:

答案 0 :(得分:1)

如果未添加到mongod.conf =>

中,请尝试添加以下行
security:
  authorization: enabled

然后重新启动mongodb,您就很好了。

答案 1 :(得分:0)

确定您的mongo conf,我们可以看到您的数据库和日志路径中有空间,即“ Program Files”,这可能会造成问题。 解决方法是: 1)制作数据,日志和conf目录,例如Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/data/CDH-5.7.1-1.cdh5.7.1/lib/spark/python/pyspark/sql/context.py", line 580, in sql return DataFrame(self._ssql_ctx.sql(sqlQuery), self) File "/data/CDH-5.7.1-1.cdh5.7.1/lib/spark/python/lib/py4j-0.9-src.zip/py4j/java_gateway.py", line 813, in __call__ File "/data/CDH-5.7.1-1.cdh5.7.1/lib/spark/python/pyspark/sql/utils.py", line 51, in deco raise AnalysisException(s.split(': ', 1)[1], stackTrace) pyspark.sql.utils.AnalysisException: u"missing EOF at ';' near 'db'; line 1 pos 36" 2)在mongod.conf中更改dbpath和logpath的路径。 3)根据建议在 mongod.conf 中添加C:\data\db, C:\data\log and C:\data\mongod.conf.。 4)删除mongod服务(如果已安装),然后再次安装服务。 5)重新启动服务。希望这会有所帮助。