Docs 菜单
Docs 主页
/ / /
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_sourceUser对象调用#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中传递该数据库名称。 要创建有权读取和写入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::Userupdate更新用户的第二种方法是将更新后的对象传递给方法,而不是用户名。

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 驱动程序不提供从数据库中删除所有用户的方法。

提示

另请参阅:

后退

监控

来年

处理数据