java - 使用 ldap 凭证并在 postgresql 表中搜索

标签 java spring postgresql ldap

我是 LDAP 的初学者,我想在未来的项目中将其与 PostgreSQL 数据库一起使用。

假设我将使用 LDAP 服务器进行身份验证,因此用户表不会插入到 PostgreSQL 数据库中,在 PostgreSQL 数据库中我将​​有其他必须与用户身份相关的表(这将从 LDAP 检索),因此我必须在每个名为 uid 的表中添加一列,用于存储用户的 uid 值。我的想法正确吗?

最佳答案

你所描述的完全没问题。请注意,您使用哪个属性作为唯一标识符取决于您使用的 LDAP 目录。

我真的只知道 Active Directory,它根本不使用 uid 属性。 AD 有一些强制唯一的属性:

  • distinguishedName:描述对象在目录中的位置。它看起来类似于:CN=Gabriel Luci,OU=Users,DC=domain,DC=com。这对于一般 LDAP 来说很常见,但在其他 LDAP 目录中可能有不同的名称。
  • sAMAccountName:这通常称为“用户名”。它在域中必须是唯一的,但可以更改。
  • userPrincipalName:使用格式username@domain.com。这在 AD 林中必须是唯一的,但可以更改(“林”是指同一组织中有多个 AD 域)
  • objectSid:(通常称为 SID )。它存储为字节数组,但可以转换为类似于 S-1-5-32-##########-########## 的字符串#-##########-#####。这是 Windows 在安全权限中使用的内容来授予帐户对文件等的权限。这是无法更改的。
  • objectGuid:创建帐户时自动分配的 GUID。这是无法更改的。

前三个是人类可读的(它们通常包含该人的名字)。另外两个不是,但它们在对象的生命周期中也保持不变(如果该人更改了姓名,SID 和 GUID 仍将相同)。

您使用哪一个取决于您的要求。 distinguishedName 是唯一的,允许您在需要时直接绑定(bind)到对象(而不是必须搜索 sAMAccountName 来查找帐户)。但如果您想要即使人名发生变化也永远不会改变的东西,那么 objectSidobjectGUID 是最好的。

关于java - 使用 ldap 凭证并在 postgresql 表中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53807113/

相关文章:

java - 检查两个类是否具有相同的父类(super class)

spring - Spring session 范围 Controller 中的 transient 字段

postgresql - Postgres : does updating column value to the same value marks page as dirty?

python - 使用 psycopg 时表格不会改变

javax.mail 不想从我的 Web 应用程序发送邮件,但它从我的控制台应用程序发送邮件

基于 Java 的简单规则引擎,具有后备功能

java - 两个函数中的同步指令是否意味着它们都只能用于一个线程?

java - Spring Boot 中的时间调度

java - Spring 的 bean 验证不起作用

sql - PostgreSQL 中的批量/批量更新/更新插入