我已经用c#开发了一个小脚本,用于查询SQL Server并根据某些条件将计算机对象添加到某些Active Directory组中。当我使用具有必要权限(从Active Directory组添加/删除对象)的帐户运行脚本时,脚本运行良好。
当我尝试安排作业,因此它使用“ SYSTEM”帐户从服务器自动运行时,它不起作用,我收到“访问被拒绝”的信息,我已更新绑定帐户,以使用有效帐户的凭据但我仍然有同样的问题。
> Error Message:
> *2020-01-13 18:32:30,984 [1] ERROR TestAD.clsActiveDirectory - Error occured when trying to add computerobject abcdefg-a10 to group. Error
> message: Access is denied.*
使其生效的唯一方法是使用实际帐户作为运行计划任务的帐户,但是问题是我们的公司政策不允许我们存储密码,因此我需要将该帐户登录到运行此脚本。
代码段
de.Username = "testing@test.com";
de.Password = "xxxxxxxxx";
de.AuthenticationType = AuthenticationTypes.Secure;
de.AuthenticationType = AuthenticationTypes.Sealing;
de.AuthenticationType = AuthenticationTypes.Delegation;
de.Properties.Count.ToString();
ds.SearchRoot = de;
ds.Filter = "(&(objectClass=computer)(name=" + _myComputerName.ToString() + `"))";`
ds.PropertiesToLoad.Add("memberof");
ds.PropertiesToLoad.Add("distinguishedname");
ds.SizeLimit = 10;
ds.PageSize = 0;
ds.SearchScope = System.DirectoryServices.SearchScope.Subtree;
我尝试添加一些“ AuthenticationTypes”以查看是否有所不同,但仍然相同
任何帮助将不胜感激
谢谢。
答案 0 :(得分:0)
您是否尝试过使用SQL Server代理?我的公司使用它们而不是预定任务。它们可能不太优雅,但可能是您情况的一个很好的选择。
如果您需要更多详细信息,请告诉我。
答案 1 :(得分:0)
我发现了问题,最后很简单。 Active Directory流程如下 -使用我的特殊帐户绑定到活动目录,并搜索计算机对象和 验证是否需要将其添加到Active Directory组中 -如果需要添加,请第二次绑定到Active Directory组并添加计算机 目的。 ==>使用计划任务或在“ SYSTEM”上下文中运行时,此片段失败
失败原因:第二次绑定时,我没有指定任何凭据,因此 如果我运行具有足够权限的帐户的脚本,则使用默认凭据(SYSTEM) 将计算机对象添加到组的权限。
我更新了第二个绑定的代码以包含绑定凭证,现在它可以作为 预期的。
我希望这对必须解决类似问题的其他人会有所帮助。
旧代码
try
{
DirectoryEntry ent = new DirectoryEntry(bindString);
ent.Properties["member"].Add(newMember);
ent.CommitChanges();
}
新代码
try
{
DirectoryEntry ent = new DirectoryEntry(bindString);
ent.AuthenticationType = AuthenticationTypes.Secure;
ent.AuthenticationType = AuthenticationTypes.Sealing;
ent.AuthenticationType = AuthenticationTypes.Delegation;
ent.Username = "test123@test.com";
ent.Password = "test123";
ent.Properties["member"].Add(newMember);
ent.CommitChanges();
}