prosource

MongoError: 사용자는 작업을 수행할 수 없습니다.

probook 2023. 5. 18. 21:08
반응형

MongoError: 사용자는 작업을 수행할 수 없습니다.

저는 MongoDB Atlas를 데이터베이스로 사용하고 있습니다.

루프백을 api로 하여 angular4를 사용하고 있습니다.

응용프로그램이 데이터베이스에 연결됩니다.그러나 데이터를 가져오려고 하면 다음 오류가 발생합니다(dbname을 dbname으로 변경했습니다).

MongoError: user is not allowed to do action [find] on [dbname.$cmd]

AWS에서 로컬 mongodb 클라이언트 또는 mongodb 인스턴스를 사용하면 쿼리가 정상적으로 작동합니다.그런데 아틀라스를 사용할 때 이런 오류가 발생합니다.

에서 Atlas 클터다선택니다합을음서에를 선택합니다.Security,에 가다Database Access을 클릭합니다.Edit에서 데터베이권한서선택에사를 합니다.Built-in role 드롭다운 에서 드다운아선택니다합서에래를 선택합니다.Read and write to any database를 보려면.결과를 보려면 다시 시도하거나 연결을 새로 고치십시오.

으악! 고치는데 너무 많은 시간이 걸렸습니다!같은 문제를 가지고 계신 분들을 위해서요.둘 다 해야 했습니다.

연결 문자열을 처리할 때 데이터베이스 이름을 "테스트"에서 자신의 데이터베이스로 변경하지 않은 것이 문제였습니다.마이어 2017년 12월 8일 12시 43분

2>

"mongodb://:@cluster0-shard-00-00- rb899.mongodb.net:27017,cluster0-shard-00-01- rb899.mongodb.net:27017,cluster0-shard-00-02- rb899.mongodb.net:27017/ ?ssl=true&replicaSet=Cluster0-shard- 0&authSource=admin"

또한 Atlas에서 이전 드라이버 2.2.12 이상을 지정해야 합니다.이런 일들을 한 후에 마침내 효과가 있었습니다.

모두 감사합니다!

저도 같은 오류가 있었습니다.

  • MongoDB NodeJS 드라이버의 v.3.0을 사용하는 경우 MongoClient.connect 변경 사항에 대한 MikaS 게시물을 참조하십시오.https://stackoverflow.com/a/47662979/8775223

  • 응용 프로그램을 Atlas MongoDB에 연결하려면 3.4 드라이버를 사용합니다.

    mongodb://<USERNAME>:<PASSWORD>@cluster0-shard-00-00-
    rb899.mongodb.net:27017,cluster0-shard-00-01-
    rb899.mongodb.net:27017,cluster0-shard-00-02-
    rb899.mongodb.net:27017/<DBNAME>?ssl=true&replicaSet=Cluster0-shard-
    0&authSource=admin
    

https://docs.mlab.com/troubleshooting-atlas-connection-issues/ #getlog-error

누구나 받을 수 있는user is not allowed to do action [getLog] on [admin.]으로 류니다입을 . 사용자에게 명시적으로 제공해야 했습니다.clusterMonitor

데이터베이스 액세스 아래의 MongoDB 역할을 "AtlasAdmin"으로 변경하여 작동했습니다.

여기에 이미지 설명 입력

Atlas 클러스터에서 왼쪽 사이드바의 보안 아래에 있는 데이터베이스 액세스를 클릭합니다.

Edit(편집) 버튼을 클릭한 다음 사용자에게 역할 atlasAdmin@admin을 추가합니다.

여기에 이미지 설명 입력 여기에 이미지 설명 입력

Atlas ->Security ->Database Access 탭으로 이동하여 Atlas 관리자 역할을 가진 새 사용자를 추가한 다음 다음 cmd로 연결할 수 있습니다.

mongo "mongodb+srv://cluster0.0q8wi.mongodb.net/admin" --username <username> -p <password>

Atlas 웹 사이트로 이동

Database Access > Database Users > Edit(사용자) > 내장역할 >> Atlas admin으로 변경

Node.js에 v3.0 mongodb를 사용하는 경우 다음과 같은 새 API와 드라이버 3.4 이하에 대한 MongoDB Atlas URI 연결 문자열을 사용해야 합니다.

MongoClient.connect(uri, function(err, client) {
  console.log("Connected successfully to server");

  const db = client.db(dbName);
});

데이터베이스 액세스->편집->기본 제공 역할->atlas_admin 업데이트 사용자 선택

Mongo CLI에서 DB로 연결하는 데 사용 중인 IP를 화이트리스트에 추가해야 합니다.프로젝트 네트워크 액세스 탭에서 이 작업을 수행합니다.

테이블에서 보기를 수정하는 동안 다음 오류가 발생하면 "atlas admin" 권한을 부여해야 합니다.

user is not allowed to do action [collMod] on [<database>.accounts-list]

표준 readWriteAnyDatabase@admin이 작동하지 않았습니다.사용자에게 "Atlas admin" 권한을 부여합니다.

