文档菜单
文档首页
/ / /
Ruby MongoDB 驱动程序
/

用户管理

本页内容

  • 用户和数据库
  • 创建用户
  • 用户信息
  • 更新用户
  • 删除用户

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角色允许用户在他们创建的数据库中既可读取也可写入。每个角色都可以指定为StringHash。如果您想为不在创建数据库上的数据库的用户授权,您可以在角色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 驱动程序不提供删除数据库中所有用户的方法。

提示

另请参阅

返回

监控