📅  最后修改于: 2021-01-08 13:23:12             🧑  作者: Mango
Net :: LDAP for Ruby也写为net :: ldap。它代表轻型目录访问协议。它是用于访问目录服务器的Internet标准协议。它的基本搜索单位是实体,它对应于人或其他特定领域的对象。支持LDAP协议的目录通常存储有关许多实体的信息。
LDAP服务器通常用于访问有关人员的信息,但有时也用于诸如计算机,打印机和其他资源之类的项目。
在LDAP服务器中,实体由称为专有名称的全局唯一文本字符串唯一标识。就像DNS主机名一样,DN是字符串树节点的“扁平化”文本表示形式。
如果您知道某个人或其他实体的DN,则可以查询启用LDAP的目录以获取有关该实体的信息。否则,您还可以看到与您提供的一组条件匹配的DN列表。
在LDAP中,有关实体的信息存储为一组属性。属性是与零个或多个值关联的文本字符串。大多数启用LDAP的目录都包含标准化的属性范围,并根据标准值限制其值。
属性的示例是sn 。它代表“姓”。此属性通常用于存储人的姓氏。大多数目录遵循标准约定,即实体sn属性将仅具有一个值。
就像DNS一样,LDAP假定每个目录服务器都包含一组DN的权威属性数据,这些DN对应于全局目录树的特定子树。创建该子树后,会将其配置到目录服务器中。您无法查询大多数服务器,因为它们不允许这样做,除非您指定正确的树基。
Ruby LDAP版本存根,讨论v2和v3。
Ruby LDAP操作是:
net :: LDAP是一个纯Ruby库。它不需要任何外部库。 Net :: LDAP的RubyGems版本可以从常规来源安装。
要求
Net :: LDAP需要Ruby 2.0.0解释器或更高版本。
要安装Net :: LDAP的RubyGems版本,请编写以下命令:
gem install net-ldap
Net :: LDAP功能首先需要该库。
require 'net/ldap'
如果您已安装Gem版本,则需要以下库。
require 'rubygems'
require 'net/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服务器。
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
上面的示例将修改上一个示例中的姓。
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
使用搜索方法执行搜索的方式有3种。
例:
#/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 *”相同。