<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>missmiis &#187; Groups</title>
	<atom:link href="http://www.wapshere.com/missmiis/category/ilm/groups/feed" rel="self" type="application/rss+xml" />
	<link>http://www.wapshere.com/missmiis</link>
	<description>Adventures in identity management</description>
	<lastBuildDate>Sun, 05 Sep 2010 06:41:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Creating Groups in the FIM Portal using powershell</title>
		<link>http://www.wapshere.com/missmiis/creating-groups-in-the-fim-portal-using-powershell</link>
		<comments>http://www.wapshere.com/missmiis/creating-groups-in-the-fim-portal-using-powershell#comments</comments>
		<pubDate>Sun, 28 Feb 2010 13:56:36 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[FIM 2010]]></category>
		<category><![CDATA[Groups]]></category>
		<category><![CDATA[powershell]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=703</guid>
		<description><![CDATA[I&#8217;ve been having a bit of a play with the powershell interface to the FIM Portal. I wanted to pre-populate a demo environment with an interesting set of criteria-based Securoity and Distribution groups, but they get a bit tedious to create by hand, and I wanted to see if powershell was the answer. I&#8217;m pretty [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been having a bit of a play with the powershell interface to the FIM Portal. I wanted to pre-populate a demo environment with an interesting set of criteria-based Securoity and Distribution groups, but they get a bit tedious to create by hand, and I wanted to see if powershell was the answer.</p>
<p>I&#8217;m pretty pleased with the results. Both of the following scripts use a CSV to bulk-create the groups:</p>
<p><a href="http://www.wapshere.com/missmiis/create-fimsecgroups-ps1">Create Security Groups based on Filters</a></p>
<p><a href="http://www.wapshere.com/missmiis/create-fimdistlists-ps1">Create Distribution Lists for Managers which contain all the people they manage</a></p>
<p><span id="more-703"></span></p>
<p>The scripts run pretty slowly, but it&#8217;s still quicker than creating the groups by hand.</p>
<p>If you want to have a go at a script like this (and you can&#8217;t find an example in the ever-growing <a href="http://social.technet.microsoft.com/Forums/en-US/ilm2/thread/807617bc-b560-4cbe-a137-b9f338bfbd8e">FIM Scriptbox</a>) then I suggest you create a sample object by hand and then inspect both the object&#8217;s Advanced Properites, and the Details of the Request object which created it, for an idea of which attribute to populate.</p>
<p>While developing the scripts I saw the following error far more times that I would have liked:</p>
<blockquote><p>Microsoft.ResourceManagement.WebServices.Client.PermissionDeniedException: Policy prohibits the request from completing.</p></blockquote>
<p>After messing around with MPRs it eventually became clear that this just meant I had populated an attribute incorrently, or missed one out, and was not about permissions at all.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/creating-groups-in-the-fim-portal-using-powershell/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Group Management Comparison</title>
		<link>http://www.wapshere.com/missmiis/group-management-comparison</link>
		<comments>http://www.wapshere.com/missmiis/group-management-comparison#comments</comments>
		<pubDate>Thu, 31 Dec 2009 08:34:11 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[Exchange 2010]]></category>
		<category><![CDATA[FIM 2010]]></category>
		<category><![CDATA[Groups]]></category>
		<category><![CDATA[ILM 2007]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=655</guid>
		<description><![CDATA[Following on from my last post about the overlaps between FIM and Exchange 2010 I wanted to clarify for myself the group management capabilities in FIM, Exchange 2010 and ILM. Warning: I will have to revisit this post &#8211; as I haven&#8217;t yet installed Exchange 2010 in a production environment the Exchange comments are based [...]]]></description>
			<content:encoded><![CDATA[<p>Following on from my <a href="http://www.wapshere.com/missmiis/is-there-too-much-overlap-between-fim-2010-and-exchange-2010">last post</a> about the overlaps between FIM and Exchange 2010 I wanted to clarify for myself the group management capabilities in FIM, Exchange 2010 and ILM.</p>
<blockquote><p>Warning: I will have to revisit this post &#8211; as I haven&#8217;t yet installed Exchange 2010 in a production environment the Exchange comments are based on reading rather than hands-on experience, and in particular I&#8217;m unsure about the management of email-enabled Security groups.<br />
<span id="more-655"></span></p></blockquote>
<table border="2">
<thead>
<tr>
<th colspan="4">Exchange Distribution Groups</th>
</tr>
</thead>
<tbody>
<tr>
<td width="10%"> </td>
<td width="30%"><strong>FIM 2010</strong></td>
<td width="30%"><strong>Exchange 2010</strong></td>
<td width="30%"><strong>ILM 2007<br />
or FIM Sync</strong></td>
</tr>
<tr>
<td>Rules based<br />
eg., &#8220;All Finance Dept&#8221;</td>
<td>Managed and populated in FIM Portal.</p>
<ul>
<li>All users must also be represented in FIM Portal.</li>
</ul>
</td>
<td>Dynamic Distribution Lists</td>
<td>External genarator needed<br />
Eg., Group Populator</td>
</tr>
<tr>
<td>Manually populated</td>
<td>Managed and populated in FIM Portal.</p>
<ul>
<li>Owner approval workflow,</li>
<li>Join and approve in Outlook,</li>
<li>Create, join and approve in FIM Portal.</li>
</ul>
</td>
<td>Managed and populated directly in AD</p>
<ul>
<li>Owner approval workflow,</li>
<li>Request and approve in Outlook,</li>
<li>Create in ECP.</li>
</ul>
</td>
<td>No native functionality to permit manual group popluation.<br />
Synchronizes membership lists from one system to another (eg., from a database table to AD).</td>
</tr>
<tr>
<td>Other Management</td>
<td>
<ul>
<li>Manage other attributes, eg., who can send to the list,</li>
<li>Auto-generate new groups, eg., for a new Department or Location (with Workflow development).</li>
</ul>
</td>
<td>Exchange management tools.</td>
<td>Synchronize any attribute, though it must be generated somewhere outside ILM.</td>
</tr>
<tr>
<td>Access Control</td>
<td>Permissions to create, delete, modify granted in FIM Portal only.</td>
<td>Permissions to create, delete, modify granted in AD &#8211; though RBAC simplifies.</td>
<td>N/A</td>
</tr>
</tbody>
</table>
<p> <br />
 </p>
<table border="2">
<thead>
<tr>
<th colspan="4">Security Groups</th>
</tr>
</thead>
<tbody>
<tr>
<td width="10%"> </td>
<td width="30%"><strong>FIM 2010</strong></td>
<td width="30%"><strong>Exchange 2010</strong></td>
<td width="30%"><strong>ILM 2007<br />
or FIM Sync</strong></td>
</tr>
<tr>
<td>Rules based<br />
eg., &#8220;All Finance Dept&#8221;</td>
<td>Populated and managed in FIM Portal.</p>
<ul>
<li>All users must also be represented in FIM Portal.</li>
</ul>
</td>
<td>N/A</td>
<td>External genarator needed<br />
Eg., Group Populator</td>
</tr>
<tr>
<td>Manually populated</td>
<td>Managed and populated in FIM Portal.</p>
<ul>
<li>Owner approval workflow,</li>
<li>Join and approve in Outlook <em>only if the group has an email address</em>,</li>
<li>Create, join and approve in FIM Portal.</li>
</ul>
</td>
<td>Membership management for Security groups with email address?</p>
<p>N/A for non-email emabled Security groups.</td>
<td>No native functionality to permit manual group popluation.<br />
Synchronizes membership lists from one system to another (eg., from a database table to AD).</td>
</tr>
<tr>
<td>Other Management</td>
<td>
<ul>
<li>Replicate the groups to other systems &#8211; not just AD,</li>
<li>Auto-generate new groups, eg., for a new Department or Location (with Workflow development).</li>
</ul>
</td>
<td>Mail-enable existing AD Security groups using Exchange management tools.</td>
<td>Replicate the groups to other systems &#8211; not just AD.</td>
</tr>
<tr>
<td>Access Control</td>
<td>Permissions to create, delete, modify granted in FIM Portal only.</td>
<td>N/A</td>
<td>N/A</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/group-management-comparison/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ILM2 RC0 &#8211; Importing AD groups into ILM</title>
		<link>http://www.wapshere.com/missmiis/ilm2-rc0-importing-ad-groups-into-ilm</link>
		<comments>http://www.wapshere.com/missmiis/ilm2-rc0-importing-ad-groups-into-ilm#comments</comments>
		<pubDate>Mon, 26 Jan 2009 19:36:37 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[Groups]]></category>
		<category><![CDATA[ILM "2"]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=320</guid>
		<description><![CDATA[I&#8217;d like to be able to manage groups through the Portal but, unlike in the one published walkthrough on group management with ILM2, I don&#8217;t want to start from scratch. I want to start by importing all the existing groups from AD, and then, well we&#8217;ll see how we go. Getting information about my AD [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;d like to be able to manage groups through the Portal but, unlike in the one published walkthrough on <a href="http://technet.microsoft.com/en-au/library/dd239147.aspx">group management with ILM2</a>, I don&#8217;t want to start from scratch. I want to start by importing all the existing groups from AD, and then, well we&#8217;ll see how we go.</p>
<p>Getting information about my AD users into the ILM Portal went well. I just added a bunch of export flow rules to my ILM MA, ran an Export, and voila! all my users were visible in the Portal.</p>
<p>Unfortunately the groups did not go so well. I kept running into the export error <strong>failed-creation-via-web-services</strong>, with no idea as to <em>why</em>. Eventually I found a post on the <a href="https://connect.microsoft.com/community/discussion/richui/default.aspx?SiteID=433">MS Connect newgroup for ILM2</a> which pointed me in the right direction (I can&#8217;t link to the post, but if you search for &#8220;<span id="ctl00_MasterBody_ArticleBodyPanelSubjectLabel">failed-via-web-services tips&#8221; you&#8217;ll find it) &#8211; it was to do with the group object schema in the ILM Portal.<span id="more-320"></span></span></p>
<p><span><strong>Checking the schema requirements</strong></span></p>
<p><span>So what you want to do is find out which attributes are essential for the object type you&#8217;re trying to export, and what restrictions there are on the possible values.</span></p>
<ol>
<li><span>In the ILM Portal, open the <strong>Schema Management</strong> page (found under <strong>Administration</strong>).<br />
</span></li>
<li><span>Click the <strong>All Bindings</strong> icon.<br />
</span></li>
<li><span>Click on <strong>Advanced Search</strong>.<br />
</span></li>
<li><span>Enter the search criteria:</span>
<ul>
<li>The Binding&#8217;s ObjectTypeDescription is Group</li>
<li>Attribute IsRequired is True</li>
</ul>
<p> <br />
<img src="http://www.wapshere.com/images/ilm2_schema_group_attribs.jpg" alt="" /></li>
<li><span>You should now see a list of the required attributes. You can click on each one to find out more about them. In particular you should check for a regular expression on the Validation tab. Your data must pass the regex (note you can change the regex here if you need to add more possible values).<br />
</span><br />
<img src="http://www.wapshere.com/images/ilm2_schema_group_regex.jpg" alt="" /></li>
</ol>
<p> <br />
<strong>Populating the values</strong></p>
<p>Some of the required values, like the display name, you can just flow straight from AD. There are a couple of others you can just flow a constant value to &#8211; though as you don&#8217;t appear to be able to do Advanced rules from the ILM MA you will have to flow the values into the metaverse first from the AD MA.</p>
<p>The Type and Scope will have to be calculated from the groupType attribute in AD, and you will have to set them using the exact terms from the Portal Schema attributes. The following code can be used with advanced import flow rules on the AD MA (<a href="http://www.wapshere.com/missmiis/?p=309">the classic type</a>, which I&#8217;ve gone back to for the time being).<br />
 </p>
<pre> Case "import_type"
     If csentry("groupType").IntegerValue &lt; 0 Then
         mventry("type").Value = "Security"
     Else
         mventry("type").Value = "Distribution"
     End If

 Case "import_scope"
     Dim groupScope As Long
     If csentry("groupType").IntegerValue &lt; 0 Then
         groupScope = csentry("groupType").IntegerValue + 2147483648
     Else
         groupScope = csentry("groupType").IntegerValue
     End If
     Select Case groupScope
         Case 2
            mventry("scope").Value = "Global"
         Case 4
            mventry("scope").Value = "DomainLocal"
         Case 8
            mventry("scope").Value = "Universal"
     End Select</pre>
<p>Once the values are all attached to the group objects in the metaverse it is a simple matter to create the export flow rules on the ILM MA.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/ilm2-rc0-importing-ad-groups-into-ilm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Troubleshooting missing group member errors</title>
		<link>http://www.wapshere.com/missmiis/troubleshooting-missing-group-member-errors</link>
		<comments>http://www.wapshere.com/missmiis/troubleshooting-missing-group-member-errors#comments</comments>
		<pubDate>Thu, 04 Sep 2008 06:44:26 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[Groups]]></category>
		<category><![CDATA[ILM 2007]]></category>
		<category><![CDATA[Logs]]></category>
		<category><![CDATA[MIIS 2003]]></category>
		<category><![CDATA[VBScript]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=166</guid>
		<description><![CDATA[In some implementations, it makes sense (usually by improving performance) to separate your user and group provisioning into seperate MAs. One downside of this approach, however, is that you can run into export errors when trying to update a group with a member who doesn&#8217;t exist in the external directory &#8211; and this includes delete [...]]]></description>
			<content:encoded><![CDATA[<p>In some implementations, it makes sense (usually by improving performance) to separate your user and group provisioning into seperate MAs. One downside of this approach, however, is that you can run into export errors when trying to update a group with a member who doesn&#8217;t exist in the external directory &#8211; and this includes delete member operations.</p>
<p>The error you will see will either be <strong>dn-attributes-failure</strong> or <strong>cd-missing-object</strong>, depending on the type of group.</p>
<p>The detailed error will say something about an add or delete operation on a member that does not exist but, unhelpfully, will not tell you which one.</p>
<p>I&#8217;ve had some fun and games with this one recently, so this post is about some ways I figured out to troubleshoot the problem, and includes a vbscript for finding that missing member.</p>
<p><span id="more-166"></span></p>
<h3>dn-missing.vbs</h3>
<p>While trying to troubleshoot these missing member errors during the week I wrote a quick vbscript to help &#8211; you can look at it <a href="http://www.wapshere.com/missmiis/?page_id=162">here</a>.</p>
<p>Basically it exports an XML copy of the group object from the connector space, and then attempts an LDAP bind against each member. This works for AD. I haven&#8217;t tried it for other directories, but I expect it would work with anything based on LDAP.</p>
<h3>What if the member exists?</h3>
<p>The big problem I was having was when the member actualy <em>did</em> exist in AD. This was very frustrating. It seemed that once ILM had decided it couldn&#8217;t export the group then nothing could convince it otherwise. I tried various mitigation techniques:</p>
<ul>
<li>Full Import Full Sync of everything (didn&#8217;t help),</li>
<li><a href="http://www.wapshere.com/missmiis/?p=154">Hacking the export.xml</a> (helped when I was having a problem with a member delete),</li>
<li>Adding the member manually in AD then doing a Delta Import Delta Sync (a bit pointless, but it got things moving again).</li>
</ul>
<p>A full clear-out and re-import of the connector space would doubtlessly have worked, but considering the number and size of the groups, this would have been a <a href="http://www.wapshere.com/missmiis/?p=121">painful process</a>.</p>
<h3>Targeting the same DC</h3>
<p>What I did eventually figure out was that the two MAs were targeting different DCs. Duh! Obviously, to avoid any missing objects due to AD sync delays, you should target the same DC.  In fact <a href="http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=2124280&amp;SiteID=17">this post</a> on the Technet forum indicates that a Global Catalog server is best.</p>
<p>To hardcode a DC use the Domin controller connection settings on the Configure Directory Partitions tab of the AD MA.</p>
<h3>Remove users from groups before deleting the user account</h3>
<p>Another pretty obvious one, but I was also being careless on this front.</p>
<p>Even though it might seem perfectly reasonable to delete a non-existant user from a group, all AD will see is that you have explicity requested an operation involving something it can&#8217;t find.</p>
<p>In this implemetation, I disable users for a week before they are actually deleted. I now make sure that they are removed from all groups as soon as they are disabled.</p>
<p>I will write another post soon on the disable-delete methodology.</p>
<h3>DC Logging Levels</h3>
<p>Finally, if you are still having problems and need to get more information about why AD is rejecting an export, try increasing the logging levels on the DC as per this KB:</p>
<div dir="ltr"><a href="http://support.microsoft.com/kb/314980" target="_blank">http://support.microsoft.com/kb/314980</a></div>
<div dir="ltr"> </div>
<div dir="ltr">The ones to increase are 8, 9 and 16.</div>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/troubleshooting-missing-group-member-errors/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>String to relational DN export flows</title>
		<link>http://www.wapshere.com/missmiis/string-to-relational-dn-export-flows</link>
		<comments>http://www.wapshere.com/missmiis/string-to-relational-dn-export-flows#comments</comments>
		<pubDate>Fri, 11 Jul 2008 14:05:58 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[Groups]]></category>
		<category><![CDATA[ILM 2007]]></category>
		<category><![CDATA[MIIS 2003]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=128</guid>
		<description><![CDATA[Thanks to Joe Stepongzi for pointing this one out to me: you can flow a metaverse string attribute direct to a connector space relational DN attribute, as long as the metaverse string holds a valid DN. This is particularly useful in group population. My usual method uses relational DN attributes the whole way through, from importing CS to metaverse to [...]]]></description>
			<content:encoded><![CDATA[<p>Thanks to <a href="http://www.microsoftidm.com/" target="_blank">Joe Stepongzi</a> for pointing this one out to me: you can flow a metaverse <strong>string</strong> attribute direct to a connector space <strong>relational DN</strong> attribute, as long as the metaverse string holds a valid DN.</p>
<p><span id="more-128"></span></p>
<p>This is particularly useful in group population. My <a href="http://www.wapshere.com/missmiis/?p=9">usual method</a> uses relational DN attributes the whole way through, from importing CS to metaverse to exporting CS. To construct the rDNs, each CS must hold objects representing every possible group member. Get a few groups with 10,000+ members, and you may soon have hundreds of thousands of objects in your CS &#8230; and I won&#8217;t need to tell you what that does to your sync times and your transaction log.</p>
<p>So, it turns out, you can at least reduce the pain for one half of the equation.</p>
<table border="0">
<tbody>
<tr>
<td><strong>Importing CS</strong></td>
<td> </td>
<td><strong>Metaverse</strong></td>
<td> </td>
<td><strong>Exporting CS</strong></td>
</tr>
<tr>
<td>String attribute</td>
<td>→</td>
<td>String attribute</td>
<td>→</td>
<td>rDN attribute</td>
</tr>
</tbody>
</table>
<p>Now the big hurdle here is that you need to get hold of those DN strings in the first place, and have confidence that they are correct. I overcome with another SQL MA that exports the DN to a table. I then have some SQL trickery going on in the background to generate a table of member lists with the ready-made DNs.</p>
<p>This has been particularly useful in a multi-forest implementation where I needed to populate some groups with Foreign Security Objects from another forest. The FSO takes the form of a DN which I constructed from the foreign SSID, and then by using this method I was able to put them into groups.</p>
<p>Now according to Joe there is another half to this equation where you can also effectively output a group composed of string DN members to AD &#8211; however you can&#8217;t use the native AD MA, you have to use an XMA and LDIF files. This method has several notable benefits:</p>
<ul>
<li>LDIF allows you to add and remove individual group members &#8211; you don&#8217;t have to repopulate the entire group,</li>
<li>As you&#8217;re no longer dealing with reference DN attributes in the exporting MA, you won&#8217;t need all those thousands of placeholder objects representing the members, which leads directly to</li>
<li>Drastically reduced sync times and goodbye to <a href="http://tech.groups.yahoo.com/group/MMSUG/message/16883" target="_blank">nightmare transaction log scenarios</a>!</li>
</ul>
<p>However I haven&#8217;t had an opportunity to try this out yet. If and when I do I shall return to the subject with more details.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/string-to-relational-dn-export-flows/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AD Group members</title>
		<link>http://www.wapshere.com/missmiis/group-members-and-other-multivalued-attributes</link>
		<comments>http://www.wapshere.com/missmiis/group-members-and-other-multivalued-attributes#comments</comments>
		<pubDate>Tue, 25 Mar 2008 10:43:17 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[AD]]></category>
		<category><![CDATA[Groups]]></category>
		<category><![CDATA[ILM 2007]]></category>
		<category><![CDATA[MIIS 2003]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[newbie]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=108</guid>
		<description><![CDATA[This is a repost of an article which was originally about multivalue attributes in general, but with a focus on group members. I realised I had made some generalisations about multivalue attributes which actually specifically apply only to attributes like member, which contain reference DN values. So I am now re-releasing the post, with a [...]]]></description>
			<content:encoded><![CDATA[<p>This is a repost of an article which was originally about multivalue attributes in general, but with a focus on group members. I realised I had made some generalisations about multivalue attributes which actually specifically apply only to attributes like member, which contain <em>reference DN</em> values. So I am now re-releasing the post, with a focus just on member. </p>
<p>Group population is not the simplest thing to automate, however it is often a time-consuming manual task, and something high up on the priority list for an ILM project. Here are a few points which may help you on your way.</p>
<p><span id="more-108"></span></p>
<h4>Members are Reference DN values</h4>
<p>Groups are populated with links to the member objects, not a text list of names. To manage group memberships in ILM <em>all</em> involved objects must be present in ILM.</p>
<p>So, to put this plainly, if you&#8217;re trying to manage a particular group in AD then ILM must know about <em>all</em> its members. It is not possibly to partially manage a group.</p>
<h4>You can only populate member and not memberOf</h4>
<p>You can&#8217;t write to the &#8220;memberOf&#8221; attribute on user objects. It is something called a &#8220;backlinked&#8221; attribute, and AD is in charge of maintaining it.</p>
<p>You can, however, write to the &#8220;member&#8221; attribute of group objects, and this is the way you have to do it.</p>
<p>So it is not possible to manage group memberships by only considering the person (or user or contact) object &#8211; you need to manage the group objects as well.</p>
<h4>You can&#8217;t modify reference DN attributes in extension code</h4>
<p>ILM won&#8217;t let you write advanced flow rules for reference DN attributes &#8211; all you can do is flow them direct from one connector space, via the metaverse, to another.</p>
<p>(Actually I&#8217;ve never quite understood why this is, but there you go, we have to live with it.)</p>
<p>To emphasise the point: you must generate your membership lists <em>outside</em> of ILM, and then sync them directly <em>through</em> ILM.</p>
<h4>When Dynamic Groups are not enough</h4>
<p>Dynamic groups are those ones you want to change based on members&#8217; attributes. Perhaps the group should contain everyone in a particular department, or a building, or with the same manager.</p>
<p>Exchange 2003 brought us dynamic groups &#8211; but only for distribution lists, and not security. Pathetic.</p>
<p>Besides, you&#8217;re most likely going to need some manually populated groups as well &#8211; not everything can be worked out from attribute values. You may also want some groups where most of the members are dynamic, and a couple which are static.</p>
<p>If you&#8217;re using SunOne LDAP you can do all this natively&#8230; but with AD the membership of all security groups are static, and you need something else to help automate things.</p>
<h4>Generate the members in SQL</h4>
<p>Here&#8217;s how you might generate the membership lists in SQL:</p>
<ol>
<li>Generate dynamic group memberships in a view by directly querying the mms_metaverse table (sample queries to follow in another post).</li>
<li>Maintain another table for manually added group memberships (perhaps with a web front-end to manage them; groups can appear in both tables).</li>
<li>Concatenate the table and view together.</li>
<li>Import using the multivalue function of the <a href="http://www.wapshere.com/missmiis/?p=97">SQL MA</a>.</li>
</ol>
<p>For more explanation on how to configure the tables to import group memberships see <a href="http://www.wapshere.com/missmiis/?p=9">this post</a>.</p>
<h4>Use Delta tables</h4>
<p>You may quickly find that full imports from multivalued tables are too slow &#8211; for this reason it is essential that you use delta imports, ie., only import changes.</p>
<p>The basic method is as follows:</p>
<ol>
<li>Snapshot your import table/view;</li>
<li>Do a Full import;</li>
<li>Next time, take a new snapshot and compare it to the last one to make a Delta Table;</li>
<li>Do a Delta Import;</li>
<li>Once the Delta Import has completed successfully, clear out the Delta Table;</li>
<li>Repeat steps 3-5 <em>ad nauseum</em>.</li>
</ol>
<p>There is (naturally) a fair bit more to it when you start bringing multivalued attributes into the mix. I&#8217;ve written a few posts on the subject in the past, and the best place to start is with <a href="http://www.wapshere.com/missmiis/?p=17">this one</a>.</p>
<h4>In Summary</h4>
<p>I once set up a system that had 6,000 groups and 40,000 users. The group memberships changed continuously &#8211; particularly the self-subscriber ones that were updated through the user portal. <a href="http://www.wapshere.com/missmiis/?p=11">For efficiency</a>, I separated the multivalued and single valued attributes into seperate MAs, and the multivalued Full Import still took about 5 hours. But by running regular delta imports (every 15 minutes) the list of changes each time was short, and the imports took only a matter of moments.</p>
<p>So while group population and synchronisation with ILM is fiddly, and does use a number of advanced techniques, it is certainly possible to achieve a result that is both effective and efficient.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/group-members-and-other-multivalued-attributes/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Who needs Group Populator when you have Multivalue tables?</title>
		<link>http://www.wapshere.com/missmiis/who-needs-group-populator-when-you-have-multivalue-tables</link>
		<comments>http://www.wapshere.com/missmiis/who-needs-group-populator-when-you-have-multivalue-tables#comments</comments>
		<pubDate>Fri, 25 May 2007 12:02:18 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[Groups]]></category>
		<category><![CDATA[ILM 2007]]></category>
		<category><![CDATA[MIIS 2003]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=9</guid>
		<description><![CDATA[Getting members into groups seems to be an early hurdle for many people. Microsoft provide the Group Populator - an obtusely round-about method involving SQL tables, Select queries, input text files and code that must be run outside of MIIS. Once I got the hang of the multivalue aspect of the SQL MA, I couldn&#8217;t figure out why anyone [...]]]></description>
			<content:encoded><![CDATA[<p>Getting members into groups seems to be an early hurdle for many people. Microsoft provide the <a target="_blank" href="http://www.microsoft.com/technet/security/guidance/identitymanagement/idmanage/p2prov_8.mspx?mfr=true">Group Populator</a> - an obtusely round-about method involving SQL tables, Select queries, input text files and code that must be run outside of MIIS. Once I got the hang of the multivalue aspect of the SQL MA, I couldn&#8217;t figure out why anyone would use Group Populator at all!</p>
<p>One thing I will concede about Multivalue SQL MAs is they can be monstrously slow for large data sets. Perhaps Group Populator is quicker? Even if it is though, I find the Multivalue method so simple and flexible. Group Populator restricts you to creating groups with rules (like everyone with an office address that contains &#8220;Building A&#8221; goes into the &#8220;Building A&#8221; group). A multivalue table gives you complete freedom over who goes into what group, <em>and </em>it can be used for other multivalue attributes as well!</p>
<p>So enough waffle &#8211; lets get down to how it works.</p>
<p>A Multivalue SQL MA needs two tables:</p>
<ol>
<li>Table One lists all the objects with the minimum information required to join them to their metaverse counterpart. Probably all you will need here is an object type and an identifying attribute.</li>
<li>Table Two links the objects to values, with multiple values possible for one object. It must include an Attribute Name column &#8211; but you can include different Attributes in the one table.</li>
</ol>
<p>Take an AD/Exchange example &#8211; configuring Distribution Groups. Not only must these groups have members, but they are also restricted on who can email them. The attributes are <strong>member</strong> for the membership list and (somewhat obscurely) <strong>dlMemSubmitPerms</strong> for the restricted list.</p>
<p>My first table I will call <strong>ADMV_Objects</strong>. It lists all the possible Groups and Users that may be involved.</p>
<table border="1">
<tr>
<td><strong>ObjectID</strong></td>
<td><strong>ObjectType</strong></td>
</tr>
<tr>
<td>jpearson</td>
<td>User</td>
</tr>
<tr>
<td>Directors</td>
<td>Group</td>
</tr>
<tr>
<td>Sales</td>
<td>Group</td>
</tr>
<tr>
<td>mdali</td>
<td>User</td>
</tr>
<tr>
<td>than</td>
<td>User</td>
</tr>
<tr>
<td>&#8230;</td>
<td>&#8230;</td>
</tr>
</table>
<p>My second table I will call <strong>ADMV_Values</strong>. It must include the ObjectIDs exactly as they are in the first table, matched to attribute values.</p>
<table border="1">
<tr>
<td><strong>ObjectID</strong></td>
<td><strong>AttributeName</strong></td>
<td><strong>Value</strong></td>
</tr>
<tr>
<td>Directors</td>
<td>member</td>
<td>than</td>
</tr>
<tr>
<td>Directors</td>
<td>member</td>
<td>jpearson</td>
</tr>
<tr>
<td>Directors</td>
<td>dlMemSubmitPerms</td>
<td>Directors</td>
</tr>
<tr>
<td>Directors</td>
<td>dlMemSubmitPerms</td>
<td>Sales</td>
</tr>
<tr>
<td>Sales</td>
<td>member</td>
<td>mdali</td>
</tr>
<tr>
<td>Sales</td>
<td>dlMemSubmitPerms</td>
<td>Sales</td>
</tr>
<tr>
<td>&#8230;</td>
<td>&#8230;</td>
<td>&#8230;</td>
</tr>
</table>
<p>It is now just a matter of configuring my SQL MA.</p>
<p>On the <strong>Connect to Database </strong>page I put the Objects table in as the primary table, and the Values table in as the Multivalue table.</p>
<p><img width="457" src="http://www.wapshere.com/images/ma-multivalue-connectdb.GIF" alt="Multivalue ConnectDB" height="464" style="width: 457px; height: 464px" title="Multivalue ConnectDB" /></p>
<p>Then on the <strong>Configure Columns</strong> page I click the <strong>Multi-value</strong> button to open the <strong>Multi-value settings</strong> page.  Here I get to tell MIIS:</p>
<ul>
<li>where to look for the the attribute names;</li>
<li>where to look for the values &#8211; unhelpfully referred to as &#8220;String attribute column&#8221;, but values is what they mean; and</li>
<li>which multivalue attributes to expect.</li>
</ul>
<p><img width="406" src="http://www.wapshere.com/images/ma-multivaluesettings.GIF" alt="MultiValue-Settings" height="470" style="width: 406px; height: 470px" title="MultiValue-Settings" /></p>
<p>Finally set your Join rules so MIIS knows where to flow the attributes and you&#8217;re away!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/who-needs-group-populator-when-you-have-multivalue-tables/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
	</channel>
</rss>
