| 网站首页 | 新闻中心 | 系统安全 | 网络安全 | 安全技术 | 下载中心 | 
课件制作网.
收藏本站
设为首页
安全365
如何确定属性的数据类型及它是单值还是多值属性?
如何确定属性的数据类型及它是单值还是多值属性?
作者:佚名 文章来源:不详 点击数: 更新时间:2007-1-24 11:09:23
问:

您好,脚本专家!如何查询 Active Directory 架构以了解属性的数据类型及它是单值还是多值属性?

-- MS

答:

您好,MS。您知道,这个问题是那种可以让我们发疯的问题:尽管它看起来是如此容易回答。不过,您多半已经意识到它事实上比我们预想的还要复杂一点儿。

为什么会是这样?是这样,绑定到任何 Active Directory 属性并确定其为单值还是多值相当容易;事实上,每个属性都有其自己的属性 (isSingleValued),通过该属性正可了解该信息。我们还知道有一个属性 (ADsType) 可以让您了解属性的数据类型。大功告成,不是吗?

嗯,遗憾的是,事实并非如此。实际情况是,绑定到架构中的属性时无法获取 ADsType;而是必须从实际对象(如用户帐户)检索属性,然后才可以确定数据类型。这听起来太过复杂:先绑定到架构中的属性以获取一部分信息,然后再绑定到实际对象以获取另一部分信息。至少可以说不是非常讲究。(要知道,我们这些脚本专家可是以优雅自居的。)

因此我们开始在 Active Directory 架构中进行挖掘,寻找会让我们获知对象数据类型的东西。最终,我们偶然发现了一个从未听说过的属性:oMSyntax,它返回分配给属性的语法值。ADsType 与 oMSyntax 之间有一些细微差别,但对脚本编写者来说这些差别其实无关紧要;oMSyntax 返回的信息可能会让您了解想要知道的一切。

至少我们希望如此,因为这就是我们最终采用的路线:

Set objAttribute = GetObject _

    ("LDAP://cn=telephone-Number,cn=schema,cn=configuration,dc=fabrikam,dc=com")



Wscript.Echo "Single-valued: " & objAttribute.isSingleValued



Select Case objAttribute.oMSyntax

    Case 1

        Wscript.Echo "Datatype: " & "Boolean"

    Case 2

        Wscript.Echo "Datatype: " & "Integer or Enumeration"

    Case 4

        Wscript.Echo "Datatype: " & "String (Octet or SID)"

    Case 6

        Wscript.Echo "Datatype: " & "String (Object-Identifier)"

    Case 10

        Wscript.Echo "Datatype: " & "Integer or Enumeration"

    Case 18

        Wscript.Echo "Datatype: " & "String (Numeric)"

    Case 20

        Wscript.Echo "Datatype: " & "Case-Ignore String (Teletex)"

    Case 27

        Wscript.Echo "Datatype: " & "Case-Sensitive String"

    Case 19

        Wscript.Echo "Datatype: " & "String (Printable or IA5)"

    Case 22

        Wscript.Echo "Datatype: " & "String (Printable or IA5)"

    Case 23

        Wscript.Echo "Datatype: " & "String (UTC-Time or Generalized-Time)"

    Case 24

        Wscript.Echo "Datatype: " & "String (UTC-Time or Generalized-Time)"

    Case 64

        Wscript.Echo "Datatype: " & "String (Unicode)"

    Case 65

        Wscript.Echo "Datatype: " & "Large Integer"

    Case 66

        Wscript.Echo "Datatype: " & "String (NT Security Descriptor)"

    Case 127

        Wscript.Echo "Datatype: " & "Object"

    Case Else

        Wscript.Echo "Datatype: " & "Undefined"

End Select

该脚本先是绑定到 Active Directory 中的目标属性(本例中为 telephone-Number):

Set objAttribute = GetObject _

    ("LDAP://cn=telephone-Number,cn=schema,cn=configuration,dc=fabrikam,dc=com")

此处需要注意两点。其一,我们使用该属性 (telephone-Number) 的 CN 而非 LDAP 显示名称 (telephoneNumber)。记住这一点很重要,因为您可能已习惯在 ADSI 脚本中使用 LDAP 显示名称。

注意:如果您不知道特定属性的 CN,请查阅 MSDN 上的 Active Directory 架构参考。一般来说,只需在 LDAP 显示名称的单个词之间插入连字符即可构成 CN:因此,telephoneNumber 会变为 telephone-Number。不过,无法保证在所有情况下均可以这样做,因此请根据需要参阅“架构参考”。

其二,我们绑定到的是架构本身,它位于 Configuration 容器中。这并不困难,只是与大多数 ADSI 脚本不同罢了。因此,这又是在使用此脚本时需要记住的一点。

我们从那里检索并报告 isSingleValued 属性的值:

Wscript.Echo "Single-valued: " & objAttribute.isSingleValued

就像我们说过的:这部分很简单。下面这一部分也确实相当简单:我们只是使用 Select Case 语句来确定该属性的数据类型(基于 oMSyntax 的值)。我们的 Select Case 语句与此类似:

Select Case objAttribute.oMSyntax

在该 Select Case 块中,我们只是寻找 oMSyntax 的可能值,然后回显一条相应的消息。例如,如果 oMSyntax 等于 64(在本例中便是如此),将触发以下几行代码:

Case 64

    Wscript.Echo "Datatype: " & "String (Unicode)"

针对 telephone-Number 属性运行脚本,会返回以下信息:

Single-valued: True

Datatype: String (Unicode)

好了,不过这并不是全部困难;呵呵,开个玩笑。但您是了解那些脚本专家的:即便有什么事情需要让他们付出最微乎其微的努力,都会…。

注意:顺便说一句,我们意识到 Select Case 语句中显示的某些数据类型可能看起来有点愚钝。幸运的是,您可以浏览一下 MSDN 上的语法参考,了解有关 oMSyntax 可能值(及这些值含义)的更多信息。

【转自世纪安全网 http://www.21safe.com】
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
     
     
     
    用户注册邮箱被盗 MSN已
    用户注册邮箱被盗 MSN已
    CSO们如何应对新技术的安
    普通企业如何应对黑客攻
    企业该如何防范由VoIP引
    浅谈IT如何实现企业的应
    黑客与正规企业是如何串
    如何无限制申请Gmail 2.
    企业如何避免人为因素的
    社会工程学:如何利用黑客

    Copyright © 2006-2008 www.anquan365.com 安全365
    建议使用1024*768分辨率及第三方浏览器对本站进行浏览