itsource

MongoDB "root" 사용자

mycopycode 2023. 3. 28. 21:45
반응형

MongoDB "root" 사용자

MongoDB용 "root" 사용자 같은 슈퍼 UNIX가 있습니까?http://docs.mongodb.org/manual/reference/user-privileges/을 보고 여러 가지 조합을 시도했지만 모두 부족한 것 같습니다.분명히 거기에 열거된 모든 역할보다 더 중요한 역할이 있다.

최고의 슈퍼 유저 역할은 루트가 됩니다.구문은 다음과 같습니다.

use admin

db.createUser(
{
    user: "root",
    pwd: "password",
    roles: [ "root" ]
})

자세한 내용은 기본 제공 역할을 참조하십시오.

개봉 후 MongoDb에 인증이 없는 동안 특정 사용자에 대한 "임의" 역할을 사용하여 루트/슈퍼유저와 동등한 기능을 생성할 수 있습니다.admin데이터베이스입니다.

다음과 같은 경우:

use admin
db.addUser( { user: "<username>",
          pwd: "<password>",
          roles: [ "userAdminAnyDatabase",
                   "dbAdminAnyDatabase",
                   "readWriteAnyDatabase"

] } )

2.6+ 갱신

2.6에 새로운 루트 사용자가 추가되었지만 다음과 같은 몇 가지 제한이 있기 때문에 사용자의 요구를 충족하지 못할 수 있습니다.

readWriteAnyDatabase, dbAdminAnyDatabase, userAdminAnyDatabase 및 clusterAdmin 역할의 작업 및 모든 리소스에 대한 액세스를 제공합니다.

root에는 시스템에서 시작하는 컬렉션에 대한 액세스는 포함되지 않습니다.프레픽스

3.0+용 업데이트

사용하다db.createUser~하듯이db.addUser삭제되었습니다.

3.0.7+ 업데이트

root에는 에서 설명한 제한이 없습니다.

루트에 시스템에서 권한 확인 작업이 있습니다.수집.이전에는 루트에 시스템에서 시작하는 컬렉션에 대한 액세스는 포함되어 있지 않았습니다.시스템 이외의 프레픽스.인덱스와 system.namespaces를 지정합니다.

Mongodb 사용자 관리:

역할 목록:

read
readWrite
dbAdmin
userAdmin
clusterAdmin
readAnyDatabase
readWriteAnyDatabase
userAdminAnyDatabase
dbAdminAnyDatabase

사용자 생성:

db.createUser(user, writeConcern)

db.createUser({ user: "user",
  pwd: "pass",
  roles: [
    { role: "read", db: "database" } 
  ]
})

사용자 업데이트:

db.updateUser("user",{
  roles: [
    { role: "readWrite", db: "database" } 
  ]
})

사용자 삭제:

db.removeUser("user")

또는

db.dropUser("user")

사용자 표시:

db.getUsers();

상세 정보: https://docs.mongodb.com/manual/reference/security/ #읽기

Superuser Roles가 있습니다.루트는 빌트인 역할로 사용자의 요구를 충족시킬 수 있습니다.

다음과 같은 답변이 많았습니다.다음 명령을 사용합니다.

use admin

관리 데이터베이스로 전환됩니다.적어도 Mongo v4.0.6 에서는, 관리 데이타베이스의 컨텍스트에서 유저를 작성하면, 다음의 유저가 작성됩니다."_id" : "admin.administrator":

> use admin
> db.getUsers()
[ ]
> db.createUser({ user: 'administrator', pwd: 'changeme', roles: [ { role: 'root', db: 'admin' }  ] })
> db.getUsers()
[
    {
        "_id" : "admin.administrator",
        "user" : "administrator",
        "db" : "admin",
        "roles" : [
            {
                "role" : "root",
                "db" : "admin"
            }
        ],
        "mechanisms" : [
            "SCRAM-SHA-1",
            "SCRAM-SHA-256"
        ]
    }
]

