禁用对MongoDB的匿名访问

禁用对MongoDB的匿名访问,mongodb,Mongodb,我已经在Windows 2012服务器上安装了MongoDB,并在Windows服务上运行它 为了防止匿名登录,我按照以下步骤启用身份验证并禁用匿名访问 在不使用auth或keyFile设置的情况下启动mongod或mongos实例 按照创建用户管理员中的说明创建管理员用户 使用auth或keyFile设置重新启动mongod或mongos实例 根据文档,通过运行这个shell命令 db.auth(,) 它应该打开授权并重新启动实例。它应该禁用匿名访问 我不确定第三步是什么意思,我停止了Mon

我已经在Windows 2012服务器上安装了MongoDB,并在Windows服务上运行它

为了防止匿名登录,我按照以下步骤启用身份验证并禁用匿名访问

  • 在不使用
    auth
    keyFile
    设置的情况下启动
    mongod
    mongos
    实例
  • 按照
    创建用户管理员
    中的说明创建管理员用户
  • 使用
    auth
    keyFile
    设置重新启动
    mongod
    mongos
    实例
  • 根据文档,通过运行这个shell命令

    db.auth(,)

    它应该打开授权并重新启动实例。它应该禁用匿名访问

    我不确定第三步是什么意思,我停止了MongoDB服务并重新启动了它。 但我仍然可以匿名登录远程MongoDB

    如何禁用对MongoDB的匿名访问

    更新

    执行db.serverCmdLineOpts()

    这意味着我没有身份验证密钥。如何在那里设置身份验证密钥

    我不知道第三步是什么意思

    在文档之后

    在将MongoDB作为Windows应用程序运行时,应该指定两个选项 服务:日志输出的路径(即logpath)和配置 文件

    这意味着您的
    mongod
    命令(在Windows服务中定义)应该如下所示:

    c:\mongodb\bin\mongod.exe --config c:\mongodb\mongod.cfg
    
    auth = true
    
    在您的配置文件中(无论它叫什么,在我上面的示例中叫mongod.cfg),您都希望有这样一行:

    c:\mongodb\bin\mongod.exe --config c:\mongodb\mongod.cfg
    
    auth = true
    

    试试这个,看看是否有效。如果您的服务定义不包含“-config”选项,请重新安装您的服务(遵循我引用的文档)以添加它。

    要完全禁用匿名身份验证,您需要确保:

    1) 转到
    管理
    数据库。 在创建第一个管理员用户之前,默认情况下,有一个允许您匿名登录并设置第一个用户的

    要检查管理数据库中是否至少有一个用户,请运行:

    db.getSiblingDB('admin').system.users.find()
    
    2) 在启用
    auth
    的情况下启动MongoDB服务器(独立服务器)或启用
    keyFile
    的情况下启动(副本集)。
    keyFile
    选项意味着
    auth
    ,用于副本集节点之间的内部身份验证

    要检查正在运行的MongoDB实例的配置设置,可以参考
    mongo
    shell中的
    db.serverCmdLineOpts()
    的输出

    如果选项已从默认值更改,则它们应显示在输出的
    parsed
    部分。也就是说,其中一个应该返回true:

    db.serverCmdLineOpts().parsed.auth
    db.serverCmdLineOpts().parsed.keyFile
    

    在版本2.6+中启用授权-采用yml格式:

    security:
        authorization: enabled
    
    额外资料: 还要注意,如果您使用的是安全配置,如密钥文件配置,则

    security:
        authorization: enabled
    
    密钥不是必需的,这就是为什么您可能会看到没有此标志的配置文件。。。 另一项说明: 在最新版本4.x中,您还需要配置访问IP列表: 净: bindIp::,0.0.0.0#绑定所有v4和v6 ip地址,或使用建议用于生产的特定主机访问的特定地址


    必须使用--auth命令行选项重新启动mongod实例(在shell中运行):

    请记住,mongodb的路径可能不同,因此您可以检查mongodb配置文件中的
    dbPath
    值:

    sudo vi /etc/mongod.conf
    

    我让我的mongodb作为服务运行。我想我们可以从服务或配置文件中完成。现在,如果我尝试从命令或Powershell窗口运行此命令c:\mongodb\bin\mongod.exe--config c:\mongodb\mongod.cfg,我会得到“错误:无法从配置文件读取”,当您执行
    类型c:\mongodb\mongod.cfg
    时,您会得到什么输出?如果找不到,则需要创建它。您的配置文件不必命名为mongod.cfg。它必须在用户有权访问的位置可读。它正在使用命令提示符。所以我在“C:\Program Files\mongodb”下创建了mongod.cfg,并在cmd上运行了这个命令。。。。mongod.exe--config….mongod.cfg和我得到错误“无法读取配置文件”,并给了我其他允许选项--help--hI查看C:\\Program Files\Mongodb中的Mongodb出现的问题,命令没有从该路径运行,因此我将路径更改为C:\\Mongodb。但是在我运行MongoDB to as服务时,添加auth=true的配置文件并没有限制远程匿名访问。但是,当我手动运行MONGODB时,它正在检查凭据,以确保您的“匿名登录”仍然有效;您是否能够查看/创建数据?您需要能够匿名连接以运行auth命令,但如果启用了auth,您将没有任何权限运行任何其他命令。例如,
    show databases
    将返回一个类似于
    listDatabases failed:{“ok”:0,“errmsg”:“unauthorized”}
    的错误。我注意到解析的对象中没有身份验证密钥。我已使用db.serverCmdLineOpts()结果更新了我的问题。我如何才能在那里添加身份验证密钥?谢谢,我能够进行干净的安装并正确设置eh授权。将在其他计算机上复制相同的步骤server@HaBo:由于您的
    mongod
    正在使用
    --service
    选项运行,我猜您是按照以下步骤操作的。这将包括设置一个配置文件(例如
    c:\mongodb\mongod.cfg
    )。您还需要将
    auth=true
    添加到配置文件中,然后通过
    net stop MongoDB
    net start MongoDB
    @deadManN重新启动MongoDB服务。请发布一个新问题,包括我之前建议的所有详细信息:您尝试了什么,任何错误消息,以及您的环境详细信息(O/S版本、MongoDB服务器版本、MongoDB部署类型)。没有关于您的环境和
    sudo vi /etc/mongod.conf