【问题标题】:How to use Python to initiate MongoDB RepSet and then create the first admin user?如何使用 Python 启动 MongoDB RepSet,然后创建第一个管理员用户?
【发布时间】:2018-02-22 03:30:28
【问题描述】:

我正在尝试使用 python 设置一个 mongoDB RepSet,我连接了 2 个副本,但我不知道如何创建第一个使用 pymongo 的管理员用户。

我知道我可以使用 mongo shell 创建第一个管理员用户,如下所示

db.getSiblingDB("admin").createUser({
      user : "main_admin",
      pwd  : "abc123",
      roles: [ { role: "root", db: "admin" } ]
 });

用mongo shell创建管理员用户后,使用这条python行client.testdb.add_user('newTestUser', 'Test123', roles=[{'role':'readWrite','db':'testdb'}])创建用户没有问题。

但是,有没有办法用 pymongo 创建第一个管理员用户?

注意事项:

启动mongod的命令:

mongod --bind_ip 0.0.0.0 --replSet MainRepSet --auth --clusterAuthMode keyFile \
       --keyFile /etc/secrets-volume/internalAuthMongoDBKeyfile --setParameter authenticationMechanisms=SCRAM-SHA-1  > /tmp/log &

用于创建rs的python代码

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
conf = {'_id': "MainRepSet", 'members': [
       { '_id': 0, 'host' : "operations-mongo-0.operations-    mongo.governor.svc.cluster.local:27017" },
       { '_id': 3, 'host' : "operations-mongo-3.operations-    mongo.governor.svc.cluster.local:27017" }
]}
client.admin.command("replSetInitiate",conf)

【问题讨论】:

    标签: python mongodb pymongo


    【解决方案1】:

    我确定您不能仅使用 pymongo 做到这一点。您可以使用ossubprocess 模块以及pymongo

    您可以在不启用auth 的情况下启动mongod,创建您的用户,关闭mongo,然后在启用auth 的情况下重新启动:

    假设您在本地主机上运行,​​例如:

    from subprocess import call
    from pymongo import MongoClient
    
    call(["mongod", "-f mongoNonAuth.conf"])
    
    client = MongoClient('localhost', 27017)
    db = client["admin"]
    
    db.command("createUser", "admin", pwd="password", roles=["root"])
    db.command("shutdown")
    
    call(["mongod", "-f mongoAuth.conf"])
    
    client = MongoClient('localhost', 27017, 
             username="user name", password="pass/word")
    

    请注意:以上代码未经测试

    更多关于subprocessosCalling an external command in Python的信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      • 2015-02-18
      • 2017-07-10
      • 1970-01-01
      相关资源
      最近更新 更多