사용자 관리
Mongo Ruby Driver는 MongoDB deployment에서 사용자를 관리하기 위한 여러 메서드를 제공합니다. 이러한 모든 메서드는 데이터베이스에서 사용자 관련 작업을 수행하기 위한 동작을 정의하는 Mongo::Auth::User::View
클래스에서 정의됩니다. 해당 Mongo::Database
객체에서 users
메서드를 호출하여 데이터베이스의 사용자 뷰에 액세스할 수 있습니다.
client.database.users
이렇게 하면 클라이언트가 이미 연결된 데이터베이스의 뷰가 열립니다. 다른 데이터베이스에 정의된 사용자와 상호 작용하려면 클라이언트의 use
메서드를 호출하고 연결하려는 데이터베이스의 이름을 전달합니다.
client.use(:users).database.users
이 예제에서는 모든 작업이 users
데이터베이스에서 수행됩니다.
사용자 및 사용자 관리 에 대한 자세한 내용은 MongoDB의 온라인 설명서를 참조하세요.
사용자 및 데이터베이스
클라이언트 가 서버 에 연결되면 MongoDB 는 클라이언트 가 작업을 수행할 데이터베이스 와 클라이언트 가 인증하는 사용자를 저장하는 데이터베이스 인 인증 소스 를 구분합니다.
대부분의 경우 인증 소스는 데이터베이스와 동일합니다. 서로 다른 경우에는 인증 소스 데이터베이스에서 사용자 관리 작업을 수행해야 합니다. 예를 들어 $external
데이터베이스에 정의된 X.509 인증서로 인증하는 사용자를 만들려면 다음을 수행합니다.
client.use('$external').database.users.create( 'C=US,ST=New York,L=New York City,O=MongoDB,OU=x509,CN=localhost', roles: [{role: 'read', db: 'admin'}], )
사용자 생성을 위한 인증 소스가 지정되지 않았으며, 인증 소스는 인증 프로세스 중에만 사용됩니다. auth_source
가 설정된 User
객체와 함께 #create
를 호출하면 사용자 관리를 위해 인증 소스가 무시됩니다.
사용자 생성
Ruby 드라이버로 새 데이터베이스 사용자를 생성하는 방법에는 두 가지가 있습니다.
새 사용자를 만드는 가장 간단한 방법은 create
메서드를 사용하여 사용자 이름, 비밀번호 및 역할을 전달하는 것입니다.
client.database.users.create( 'alanturing', password: 'enigma', roles: [ Mongo::Auth::Roles::READWRITE ] )
사용자를 만드는 또 다른 방법은 먼저 모든 사용자 정보를 사용하여 Mongo::Auth::User
객체를 만든 다음 해당 객체를 create
메서드에 전달하는 것입니다.
user = Mongo::User.new( user: 'alanturing', password: 'enigma', roles: [ Mongo::Auth::Roles::READWRITE ] ) client.database.users.create(user)
새 사용자의 자격 증명은 client
객체가 현재 연결되어 있는 데이터베이스에 저장됩니다. 이는 사용자의 auth_source
가되며, 나중에 방금 생성한 사용자에 대한 정보를 업데이트, 제거 또는 가져오려면 동일한 데이터베이스에 연결되어 있어야 합니다.
create
메서드는 Hash
의 옵션을 두 번째 인수로 선택적으로 사용합니다. :roles
옵션을 사용하면 새 사용자에게 권한을 부여할 수 있습니다. 예를 들어, Mongo::Auth::Roles::READ_WRITE
역할은 사용자에게 자신이 생성된 데이터베이스에서 읽고 쓸 수 있는 권한을 부여합니다. 각 역할은 String
또는 Hash
로 지정할 수 있습니다. 사용자가 생성된 데이터베이스 이외의 데이터베이스에 대한 권한을 사용자에게 부여하려면 Hash
역할에 해당 데이터베이스 이름을 전달하면 됩니다. machines
데이터베이스에 대한 읽기 및 쓰기 권한이 있는 사용자 alanturing
를 생성하려면 다음 코드를 실행할 수 있습니다.
client.database.users.create( 'alanturing', password: 'enigma', roles: [{ role: Mongo::Auth::Roles::READWRITE, db: 'machines' }] )
MongoDB 의 역할에 대한 자세한 내용은 기본 제공 역할 문서를 참조하세요.
옵션 외에도 메서드는 이 작업에 사용할 객체를 지정할 수 :roles
있는 옵션과 create
쓰기 :session
Mongo::Session
:write_concern
고려 (write concern)를 지정하는 옵션을 지원합니다. 이는 복제본 세트에서 수행되는 경우 이 작업과 관련이 있습니다.
팁
다음도 참조하세요.
사용자 정보
데이터베이스에 이미 존재하는 사용자에 대한 정보를 보려면 info
메서드를 사용합니다.
client.database.users.info('alanturing')
사용자가 있는 경우 이 메서드는 ID, 사용자 이름, 생성된 데이터베이스, 역할 등 사용자에 대한 정보와 함께 Hash
가 포함된 Array
객체를 반환합니다. 사용자가 존재하지 않는 경우 이 메서드는 빈 배열을 반환합니다.
또한 info
메서드는 선택 사항인 Hash
옵션을 두 번째 인수로 사용합니다. 현재 지원되는 유일한 옵션은 :session
이며, 이 옵션을 사용하면 이 작업에 사용할 Mongo::Session
객체를 지정할 수 있습니다.
Ruby Driver에는 현재 데이터베이스에 존재하는 모든 사용자를 나열하는 메서드가 없습니다.
팁
다음도 참조하세요.
사용자 업데이트
데이터베이스에 이미 존재하는 사용자를 업데이트하려면 두 가지 방법 중 하나로 update
메서드를 사용할 수 있습니다. 첫 번째 방법은 업데이트하려는 사용자의 이름과 새 옵션을 지정하는 것입니다.
경고
값이 동일하게 유지되는 옵션을 포함하여 모든 사용자 옵션을 Hash
옵션에 포함해야 합니다. 옵션을 생략하는 것은 해당 옵션을 빈 값으로 설정하는 것과 동일합니다.
client.database.users.update( 'alanturing', roles: [ Mongo::Auth::Roles::READ_WRITE ] password: 'turing-test' )
사용자를 업데이트하는 두 번째 방법은 사용자 이름 대신 업데이트된 Mongo::Auth::User
객체를 update
메서드에 전달하는 것입니다.
user = Mongo::Auth::User.new({ user: 'alanturing', roles: [ Mongo::Auth::Roles::READ_WRITE ], password: 'turing-test' }) client.database.users.update(user)
선택적으로 update
메서드는 Hash
의 옵션을 두 번째 인수로 사용합니다. 이 메서드에 사용할 :session
수 있는 두 가지 옵션은 Mongo::Session
이 작업을 수행할 객체를 지정할 수 있는 및 :write_concern
복제본 세트에서 이 작업을 수행할 경우 쓰기 고려 (write concern)를 설정하는 입니다.
팁
다음도 참조하세요.
사용자 제거
데이터베이스에서 사용자를 제거하려면 remove
메서드를 사용합니다.
client.database.users.remove('alanturing')
옵션 Hash
를 두 번째 인수로 전달할 수 있습니다. remove
메서드에 대해 지원되는 두 가지 옵션은 :session
및 :write_concern
입니다. :session
를 사용하면 이 작업에 사용할 Mongo::Session
객체를 지정할 수 있습니다. :write_concern
는 복제본 세트에 대해 이 명령을 실행하는 경우 쓰기 고려 (write concern)를 지정합니다.
Ruby Driver는 데이터베이스에서 모든 사용자를 제거하는 방법을 제공하지 않습니다.