使用 LDAP 进行身份验证和访问控制
了解如何使用 LDAP 验证用户身份并管理他们的数据访问权限。
身份验证和访问控制对于确保合适的人员能够访问他们所需的数据,以及*只有*合适的人员才能访问至关重要。本教程将向您展示如何将 Metabase 连接到 LDAP 服务器进行身份验证,以及如何使用来自该 LDAP 服务器的组信息来控制谁可以查看 Metabase 中的表。我们不会尝试教您 LDAP 本身,但我们只会假设您了解一些基本概念。
设置 LDAP
Metabase 附带的示例数据库有四个表。“People”表包含个人身份信息 (PII),因此我们只希望人力资源部的人员能够查看它。由于我们公司已经使用 LDAP 进行单点登录 (SSO),我们希望从 LDAP 获取有关谁在(以及谁不在)人力资源部的信息。我们已经在 LDAP 中为公司创建了一条记录
dn: dc=metabase,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: Metabase
我们还有 Farrah(在人力资源部)和 Rasmus(不在人力资源部)的记录
dn: uid=farrah,dc=metabase,dc=com
objectClass: person
objectClass: inetOrgPerson
cn: Farrah Zubin
mail: [email protected]
givenName: Farrah
sn: Zubin
uid: farrah
userPassword: ------
dn: uid=rasmus,dc=metabase,dc=com
objectClass: person
objectClass: inetOrgPerson
cn: Rasmus Verdorff
mail: [email protected]
givenName: Rasmus
sn: Verdorff
uid: rasmus
userPassword: ------
Farrah 和 Rasmus 的记录没有指定他们所属的组。相反,我们需要为我们的用户组单独创建“Groups”记录,并在其下方创建一个“groupOfNames”记录,该记录指定 Farrah 和另一位名叫 Luis 的员工属于“Human Resources”组
dn: ou=Groups,dc=metabase,dc=com
objectClass: top
objectClass: organizationalUnit
ou: Groups
dn: cn=Human Resources,ou=Groups,dc=metabase,dc=com
objectClass: top
objectClass: groupOfNames
description: Human Resources
member: uid=farrah,dc=metabase,dc=com
member: uid=luis,dc=metabase,dc=com
如果您正在使用 OpenLDAP 并从头开始设置,您可能需要修改“slapd.conf”配置文件,以包含“cosine.schema”和“inetorgperson.schema”模式文件以及“core.schema”,以便使其工作。
连接到 LDAP
一旦 LDAP 拥有正确的记录,我们就可以使用具有管理员权限的帐户登录 Metabase。我们需要做四件事
创建一个组
首先,我们点击导航侧边栏底部的**齿轮**图标,然后选择**管理设置** > **人员** > **组**,然后选择**创建组**。我们将我们的组命名为“Human Resources”,但我们*不会*在 Metabase 中向其中添加任何人员:我们将依靠 LDAP 来管理成员资格。
身份验证
下一步是告诉 Metabase 它可以通过 LDAP 验证用户身份。为此,我们点击**身份验证**,启用 LDAP,然后填写设置以告知 Metabase 在哪里可以找到服务器。我们正在使用端口 389 上的本地实例,并且我们希望 Metabase 使用“Manager”帐户访问 LDAP。我们所有的人员都在“metabase.com”下,我们可以使用默认搜索过滤器(按 ID 或电子邮件地址查找人员)找到他们。
此时,人们可以通过 LDAP 登录。为了测试这一点,我们可以打开一个匿名浏览器窗口并以 Rasmus 或 Farrah 的身份登录。他们都还看不到“People”表,因为我们尚未告诉 Metabase 从 LDAP 获取组信息。
权限
接下来,我们转到**管理设置** > **权限** > **数据**,并禁用对“People”表的一般访问权限,以便默认情况下人们无法看到该表。然后,我们授予“Human Resources”组访问权限。(这篇关于沙盒的文章 提供了有关在 Metabase 中管理表访问权限的更多信息。)
组管理
让我们回到**管理设置**中的 LDAP 配置页面。在底部,我们告诉 Metabase 将组员资格与来自 LDAP 的信息同步,并且它可以在“metabase.com”域下找到组。
最后一步是告诉 Metabase 其组和 LDAP 的组如何关联。如果我们点击**编辑映射**和**创建映射**,我们可以填写标识 LDAP 中组的 distinguished name——在本例中,是我们之前创建的 Human Resources 组的 DN。然后我们点击**添加**,选择 LDAP 组对应的 Metabase 组,并保存我们的更改。
这有很多设置。为了测试它,让我们打开一个匿名窗口并以 Rasmus 的身份登录。果然,Rasmus 仍然看不到“People”表,因为他不是 Human Resources 组的成员。但是,如果我们关闭该窗口,打开另一个窗口并以 Farrah 的身份登录,我们*可以*看到“People”表。如果我们回到管理员窗口并查看“People”,我们可以看到一些图标,这些图标向我们展示了哪些帐户来自 LDAP 而不是由 Metabase 管理。