오류가 발생하면 "사용자는 작업을 수행할 수 없습니다 [insert].mongoDb 계정에서 Database Access로 이동한 다음 액세스를 시도하는 사용자의 편집 버튼을 클릭하고 특수 권한으로 이동한 다음 "Add special Previledge"를 클릭하여 역할 옵션을 선택하고 "ReadWriteAnyDatabase"로 역할을 변경합니다.

데이터베이스 사용자를 만들거나 수정하려면 cloud.mongodb.com 에서 Database Access 탭으로 이동하여 사용자가 readWriteAnyDatabase@admin 권한을 가지고 있는지 확인하여 MongoDB 데이터베이스의 데이터를 읽거나 쓸 수 있도록 하십시오.

확인해 보세요. https://www.mongodb.com/community/forums/t/mongoservererror-user-is-not-allowed-to-do-action/166721 .

컬렉션 개체를 직접 가져와 검색(및 기타 작업)을 실행하여 이 문제를 해결했습니다.

try {
  mongoose.connect(MONGODB_URI, options)
  const db = mongoose.connection
  db.on("error", console.error.bind(console, "connection error:"))
  db.once("open", async () => {
    console.log("we're connected!")

    const collectionObj = db.collection(ATLAS_COLLECTION)

    const result = await collectionObj.find({}).toArray()
    console.log(result)
}) } catch (error) { console.log({ error }) }

저도 같은 문제가 있었고 어떻게 고쳤는지 : 올바른 MongoDB URL을 추가해야 합니다 : . 클러스터 - 연결로 이동합니다.'응용프로그램 연결'을 선택합니다. URL을 복사합니다(MongoDB 비밀번호를 입력하는 것을 잊지 마십시오).

MongoDB Atlas(데이터베이스 액세스)에서 사용자 역할을 "atlasAdmin"으로 변경하기만 하면 됩니다.

자격 증명을 올바르게 로드하지 않은 경우에도 이 문제가 발생합니다. 로드되지 않는 스크립트를 시작했을 수 있습니다..env variables자격 증명을 저장한 경우(예: nodemon.json)

MongoDB를 사용하여 데이터를 추가하려고 해도 동일한 오류가 발생했습니다.마침내 해결책을 얻었습니다.연결 문자열은 프로젝트 이름을 추가해야 합니다.

mongodb+srv://<account>:<password>@cluster0.pm9okyd.mongodb.net/<projectname>?retryWrites=true&w=majority

여기에 이미지 설명 입력

프로젝트 이름은 이 그림에서 볼 수 있습니다.

문제는 데이터베이스 액세스에서 사용자가 일부 제한을 받을 수 있다는 것입니다. ------솔루션: 데이터베이스 액세스에서 사용자를 생성할 필요가 없습니다.클러스터 0에 연결할 때 생성할 수 있습니다.--------

데이터베이스 액세스로 이동사용자 및 기본 제공 역할 편집 Atlas Admin을 선택하고 변경 내용을 저장하면 작동합니다.

authMechanism: 'SCRAM'을 추가하여 문제를 해결했습니다.

type: 'mongodb',
  url: 'mongodb+srv://<account>:<password>@cluster0.pm9okyd.mongodb.net/<projectname>?retryWrites=true&w=majority',
  authSource: 'admin',
  useNewUrlParser: true,
  synchronize: true,
  logging: true,
  useUnifiedTopology: true,
  entities: ['dist/**/*.entity{.ts,.js}'],
  loggerLevel: 'debug',
  authMechanism: 'SCRAM',

데이터베이스 사용자를 만들거나 수정하려면 cloud.mongodb.com 에서 Database Access(데이터베이스 액세스) 탭으로 이동하여 사용자에게 다음 정보가 있는지 확인하십시오.readWriteAnyDatabase@admin다음을 사용하여 MongoDB 데이터베이스의 데이터를 읽거나 쓸 수 있는 액세스 권한:

일반적으로 이 오류는 데이터베이스의 현재 사용자가 적합한 자격 증명을 가지고 있지 않기 때문에 발생합니다.

  1. 이동Database Access보다 아래에Security부분.
  2. 클릭edit추가한 사용자입니다.여기에 이미지 설명 입력
  3. 에서Built-in Role섹션, 선택Atlas admin) 및 를 누릅니다.Update User단추를 채우다여기에 이미지 설명 입력

때때로 API 및 MongoDB 나침반, 셸(클라이언트)은 데이터베이스 삭제를 허용하지 않습니다.그런 식으로 MongoDB의 데이터베이스를 삭제합니다.

  1. MongoDB 로그인
  2. 탐색 메뉴의 왼쪽에 있는 데이터베이스 메뉴로 이동합니다.
  3. Atlas 클러스터에서 컬렉션 찾아보기 클릭
  4. 원하는 데이터베이스를 삭제합니다.

언급URL : https://stackoverflow.com/questions/46649390/mongoerror-user-is-not-allowed-to-do-action

반응형