用户管理
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
中传递那个数据库名。要创建一个名为alanturing
的用户,并授予其machines
数据库的读取和写入权限,您可以执行以下代码:
client.database.users.create( 'alanturing', password: 'enigma', roles: [{ role: Mongo::Auth::Roles::READWRITE, db: 'machines' }] )
有关MongoDB中角色的更多信息,请参阅内置角色文档。
除了:roles
选项外,create
方法还支持:session
选项,允许您指定用于此操作的Mongo::Session
对象,以及一个:write_concern
选项,该选项指定在副本集上执行此操作时的写入关注点。
提示
另请参阅
用户信息
要查看数据库中已存在的用户信息,请使用info
方法
client.database.users.info('alanturing')
如果用户存在,此方法将返回一个包含有关用户信息的Array
对象,该对象是一个包含用户id、用户名、创建数据库和用户角色的Hash
。如果用户不存在,此方法将返回一个空数组。
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
,它设置在副本集上执行此操作时的写关注。
提示
另请参阅
删除用户
要从数据库中删除用户,请使用 remove
方法
client.database.users.remove('alanturing')
你可以传递一个包含选项的 Hash
作为第二个参数。此 remove
方法的两个支持选项是 :session
和 :write_concern
。其中 :session
允许你指定用于此操作的 Mongo::Session
对象。而 :write_concern
指定了在副本集上执行此命令时的写关注。
Ruby 驱动程序不提供删除数据库中所有用户的方法。