MongoDBはadminライブラリの下でdbを実行する.dropAllUsers()は、管理権限がない場合にどのように処理するかを示します.
テスト時にaminライブラリの下でdbを実行した.dropAllUsers()操作、そしてすべての管理者ユーザーがなくなり、どんな操作を実行してもError:not authorized on admin to execute command...このような場合の対処法をご紹介します
まず、現在のmongoインスタンスのプロファイルを見てみましょう.
試行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()は高危険な操作であり、決して生産環境で実行しないでください.
まず、現在の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()は高危険な操作であり、決して生産環境で実行しないでください.