MongoDBはadminライブラリの下でdbを実行する.dropAllUsers()は、管理権限がない場合にどのように処理するかを示します.


テスト時にaminライブラリの下でdbを実行した.dropAllUsers()操作、そしてすべての管理者ユーザーがなくなり、どんな操作を実行してもError:not authorized on admin to execute command...このような場合の対処法をご紹介します
まず、現在のmongoインスタンスのプロファイルを見てみましょう.
cat /etc/mongo.cnf 
systemLog:
  destination: file
  logAppend: true
  path: /data/mongodata/log/mongo.log
  logRotate: rename
  timeStampFormat: ctime
  quiet: true 
storage:
  dbPath: /data/mongodata/data
  journal:
    enabled: true
    commitIntervalMs: 100
  directoryPerDB: true
  syncPeriodSecs: 60
  engine: wiredTiger
  wiredTiger:
    engineConfig:
      cacheSizeGB: 20
      journalCompressor: snappy
    indexConfig:
      prefixCompression: true

processManagement:
  fork: true
  pidFilePath: /data/mongodata/data/mongo.pid

net:
  port: 27017
  bindIp: 0.0.0.0
  maxIncomingConnections: 3000
  wireObjectCheck: true
  ipv6: false
  unixDomainSocket:
                  enabled: false 
security:
  keyFile: /data/mongodata/data/keyfile
  authorization: enabled

operationProfiling:
  slowOpThresholdMs: 100
  mode: slowOp 

試行1:プロファイルの変更(失敗)インターネット検索でmongodサービスを開始する際に--authパラメータを指定しなければよいと知り、mongodのサービス起動スクリプトを見るとmongod-f/etc/mongo.cnf方式で起動したのですが、コンフィギュレーションファイル認証に関するコンフィギュレーションを無効にすればいいのかと思い、authorization:enabledをauthorization:disabledに変更してmongodサービスを再起動してみると、やはり認証が必要なことに気づきました
試行2:パラメータ起動サービス(成功)を指定してプロファイルを変更できない場合は、パラメータを指定してmongodサービスを起動するしかありません.mongod--port 27017--dbpath/data/mongodata/data時報エラーを直接実行します.
Detected data files in/data/mongodata/data created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
次に、プロファイルに従ってstorage engineをwiredTigerの関連パラメータとして追加し、mongod--port 27017--dbpath/data/mongodata/data--storageEngine wiredTiger--wiredTigerCacheSizeGB 20--wiredTigerJournalCompressor snapyを再起動し、エラーがあることを発見した:exception in initAndListen:72 Requested option conflicts with current storage engine option for directoryPerDB;Yourequested false but the current server storage is already set to true and cannot be changed,terminating,エラーメッセージにdirectoryperdbのパラメータを加えて起動:mongod--port 27017--dbpath/data/mongodata/data--storageEngine wiredTige-- wiredTigerCacheSizeGB 20--wiredTigerJournalComppressor snapy--wiredTigerIndexPrefixCompression 1 rdb、最後に再起動に成功しました.これでamdinライブラリでrootユーザーに権限を与えることができますヒント:1、具体的にどのパラメータを持ってプロファイルに基づいて調整するか、指定したパラメータとインスタンスの元のパラメータが衝突していると起きられませんが、大丈夫です.mongodbには詳細なログ出力があります.提示に基づいて調整すればいいです.2、mongodサービス起動スクリプトがrootユーザーで起動しない場合は、対応するアカウントに切ってから起動したほうがいいです.そうでなければ、権限が完了した後、スクリプトで再度起動するとPermission deniedのエラーが報告されます.
!!注意:db.dropAllUsers()は高危険な操作であり、決して生産環境で実行しないでください.