LDAP操作AD的问题
--------------------编程问答-------------------- 我自己没试过啊:你在注册表里搜这个新建的计算机,然后直接操作注册表添加行不行? --------------------编程问答-------------------- 通过注册表?我是想通过java程序去新建并授权用户,客户提供了一个asp版的代码,不过看起来都好像没什么关系,而且也不是根据ldap来操作--------------------编程问答-------------------- 通过反编译C#的类库发现,它里面权限控制是通过一个叫ACL(Access Control List)的东西(访问控制列表)
/* ***************************************************************
* Version : 2.0
* Copyright : XingE Software Co.Ltd,ShangHai,China
* Created on : 2004-10-14
* Author : JinYuanqin
* Email :
* Comment : 操作新建计算机的页面
*
* Modification records:
*
* ***************************************************************/
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using XingE.MemberShip.Invoke;
using XingE.MemberShip.BizEntity.Ds;
using XingE.MemberShip.BizEntity;
using System.Collections;
public partial class ComputerAccountAdd_aspx:System.Web.UI.Page , IPageTransferParm
{
void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
IniSelectPosition();//初始化从属部门
}
}
public void IniSelectPosition()
{
try
{
string ouname, ouguid;
WebHelper.IniSelectPosition(out ouname, out ouguid);
ComputerAccount1.OUPositionName = ouname;
ComputerAccount1.OUPositionGuid = ouguid;
}
catch (System.Exception ex)
{
WebHelper.HandlePageException(this.Page, ex);
}
}
protected void BtnOk_ServerClick(object sender, EventArgs e)
{
NewObj();
}
void NewObj()
{
System.Diagnostics.Trace.WriteLine(System.DateTime.Now.ToLocalTime() + @" [ComputerAccountAdd.aspx.cs: NewObj]");
MemberShip mb = new MemberShip(WebHelper.GetToken(Context.Request));
System.Guid TransGuid=Guid.Empty;
try
{
XingE.MemberShip.BizEntity.Ds.Computer obj = new Computer();
XingE.MemberShip.BizEntity.Ds.Computer.ComputerRow dr = obj._Computer.NewComputerRow();
dr.Guid = Guid.NewGuid().ToString();
dr.OpAd = EffectAD1.GetOpAD();
dr.Name = ComputerAccount1.ComputerName;
dr.Parent = ComputerAccount1.OUPositionGuid;
//dr.ObjTypeID = (int)DSObjType.Computer;
dr.DomainName = (string)Application["Domain"];
dr.Description = ComputerAccount1.Description;
//dr.GuidPath = ComputerAccount1.OUPositionGuid; // WebHelper.ReplaceSlashWhithBlank(drOu.GuidPath);
//dr.NamePath = ComputerAccount1.OUPositionName;//WebHelper.ReplaceSlashWhithBlank(LocationOUPath);
obj._Computer.AddComputerRow(dr);
//-----------------------步骤2加入用户或组
XingE.MemberShip.BizEntity.Ds.Computer.ComputerMemberRow drCM = obj.ComputerMember.NewComputerMemberRow();
drCM.Guid = dr.Guid ;
drCM.AdminGuid = ComputerAccount1.UserOrGroupGuid;
drCM.AdminName = ComputerAccount1.UserOrGroupName;
drCM.Account = dr.Name;//1.Computer的ComputerMember表中增加了Account字段冗余将来可能用到的计算机帐号,可以暂时与Computer表中的name一样
obj.ComputerMember.AddComputerMemberRow(drCM);
//-----------------------步骤2加入用户或组
TransGuid = mb.TransBegin(XingE.MemberShip.BizEntity.LogWebOpID.WebAddComputerAccount, dr.Name);
//-----------s事务 //新建
//----步骤1加入计算机账号
string strObjNew = mb.NewComputer(ComputerAccount1.OUPositionGuid, obj); //新建 计算机帐号
//----步骤1
#region old 步骤2加入用户或组
////----步骤2加入用户或组
//ArrayList members = new ArrayList();
//string[] arrMembers = ComputerAccount1.UserOrGroupGuid.Split(new char[] { PageCommon.SeparatorChar });
//if (ComputerAccount1.UserOrGroupGuid != "")//如果用户或组不为空//下列用户或组可以将计算机加入到域
//{
// foreach (string arrMember in arrMembers)
// {
// members.Add(arrMember);
// }
//}
//if (members.Count > 0)//如果用户或组不为空
//{
// mb.AddComputerMembers(strObjNew, members, dr.OpAd);//加入用户或组
//}
////----步骤2
#endregion
//-----------e事务
mb.TransCommit(TransGuid);
WebHelper.GotoResultPage("新建计算机帐号已经成功,", false);// 转向成功页面
}
catch (System.Exception ex)
{
mb.TransRollBack(TransGuid);
WebHelper.HandlePageException(this, ex);
}
}
protected void BtnShowSummary_Click(object sender, EventArgs e)
{
if (Page.IsValid)//自定义校验
{
if (EffectAD1.EffectAD)
{
SumIsOPAD.InnerText = "不操作AD";
}
else
{
SumIsOPAD.InnerText = "操作AD";
}
SumComputerName.InnerText = ComputerAccount1.ComputerName;
SumPosition.InnerText = ComputerAccount1.OUPositionName;
SumUserOrGroupField.InnerText = ComputerAccount1.UserOrGroupName;
SumDescription.InnerText = ComputerAccount1.Description;
//----------------
if (BtnShowSummary.CommandArgument == "0")
{
BtnShowSummary.CommandArgument = "1";//可以隐藏
divResult.Style.Add("display", "inline"); //显示汇总信息
divShowPage.Style.Add("display", "none");
//--------底部button
panelButtonShowSummary.Visible = true;
panelButtonShowPaging.Visible = false;
lblFunctionCaption.Text = "计算机帐号操作->汇总信息";
}
else
{
BtnShowSummary.CommandArgument = "0";//可以隐藏
divResult.Style.Add("display", "none"); //显示汇总信息
divShowPage.Style.Add("display", "inline");
//--------底部button
panelButtonShowSummary.Visible = false;
panelButtonShowPaging.Visible = true;
lblFunctionCaption.Text = "计算机帐号操作->新建";
}
}
}
#region IPageTransferParm Members
public string objGuid
{
get { return WUC_header1.objGuid; }
}
public string objName
{
get
{ return WUC_header1.objName; }
}
#endregion
}
openLDAP好像是有专门的指令可以操作:
http://www.openldap.org/doc/admin24/access-control.html
但是java里面要如何实现?
--------------------编程问答-------------------- 你好,我是iteye你留言的那位。我之前做的那个是idm tds ldap。
由于查找确定是没有控制acl的接口,只能通过ldap web控制页面进行权限控制,或者--
这个就是我们确定唯一的一个解决方案:通过形成符合产品的权限文件,然后再用程序调用命令执行文件从而控制权限
ad的话有没有现成的接口就不知道了,不过它肯定是有命令执行一个权限文件xxx.ldif的
补充:Java , Java相关