用户管理
Mongo Ruby 驱动程序提供了一组在 MongoDB 部署中管理用户的方法。 所有这些方法都是在 Mongo::Auth::User::View
类上定义的,该类定义了在数据库上执行用户相关操作的行为。 您可以通过调用相应Mongo::Database
对象的users
方法来访问数据库的用户视图:
client.database.users
请注意,这将打开客户端已连接数据库的视图。 要与在不同数据库上定义的用户交互,请调用客户端的use
方法并传入要连接的数据库的名称:
client.use(:users).database.users
在此示例中,所有操作都将在users
数据库上执行。
有关用户和用户管理的更多信息,请参阅 MongoDB 的在线文档。
用户和数据库
当客户端连接到服务器时, MongoDB会将客户端将对其执行操作的数据库与身份验证源区分开来,后者是存储客户端身份验证用户的数据库。
在许多情况下,身份验证源与数据库相同。 当它们不同时,必须在身份验证源数据库上完成用户管理操作。 例如,要创建使用 X.509 证书进行身份验证的用户,该证书必须在$external
数据库中定义:
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')
如果用户存在,该方法将返回一个Array
对象,其中包含一个Hash
,而该 包含用户的相关信息,例如用户的 ID、用户名、创建时所在的数据库以及角色。 如果用户不存在,此方法将返回一个空数组。
info
方法还采用可选的Hash
选项作为第二个参数。 目前,唯一支持的选项是:session
,它允许您指定用于此操作的Mongo::Session
对象。
Ruby 驱动程序没有列出数据库中当前存在的所有用户的方法。
提示
另请参阅:
更新用户
要更新数据库中已存在的用户,可以通过以下两种方式之一使用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 驱动程序不提供从数据库中删除所有用户的方法。