本文概述
- Ruby LDAP主体
- Ruby LDAP专有名称
- Ruby LDAP属性
- Ruby LDAP树基
- Ruby LDAP版本
- Ruby LDAP操作
- 安装Net :: LDAP
- 使用Ruby net :: LDAP
- LDAP连接的凭证
- 添加一个新的LDAP条目
- 删除LDAP条目
- 在LDAP中搜索
Ruby LDAP主体LDAP服务器通常用于访问有关人员的信息, 但有时也用于诸如计算机, 打印机和其他资源之类的项目。
Ruby LDAP专有名称在LDAP服务器中, 实体由称为专有名称的全局唯一文本字符串唯一标识。就像DNS主机名一样, DN是树节点字符串的” 展平” 文本表示形式。
【Ruby LDAP开发实战和原理全解】如果你知道一个人或其他实体的DN, 则可以查询启用LDAP的目录以获取有关该实体的信息。否则, 你还可以看到与你提供的一组条件匹配的DN列表。
Ruby LDAP属性在LDAP中, 有关实体的信息存储为一组属性。属性是与零个或多个值关联的文本字符串。大多数启用LDAP的目录都包含标准化的属性范围, 并根据标准值限制其值。
属性的示例是sn。它代表” 姓” 。此属性通常用于存储人的姓氏。大多数目录遵循标准约定, 即实体sn属性将仅具有一个值。
Ruby LDAP树基就像DNS一样, LDAP假定每个目录服务器都包含一组DN的权威属性数据, 这些DN对应于全局目录树的特定子树。创建该子树后, 会将其配置到目录服务器中。你无法在大多数服务器中查询, 因为它们不允许这样做, 除非你指定正确的树基。
Ruby LDAP版本Ruby LDAP版本存根, 讨论v2和v3。
Ruby LDAP操作Ruby LDAP操作是:
- #bind:#bind操作向服务器提供用户的身份验证凭据。它们可以提供不同的身份验证凭据, 但是大多数目录仅要求提供用户名和密码。
- #add:#add操作指定一个新的DN和一组初始的属性值。操作成功后, 具有相应DN和属性的新实体将添加到目录中。
- #delete:#delete操作指定实体DN。操作成功后, 实体及其所有属性将从目录中删除。
- #rename:#rename操作也称为#modify_rdn。在早期的LDAP版本中, 更改实体DN的唯一方法是删除整个实体, 然后使用其他DN重新添加它。但是随着版本3中引入的#rename操作, 你可以更改DN而不丢弃其属性值。
- #search:通过指定树基, 搜索过滤器和属性值列表, 调用#search操作以标识目录。可以使用NOT, AND和OR运算符将多个过滤器结合在一起。
- #modify:#modify操作指定实体DN和属性操作列表。它用于更改存储在目录中的特定实体的属性值。它可以添加或删除属性, 也可以通过添加或删除属性值来更改属性。可以使用三种方法来修改属性值:#add_attribute, #delete_attribute和#replace_attreibute。
要求
Net :: LDAP需要Ruby 2.0.0解释器或更高版本。
要安装Net :: LDAP的RubyGems版本, 请输入以下命令:
gem install net-ldap
使用Ruby net :: LDAPNet :: LDAP功能首先需要该库。
require 'net/ldap'
如果你已安装Gem版本, 则需要以下库。
require 'rubygems'
require 'net/ldap'
LDAP连接的凭证Net :: LDAP连接是一个两步过程。
步骤1:实例化Net:LDAP对象
大多数Net:LDAP操作都是通过实例化Net:LDAP对象开始的。构造函数采用指定LDAP服务器的地址和端口的参数。
句法:
LDAP::Conn.new(host='localhost', port=LDAP_PORT)
步骤1:身份验证(绑定)
在这里, 我们需要指定用户名和密码, 这些密码将用于本次会话的其余部分。
句法:
conn.bind(dn=nil, password=nil, method=LDAP::LDAP_AUTH_SIMPLE)do
....
end
现在, 我们可以在具有适当权限的情况下执行不同的操作, 例如在bind方法的内部进行搜索, 修改或删除。
添加一个新的LDAP条目以下方法将新条目添加到远程LDAP服务器。
add(args) =>
object
步骤1:创建LDAP :: Mod对象
需要将LDAP :: Mod对象传递给conn.add方法以创建条目。
句法:
Mod.new(mod_type, attr, vals)
mod_type:你可以在此处添加一个或多个选项, 例如LDAP_MOD_ADD, LDAP_MOD_DELETE, LDAP_MOD_REPLACE。
attr:这是属性的名称。
vals:它是一个值数组。
步骤2:调用conn.add方法
创建LDAP :: Mod对象后, 我们需要调用conn.add方法。
句法:
conn.add(dn, attrs)
例:
#/usr/bin/ruby -w require 'rubygems'
require 'net/ldap' $HOST ='localhost'
$PORT =LDAP::LDAP_PORT
$SSLPORT = LDAP::LDAPS_PORT conn = LDAP::Conn.new($HOST, $PORT)
conn.bind('cn=root, dc=localhost, dc=localdomain', 'secret') conn.perror("bind")
entry1 = [
LDAP.mod(LDAP::LDAP_MOD_REPLACE, 'sn', ['Steele']), ] begin
conn.modify("cn=Anna williams, dc=localhost, dc=localdomain", entry1)
rescue LDAP::ResultError
conn.perror("modify")
exit
end
conn.perror("modify")
conn.unbind
上面的示例将修改上一个示例中的姓。
删除LDAP条目delete方法将删除一个条目。
句法:
conn.delete(dn)
#/usr/bin/ruby -w require 'rubygems'
require 'net/ldap' $HOST ='localhost'
$PORT =LDAP::LDAP_PORT
$SSLPORT = LDAP::LDAPS_PORT conn = LDAP::Conn.new($HOST, $PORT)
conn.bind('cn=root, dc=localhost, dc=localdomain', 'secret') conn.perror("bind")
begin
conn.delete("cn=Anna Steele, dc=localhost, dc=localdomain")
rescue LDAP::ResultError
conn.perror("delete")
exit
end
conn.perror("delete")
conn.unbind
在LDAP中搜索使用搜索方法执行搜索的方式有3种。
- LDAP_SCORE_BASEM:它将仅搜索基本模式。
- LDAP_SCOPE_ONLEVEL:它将搜索基本模式的所有子级。
- LDAP_SCOPE_SUBTREE:它将搜索整个子树, 包括基本节点。
#/usr/bin/ruby -w require 'rubygems'
require 'net/ldap' $HOST ='localhost'
$PORT =LDAP::LDAP_PORT
$SSLPORT = LDAP::LDAPS_PORT base = 'dc=localhost, dc=localdomain'
scope = LDAP::LDAP_SCOPE_SUBTREE
filter = '(objectclass=java)'
attrs = ['sn', 'cn'] conn = LDAP::Conn.new($HOST, $PORT)
conn.bind('cn=root, dc=localhost, dc=localdomain', 'secret') conn.perror("bind")
begin
conn.search(base, scope, filter, attrs) { |entry|
# print distinguished name
p entry.dn
# print all attribute names
p entry.attrs
# print values of attribute 'sn'
p entry.vals('sn')
# print entry as Hash
p entry.to_hash
}
rescue LDAP::ResultError
conn.perror("search")
exit
end
conn.perror("search")
conn.unbind
在此示例中, 我们将搜索条目的整个子树。
在搜索的最后一个参数中, 你可以指定任何属性。如果传递nil, 则在关系数据库中返回的所有属性均与” SELECT *” 相同。
推荐阅读
- Ruby数组介绍和用法图解
- Ruby多线程编程用法全解
- Ruby模块介绍和用法示例
- Ruby迭代器用法详细图解
- Ruby异常用法示例详细图解
- Ruby文件I/O操作示例详细图解
- Ruby日期和时间处理和用法
- Ruby目录操作示例详细图解
- Ruby代码块或闭包用法详解