你好我昨天发了个问题。但是,我试图找出是否可以使用FIM完成以下操作。
我从AD导入用户对象并导出到SQL表。这是SQL表设计。
CREATE TABLE [dbo].[tbl_FGPP_Members](
[MemberObjectGUID] [varbinary](50) NULL,
[MemberDN] [nvarchar](255) NOT NULL,
[MemberObjectType] [nvarchar](10) NOT NULL,
[Member_ADDomain] [nvarchar](16) NULL,
[Member_sAMAccountName] [nvarchar](64) NULL
) ON [PRIMARY]
我将AD用户对象导入mv:person,以下是流规则。
到目前为止,我已经完成了这些工作。 我试图做的是在AD中重命名时(如用户的distinguishedName更改,如果它们被移动或cn值更改),那么我希望FIM删除sql记录并重新创建新的一个具有MemberDN列的新distinguishedname值。
有可能这样做吗?在metaverse配置代码中,我有以下内容:
void IMVSynchronization.Provision (MVEntry mventry)
{
ConnectedMA sqlAnchorRenameUser;
string mvObjectType = null;
switch (mventry.ObjectType)
{
case "SQLAnchorRenameUser":
sqlAnchorRenameUser = mventry.ConnectedMAs["SQL Anchor Rename SQLMA"];
if (sqlAnchorRenameUser.Connectors.Count == 0)
{
createAnchorRenameSQLUser(mventry, sqlAnchorRenameUser);
}
if (sqlAnchorRenameUser.Connectors.Count == 1)
{
updateAnchorRenameSQLUser(mventry, sqlAnchorRenameUser);
}
}}
void createAnchorRenameSQLUser(MVEntry mventry, ConnectedMA sqlAnchorRenameUser)
{
CSEntry csentry;
csentry = sqlAnchorRenameUser.Connectors.StartNewConnector("AnchorRenameUser");
csentry["distinguishedName"].Value = mventry["ADdistinguishedName"].Value;
try
{
csentry.CommitNewConnector();
}
catch (System.Exception Ex)
{
throw new UnexpectedDataException(Ex.Message);
}
}
void updateAnchorRenameSQLUser(MVEntry mventry, ConnectedMA sqlAnchorRenameUser)
{
CSEntry csentry;
ReferenceValue dn;
csentry = sqlAnchorRenameUser.Connectors.ByIndex[0];
dn = sqlAnchorRenameUser.EscapeDNComponent(mventry["ADdistinguishedName"].Value);
// Check to see if the distinguishedName flowing from AD has changed...
if (mventry["ADdistinguishedName"].Value.ToLower() != mventry["isRenamed"].Value.ToLower())
{
// disconnect the old object.
csentry.Deprovision();
//Now provision new connector
createAnchorRenameSQLUser(mventry, sqlAnchorRenameUser);
}
}
但它会引发错误。不工作:(
使用FIM for SQL可以完成这样的事情吗?从我通过互联网阅读的所有内容看来,FIM不允许重命名SQL的锚点。所以人们推荐的另一件事是删除记录并在SQL中重新创建它。这对我有用,但我很难配置FIM来做到这一点。请帮忙。
谢谢。 GT