강조합니다"admin.administrator"admin과는 다른 데이터베이스를 가진 Mongoid(mongodb ruby adapter) 어플리케이션이 있으며 URI를 사용하여 mongoid.yml 설정에서 데이터베이스를 참조합니다.

development:
  clients:
    default:
      uri: <%= ENV['MONGODB_URI'] %>
      options:
        connect_timeout: 15
        retry_writes: false

이는 다음 환경변수를 참조합니다.

export MONGODB_URI='mongodb://administrator:changeme@127.0.0.1/mysite_development?retryWrites=true&w=majority'

데이터베이스가 mysite_development이지 admin이것에 주의해 주세요.응용 프로그램을 실행하려고 하면 "User Administrator(mechanism: scram256) is not authorized to access mysite_development"라는 오류가 나타납니다.

Mongo 쉘로 돌아가 사용자를 삭제하고 지정된 데이터베이스로 전환하여 사용자를 다시 만듭니다.

$ mongo
> db.dropUser('administrator')
> db.getUsers()
[]
> use mysite_development
> db.createUser({ user: 'administrator', pwd: 'changeme', roles: [ { role: 'root', db: 'admin' }  ] })
> db.getUsers()
[
    {
        "_id" : "mysite_development.administrator",
        "user" : "administrator",
        "db" : "mysite_development",
        "roles" : [
            {
                "role" : "root",
                "db" : "admin"
            }
        ],
        "mechanisms" : [
            "SCRAM-SHA-1",
            "SCRAM-SHA-256"
        ]
    }
]

응용 프로그램이 의존하는 특정 데이터베이스를 참조하기 위해 변경된 _id 및 db:

"_id" : "mysite_development.administrator",
"db" : "mysite_development",

변경 후 오류가 해소되어 어플리케이션 내 MongoDB에 정상적으로 접속할 수 있었습니다.

추가 주의:

위의 예에서는 사용자를 삭제하고 올바른 데이터베이스 컨텍스트에서 사용자를 다시 만들었습니다.올바른 데이터베이스 컨텍스트에서 사용자를 이미 작성했지만 잘못된 역할을 지정한 경우 사용자에게 mongodb 삽입 역할을 할당할 수 있습니다.

db.grantRolesToUser('administrator', [{ role: 'root', db: 'admin' }])

요.db.updateUser명령어, albiet는 일반적으로 사용자 비밀번호 갱신에 사용됩니다.

시스템 전체의 인증 데이터에만 사용되는 단일 DB를 사용하는 것이 일반적입니다.connection uri 에서는, 접속하고 있는 db 를 지정하는 것 외에, 인증에 사용하는 db 를 지정할 수도 있습니다.

"mongodb://usreName:passwordthatsN0tEasy2Gue55@mongodb.myDmoain.com:27017/enduserdb?authSource=myAuthdb"

이렇게 하면 해당 단일 인증 데이터베이스에 모든 사용자 자격 증명과 역할을 생성할 수 있습니다.예를 들어, "root@thedbin question" 역할을 부여하고 모든 슈퍼 사용자를 DB에서 종료하려면 다음과 같이 하십시오.

use admin
db.runCommand({ 
"updateUser" : "anAdminUser", 
"customData" : {

}, 
"roles" : [
    {
        "role" : "root", 
        "db" : "thedbinquestion"
    } ] });

이제 콘솔에서 내장 역할을 atlas admin으로 변경할 수 있습니다.이것으로 문제가 해결되었습니다.

Atlas 관리자 위치

userAdmin은 사실상 특정 데이터베이스의 슈퍼유저 역할입니다.userAdmin을 가진 사용자는 자신에게 모든 권한을 부여할 수 있습니다., userAdmin은 사용자 관리 이외의 권한에 대해 사용자에게 명시적으로 허가하지 않습니다.

언급URL : https://stackoverflow.com/questions/20117104/mongodb-root-user

반응형