<?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; Philosophising</title>
	<atom:link href="http://www.wapshere.com/missmiis/category/philosophising/feed" rel="self" type="application/rss+xml" />
	<link>http://www.wapshere.com/missmiis</link>
	<description>Adventures in identity management</description>
	<lastBuildDate>Fri, 03 Feb 2012 20:41:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>The wisdom of creating new object types and using references</title>
		<link>http://www.wapshere.com/missmiis/the-wisdom-of-creating-new-object-types-and-using-references</link>
		<comments>http://www.wapshere.com/missmiis/the-wisdom-of-creating-new-object-types-and-using-references#comments</comments>
		<pubDate>Fri, 22 Jul 2011 23:13:57 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[FIM 2010]]></category>
		<category><![CDATA[Philosophising]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=1595</guid>
		<description><![CDATA[I&#8217;ve been busy recently moving myself and family back to our native Australia (though &#8220;native&#8221; there is a dubious term for my kids who have both lived their entire lives in Europe). We&#8217;re in &#8220;the Nation&#8217;s capital&#8221; Canberra now, and very cold it is too (for those northern hemispherarians who seem to think July is [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been busy recently moving myself and family back to our native Australia (though &#8220;native&#8221; there is a dubious term for my kids who have both lived their entire lives in Europe). We&#8217;re in &#8220;the Nation&#8217;s capital&#8221; Canberra now, and very cold it is too (for those northern hemispherarians who seem to think July is summer universally, and there&#8217;s always snow at Christmas: not down here matey!)</p>
<p>In this post I want to announce that I&#8217;ve taken a position as FIM consultant with <a href="http://unifysolutions.net/">Unify Solutions</a>, and also to link to a new article on the technet wiki written by my now-colleague <a href="http://www.linkedin.com/in/bradleybob">Bob Bradley</a> (aka UnifyBob): <a href="http://social.technet.microsoft.com/wiki/contents/articles/3945.aspx">FIM data modelling and sync design: reference attributes vs. string attributes</a>.</p>
<p><span id="more-1595"></span></p>
<p>The basic message of this article is that it&#8217;s very often better to create a new object type, even though that&#8217;s not the immediately obvious thing. Bob uses the example of a person&#8217;s &#8220;Position&#8221; (or job), of which there may be more than one. I raised this point using another specific example in my post <a href="http://www.wapshere.com/missmiis/why-create-a-delegation-resource-type-in-the-fim-portal">Why create a Delegation resource type in the FIM Portal</a>. You could equally apply the notion to anything a person may have more than one of: think roles, applications, equipment&#8230; Or a potentially changeable thing that applies to multiple people: think office, cost center, manager.</p>
<p>The other thing that Bob demonstrates in his article is how you should work through your architecture choices before committing, looking particularly at how it will scale. I mentioned the importance of this <a href="http://www.wapshere.com/missmiis/simplify-complexity">just the other day</a>, but it&#8217;s always helpful to see an example spelled out the way Bob has done.</p>
<p>The final point is that this approach will requie extra data manipulation. Bob mentions Unify products which I&#8217;ll post about when I&#8217;ve learnt them properly. My usual approach would be to manipulate the data in SQL, generating the new object types and the references there. Extra upfront effort yes, but well worth it for the simpler and more scalable system you&#8217;ll get.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/the-wisdom-of-creating-new-object-types-and-using-references/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simplify Complexity</title>
		<link>http://www.wapshere.com/missmiis/simplify-complexity</link>
		<comments>http://www.wapshere.com/missmiis/simplify-complexity#comments</comments>
		<pubDate>Thu, 30 Jun 2011 10:40:03 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[FIM 2010]]></category>
		<category><![CDATA[Philosophising]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=1570</guid>
		<description><![CDATA[The title of this post is in tribute to LANexpert, where I have been a consultant for the last four years. It&#8217;s been a great time but today I bid my LANexpert collegues a fond farewell before moving back home to Australia.
&#8220;Simplify Complexity&#8221; is LANexpert&#8217;s motto and I&#8217;ve always loved it. Overly-complex IT systems will [...]]]></description>
			<content:encoded><![CDATA[<p>The title of this post is in tribute to <a href="http://www.lanexpert.ch">LANexpert</a>, where I have been a consultant for the last four years. It&#8217;s been a great time but today I bid my LANexpert collegues a fond farewell before moving back home to Australia.</p>
<p>&#8220;Simplify Complexity&#8221; is LANexpert&#8217;s motto and I&#8217;ve always loved it. Overly-complex IT systems will not perform well on cost, stability or maintainability, so as IT professionals our mandate has been to architect systems that are clearly designed, follow best practises, and can be managed by the customer after we walk out the door.</p>
<p>It&#8217;s also a great motto to keep in mind when working with FIM, and here&#8217;s some reasons why.<br />
<span id="more-1570"></span></p>
<h3>It doesn&#8217;t work like you think it does</h3>
<p>People come to FIM with all sorts of pre-conceived notions, the worst being &#8220;this should be pretty easy&#8221;. It&#8217;s hardly surprising really, considering that&#8217;s what the marketing says. But when you think about the number and variety of tasks FIM is called on to do, and all the site-specific peculiarities involved, it should be clear that the marketing is being distinctly optimistic.</p>
<p>The next thing to userstand is that the Sync Service and the Portal  operate in quite different ways:</p>
<ul>
<li>The Sync service is a &#8220;Steady state system&#8221;, which means that you should be able to synchronize the data in any order and it will end up the same, with no further changes until the source data changes.</li>
<li>The Portal is object-oriented to it&#8217;s very core, meaning you&#8217;re often better off defining a new resource type than trying to bend existing ones. It&#8217;s also sequential and workflow based, meaning you have to think more about the process of making a change, and who requested it.</li>
</ul>
<p>I&#8217;ve come across a lot of frustration from people starting to work with FIM, and also people who have an existing MIIS/ILM system, which lead me to believe that these basic concepts are often misunderstood.</p>
<h3>The most obvious approach isn&#8217;t always be the right one</h3>
<p>FIM is essentially a framework on which you build your own IdM solution. It is inherently flexible and extensible, and you&#8217;ll usually find there is more that one way to skin the proverbial cat. And it&#8217;s often the case that the immediately obvious way is just what you shouldn&#8217;t do.</p>
<p>I try to think through how my ideas will scale. Say I want to assign application licenses to users through the FIM Portal &#8211; what will happen when there are hundreds of applications to choose from? How will the data be kept up to date? How will it look to the users? The immediately obvious idea of adding extra checkboxes to the Person form might start to look a bit less workable.</p>
<h3>An early redesign can save you a lot of trouble later on</h3>
<p>There are two things you need to build a great FIM system:</p>
<ul>
<li>a lot of FIM knowledge, and</li>
<li>a lot of site knowledge.</li>
</ul>
<p>Clearly it&#8217;s nigh on impossible to find one person with both at the beginning of a project. But even when you partner a consultant with an internal IT person it can take some time for comprehension to filter through on both sides.</p>
<p>Every major MIIS/ILM/FIM project I&#8217;ve woked on has gone through a redesign after having gone into production, once real-world data starts flowing through, and it becomes clear that certain key decisions have become constraints. And it&#8217;s always been the right thing to do.</p>
<h3>Play to the product&#8217;s strengths</h3>
<p>There&#8217;s a great phrase: &#8220;if all you have is a hammer, every problem starts to look like a nail&#8221;. FIM is so extensible that I think some people get a little giddy with the power of it all. But just because you <em>can </em>do something with extension code, does that mean you <em>should</em>?</p>
<p>I&#8217;m a big fan of letting FIM do what it&#8217;s good at, and using other tools, like scripting and SSIS, where it&#8217;s not so great.</p>
<p>Let&#8217;s take the Sync Service. It&#8217;s really good at creating, updating and deleting individual objects. What it&#8217;s <em>not </em>good at is anything that involves looking at a bunch of objects at once &#8211; such as generating a group membership. So we do that bit outside the Sync Service - like in the Portal, or in a SQL table, or an LDAP &#8211; and then we just let the Sync Service do it&#8217;s fabulous sync&#8217;ing thing.</p>
<h3>Business logic should be accessible</h3>
<p>A common situation with MIIS/ILM is extension code that includes a great long list of if statements that looks at departments and job titles and countries and goodness knows what else to determine actions. I&#8217;ve never felt this to be a good idea and I try to stick to this ideal<strong>: If it&#8217;s liable to change, don&#8217;t put it in compiled code</strong>! Instead I&#8217;ll use SQL queries and XML lookup tables to bring all that logic and variable data out into a place where it can be modified.</p>
<p>With the FIM Portal we can now manage some of this in a graphical way. So if you have a Set of users who should be able to access a certain application, you can now change the definition of that Set and your rules should be applied. This is a great improvement but may not be right for all cases. Somehow I don&#8217;t think we&#8217;re quite done with XML and SSIS just yet&#8230;</p>
<h3>Some other posts</h3>
<p>I have blogged on this sort of topic before, and yes it was about MIIS, but if you&#8217;re working with FIM Sync then it all still applies:</p>
<ul>
<li><a href="http://www.wapshere.com/missmiis/kiss-your-miis-installation">KISS your MIIS installation</a></li>
<li><a href="http://www.wapshere.com/missmiis/more-kiss-tips">More KISS tips</a></li>
<li><a href="http://www.wapshere.com/missmiis/keeping-provisioning-logic-out-of-the-provisioning-code">Keep Provisioning Logic out of the Provisioning Code</a></li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/simplify-complexity/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The unfinished furniture store</title>
		<link>http://www.wapshere.com/missmiis/the-unfinished-furniture-store</link>
		<comments>http://www.wapshere.com/missmiis/the-unfinished-furniture-store#comments</comments>
		<pubDate>Tue, 23 Nov 2010 09:38:27 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[FIM 2010]]></category>
		<category><![CDATA[Philosophising]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=1119</guid>
		<description><![CDATA[I was entertained by this comment in Jackson&#8217;s summary post about Neil MacDonald&#8217;s session at the Gartner Summit :
Gartner’s position is that FIM 2010 is not a complete solution. It can be extended, and by 3rd party partners like Quest but it’s like going to the unfinished furniture store.
It&#8217;s not a bad analogy &#8211; you do [...]]]></description>
			<content:encoded><![CDATA[<p>I was entertained by this comment in <a href="http://jacksonshaw.blogspot.com/2010/11/gartner-microsoft-and-iam.html?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+JacksonsIdentityManagementActiveDirectoryRealityTourTravelblog+%28Jackson%27s+Identity+Management+%26+Active+Directory+Reality+Tour+Travelblog%29">Jackson&#8217;s summary post about Neil MacDonald&#8217;s session at the Gartner Summit</a> :</p>
<blockquote><p>Gartner’s position is that FIM 2010 is not a complete solution. It can be extended, and by 3rd party partners like Quest but it’s like going to the unfinished furniture store.</p></blockquote>
<p>It&#8217;s not a bad analogy &#8211; you do have to do a lot of work on your own side to get FIM doing the things you need. But to continue the analogy, it&#8217;s like lots of people have houses which are built upside-down, with all sorts of strange shaped corners, and sloping ceilings, and half the kitchen on the other side of the road&#8230; and the only way you can get the furniture to fit with any kind of effectiveness is to go <a href="http://www.techterms.com/definition/bespoke" target="_blank">bespoke</a>.</p>
<p>I do think more standardisation in IAM will come, but it&#8217;s going to have to go hand-in-hand with further standardisation in account management practises and application security. Maybe then we&#8217;ll be able to expect more out-of-the-box functionality without having to go high-end or accept too many compromises. Meanwhile the unfinished furniture store and a good measure of DIY will remain the best option for many organisations.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/the-unfinished-furniture-store/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The need for unique identifiers</title>
		<link>http://www.wapshere.com/missmiis/the-need-for-unique-identifiers</link>
		<comments>http://www.wapshere.com/missmiis/the-need-for-unique-identifiers#comments</comments>
		<pubDate>Mon, 30 Jun 2008 18:06:46 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[ILM]]></category>
		<category><![CDATA[newbie]]></category>
		<category><![CDATA[Philosophising]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=120</guid>
		<description><![CDATA[Identity management is made a heck of a lot easier if you have a fool-proof way of identifying someone &#8211; no wonder governments are so keen on the idea of identity cards. I make no claim either way on the id cards, but I will say that unique identifiers make ILM/MIIS system so much easier to run [...]]]></description>
			<content:encoded><![CDATA[<p>Identity management is made a heck of a lot easier if you have a fool-proof way of identifying someone &#8211; no wonder governments are so keen on the idea of <a href="http://www.homeoffice.gov.uk/passports-and-immigration/id-cards/">identity cards</a>. I make no claim either way on the id cards, but I will say that unique identifiers make ILM/MIIS system so much easier to run that, more than a best practise, they are an absolute essential.</p>
<p><span id="more-120"></span></p>
<p>Some points to consider&#8230;</p>
<p><strong>The identifier must be unique in the metaverse</strong></p>
<p>There is no <em>technical</em> reason preventing you re-using an identifier,  but there are a lot of good <em>design</em> reasons. You should always be able to re-join to a metaverse object using the identifier, with no possibility of multiple matches.</p>
<p>I recommend not even re-using the same identifier across different object types.</p>
<p><strong>Export the identifier into all your connected directories</strong></p>
<p>Find a suitable attribute, set up an export flow rule, and get the identifier out. Then use the same attribute to join back (you should <em>always</em> have join rules, on <em>every</em> MA).</p>
<p>Very rarely there will be some application where you can&#8217;t find a suitable attribute to stick the identifier in. In my experience so far, these have always involved extensible MAs, and with XMAs I always maintain <a href="http://www.wapshere.com/missmiis/?p=15">a SQL table</a> where I can record extra info that will not go into the target system &#8211; such as a mapping between my unique identifier and whatever I&#8217;m being forced to use in the  external app.</p>
<p><strong>Use something that won&#8217;t change</strong></p>
<p>Usernames, email addresses and names are no good. They can change. Forget them.</p>
<p>Ideally use something that comes out of a database system which will already be enforcing a unique ID, such as an HR system.</p>
<p><strong>Ensuring uniqueness</strong></p>
<p>Many organisations are suffering under multiple import systems &#8211; perhaps company mergers mean multiple HR systems to encorporate, or different user types being generated in different systems. If there is any risk of a conflict, use an import flow rule to insert a prefix, or stage via a database where you can manipulate the identifier and assure uniqueness.</p>
<p><strong>Don&#8217;t use the metaverse GUID</strong></p>
<p>I was, I confess, somewhat horrified when I realised people do this. Just don&#8217;t! You never know when you will need to clear out and re-import. You should always plan for this possibility!</p>
<p><strong>Don&#8217;t use something system specific</strong></p>
<p>I also have concerns when I hear of the AD SID being used as a unique identifier. I feel that a person (or group, or other object) should be uniquely identifiable <em>whether it is currently in AD or not</em>. Sometimes accounts get deleted and re-created, but that doesn&#8217;t stop the person being themself.</p>
<p>I would only consider this a defensible design if AD was your primary, and most trustworthy, data source.</p>
<p><strong>So remember:-</strong></p>
<p>the unique identifier is unique, it doesn&#8217;t change, you get it everywhere, and you can rely on it in join rules. Perfect <a href="http://en.wikipedia.org/wiki/KISS_principle">KISS</a> philiosophy.</p>
<p> </p>
<p> </p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/the-need-for-unique-identifiers/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Export previews &#8211; make it easy for your project sponsors</title>
		<link>http://www.wapshere.com/missmiis/export-previews-make-it-easy-for-your-project-sponsors</link>
		<comments>http://www.wapshere.com/missmiis/export-previews-make-it-easy-for-your-project-sponsors#comments</comments>
		<pubDate>Sun, 06 Apr 2008 20:07:58 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[ILM 2007]]></category>
		<category><![CDATA[MIIS 2003]]></category>
		<category><![CDATA[Philosophising]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=110</guid>
		<description><![CDATA[In the early stage of your ILM project, or whenever taking over some new aspect, It&#8217;s worth putting some effort in to drawing a clear picture for whoever has the job of approving your change. What I try to do is produce a spreadsheet that shows, very clearly, the adds and deletes; and in the [...]]]></description>
			<content:encoded><![CDATA[<p>In the early stage of your ILM project, or whenever taking over some new aspect, It&#8217;s worth putting some effort in to drawing a clear picture for whoever has the job of approving your change. What I try to do is produce a spreadsheet that shows, very clearly, the adds and deletes; and in the case of updates, the old attribute value next to the new attribute value.</p>
<p><span id="more-110"></span></p>
<p><img src="http://www.wapshere.com/images/preview_spreadsheet.gif" alt="" /></p>
<h3>Test Server</h3>
<p>Of course you should be testing all your changes on your test server first. It&#8217;s really not a good idea to wing it on your production server because syncs are impossible to roll back. If you make a change, and then realise you have to wait for approval, you may have to stop all exports, at least from the effected MA(s). The only full-proof way to reverse the change is to delete and reimport your CSs &#8211; and, depending on the amount of data, this can take a LONG time.</p>
<p>So: back to the test server. If you&#8217;ve managed to sort out the <a href="http://www.wapshere.com/missmiis/?p=38" target="_self">MIIS groups thing</a>, then you can backup your production MIIS database, and restore it on your test server. You will now have the fully populated connector spaces, so there should be no need to do actual imports from the live data to produce an accurate preview.</p>
<h3>Export to file</h3>
<p>The next step is pretty obvious. make your change, run your syncs, and then use the &#8220;export to file and stop run&#8221; option of the export run profile. If you have shed-loads of data then consider restricting the export to a representitive sample.</p>
<h3>Clean up the file</h3>
<p>The XML file produced by the export can be opened in Excel, but it will contain a lot of information that you really don&#8217;t want to inflict on management &#8211; not if you want a quick approval out of them anyway. So spend some time tidying it up.</p>
<p>One thing I find is that people find it a lot easier if the &#8220;old value&#8221; and the &#8220;new value&#8221; are presented next to each other, and not on seperate lines as in the XML file. If you&#8217;re clever with your sorting you should be able to get yourself in a situation where the &#8220;add&#8221; is on one line with the &#8220;delete&#8221; directly beneath.</p>
<p><img src="http://www.wapshere.com/images/preview_spreadsheet_2.gif" alt="" /></p>
<p>Now you have to muck around for a bit with functions, pasting values, and removing redunant columns, to end up with something like the first picture in this post. Here&#8217;s a function which may help:</p>
<p><code>=if(and(B1=B2, C1=C2, E1="add"), D2, "")</code></p>
<h3>Why are we doing all this again?</h3>
<p>People get nervous about automatic changes, and they want reassurance that the changes will be the right ones. This is only fair, and as a good ILM designer you should provide information in a clear enough way to set their minds at ease.</p>
<p>And besides, its a great way to pick up bad data. I don&#8217;t know how many times I&#8217;ve seen bad data from the supposedly master source about to overwrite good data in the destination. Showing this in black and white isn&#8217;t a bad way of driving home the point that &#8220;your data&#8217;s not as clean as you thought it was&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/export-previews-make-it-easy-for-your-project-sponsors/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learning ILM</title>
		<link>http://www.wapshere.com/missmiis/learning-ilm</link>
		<comments>http://www.wapshere.com/missmiis/learning-ilm#comments</comments>
		<pubDate>Mon, 25 Feb 2008 14:53:59 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[ILM 2007]]></category>
		<category><![CDATA[MIIS 2003]]></category>
		<category><![CDATA[newbie]]></category>
		<category><![CDATA[Philosophising]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=93</guid>
		<description><![CDATA[ILM is tricky to learn whichever way you approach it.
If you&#8217;re from a sys admin background, like me, then the dawning realisation that you have to code may come as rather a shock.

Even if you are from a development background you will need to gain an understanding of ILM language such as CS objects, Metaverse [...]]]></description>
			<content:encoded><![CDATA[<p>ILM is tricky to learn whichever way you approach it.</p>
<p>If you&#8217;re from a sys admin background, like me, then the dawning realisation that <a href="http://www.wapshere.com/missmiis/?p=5">you have to code</a> may come as rather a shock.</p>
<p><span id="more-93"></span></p>
<p>Even if you are from a development background you will need to gain an understanding of ILM language such as CS objects, Metaverse objects, provisioning, and synchronising. You will need to come to terms with ILM peculiarities, for instance how metaverse objects can only be written to under specific conditions, how the code runs several times for each object change, how you can&#8217;t predict the order it will run, and how you can&#8217;t run it stand-alone.</p>
<p>Add to this the fact that you also need a good understanding of the connected directories themselves, and I find I agree with <a href="http://www.identitychaos.com/2006/07/chaos-chat-what-is-best-miis-skillset.html">this post by Brad Turner</a> where he says that the best ILM/MIIS people come from a Directory Administration, and not a code development, background.</p>
<p>But enough of that &#8211; how do you actually go about learning ILM?</p>
<h3>Jump straight in and try to figure it out</h3>
<p>The method beloved of techie-types the world over &#8211; we&#8217;re smart, we know computers, heck it&#8217;s a <em>Microsoft</em> product after all, how hard can it be??</p>
<p>Answer: Hard. And, btw, Microsoft didn&#8217;t write it, they <a href="http://www.crn.com/it-channel/18831987" target="_blank">bought the company</a>. It might have been a while back, but it&#8217;s suprising how little Microsoft-ised the product is today. (They&#8217;re working on that.)</p>
<h3>RTFM</h3>
<p>This is the usual advice &#8211; but unfortunately, in the case of ILM/MIIS, the <a href="http://technet2.microsoft.com/ILM/en/library/a4d5346d-418c-497c-bbab-ff49e94e982b1033.mspx?mfr=true" target="_blank">FM</a> is not remotely newbie-friendly. In fact it&#8217;s got to be about the most jargon-ridden example of too much detail leading to no understanding, that I have ever attempted to read.</p>
<p>It&#8217;s also still only available in the MIIS 2003 version &#8211; though don&#8217;t let that put you off as ILM 2007 and MIIS 2003 are <a href="http://www.wapshere.com/missmiis/?p=77">basically the same thing</a>.</p>
<h3>The Walkthroughs (Self-Training)</h3>
<p>The FM does, however, contain some gems &#8211; one of them being the <a href="http://technet2.microsoft.com/ILM/en/library/a4d5346d-418c-497c-bbab-ff49e94e982b1033.mspx?mfr=true" target="_blank">Walkthroughs</a>. If you want to teach yourself ILM then the Walkthroughs are the absolute best place to start. Don&#8217;t be put off by the examples being SQL and AD when what you really want is Oracle and Netware &#8211; that&#8217;s not the point! You will learn about how the components of ILM work together, and about how the code works, and then you can apply these lessons to what you really want to do.</p>
<p>So book yourself a few days of uninterrupted time, build yourself a virtual test environment, and <em>do the Walkthroughs</em>. I guarantee this will be quicker, and less painful in the long-run, than jumping straight in with some downloaded code snippets and no understanding.</p>
<h3>Training Courses</h3>
<p>There is a Microsoft training course at the beginner level:-<strong>MS2731 Deploying and Managing Microsoft Identity Integration Server (MIIS) 2003.</strong></p>
<p>Be warned, however, that taught by a trainer with no actual ILM/MIIS experience, you may find this completely useless. Make sure you ask about the trainer before you book. For my money, they can go hang their Microsoft Certified Trainer on the nearest loo wall &#8211; what counts here is real-world experience.</p>
<p>Highly recommended are the courses (beginner and advanced) offered by <a href="http://www.oxfordcomputergroup.com">Oxford Computing Group</a> where you will be taught by experts of the highest calibre. Check their website for course schedules and locations.</p>
<p>Finally you may be able to arrange a workshop or on-the-job training with a local consultancy firm such as the one that <a href="http://www.lanexpert.ch/" target="_blank">I work for</a> (if you happen to be in Switzerland). Again, check their credentials and ask for references as experienced ILM consultants still remain thin on the ground.</p>
<p>Good luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/learning-ilm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Should you ever run external processes from extension code?</title>
		<link>http://www.wapshere.com/missmiis/should-you-ever-run-external-processes-from-extension-code</link>
		<comments>http://www.wapshere.com/missmiis/should-you-ever-run-external-processes-from-extension-code#comments</comments>
		<pubDate>Tue, 29 Jan 2008 13:53:21 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[ILM 2007]]></category>
		<category><![CDATA[MIIS 2003]]></category>
		<category><![CDATA[Philosophising]]></category>
		<category><![CDATA[VB.NET]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=88</guid>
		<description><![CDATA[I had an interesting chat with an ILM collegue the other day, and one of the topics that came up was whether you should ever, under any circumstances, call external processes from extension code.
The prohibition on calling external processes from provisioning (MVExtension) code is clear and well accepted (see the Calling External Processes section on [...]]]></description>
			<content:encoded><![CDATA[<p>I had an interesting chat with an ILM collegue the other day, and one of the topics that came up was whether you should ever, under any circumstances, call external processes from extension code.</p>
<p>The prohibition on calling external processes from provisioning (MVExtension) code is clear and well accepted (see the <strong>Calling External Processes</strong> section on <a href="http://technet2.microsoft.com/ILM/en/library/ae6857d4-867f-48c2-b385-c42064b484cf1033.mspx?mfr=true" target="_blank">this technet page</a>), so what we were actually talking about was <a href="http://www.wapshere.com/missmiis/?p=14">extensible MAs</a>.</p>
<p><span id="more-88"></span></p>
<p>The way it came up was this: I was showing him my Techdays presentation, part of which includes a demo where I create personal websites in IIS as a way of saying &#8220;Look! It&#8217;s not just about user accounts!&#8221;. I do this pretty simply by running the iisVDir.vbs script which comes with IIS 6, using the /query option as part of my Import routine, and the /create and /delete options as part of the Export. (<a href="http://www.wapshere.com/missmiis/?page_id=89">MVExtension code</a>, <a href="http://www.wapshere.com/missmiis/?page_id=91">CSExtension code</a>)</p>
<p>Now my collegue said that he would never use ILM to run any kind of external process, because it slows down the system too much. He would just provision lines into a SQL table and then configure something external to ILM to pick up the rest of the work.</p>
<p>So in my IIS example here we&#8217;d just have ILM writing lines into a table, and then perhaps a scheduled task checking the table periodically, running iisVDir.vbs for anything new, and then updating the status once the code had succesfully completed. ILM would then import the &#8220;done&#8221; status back in and everything&#8217;s happy.</p>
<p>The advantages of this method are clear:</p>
<ul>
<li>Speed and efficiency in ILM &#8211; it&#8217;s very, very good at creating simple objects like lines in SQL tables, and will whip through these without a moment&#8217;s hesitation,</li>
<li>Simple to set up &#8211; no need to delve into extensible MAs, just a simple SQL MA and a vbscript to run the external bits,</li>
<li>Efficiency again &#8211; you can offload the external part of the process to another server to share the workload.</li>
</ul>
<p>I have, in fact, used this method before &#8211; like when I used <a href="http://www.wapshere.com/missmiis/?p=43">Exmerge to archive mailboxes</a>, as it would have slowed the whole sync cycle down unacceptably if I&#8217;d had to wait for Exmerge to finish every time I ran an Export. I also used the same method for sending &#8220;account <em>x</em> created&#8221; emails &#8211; writing a line into a SQL table once an account creation was confirmed, and leaving the emailing part up to another server.</p>
<p>But I&#8217;ve also written XMAs where I do call external processes. As well as the IIS example above, I made an XMA to <a href="http://www.wapshere.com/missmiis/?p=15">create</a> and then <a href="http://www.wapshere.com/missmiis/?p=40">archive Netware home folders</a>. Folder creation, zipping and deletion was all done straight from the CSExtension code (with the help of an archive library and some command line stuff for setting the ACLs). The create side was pretty fast, and the archiving wasn&#8217;t too bad either &#8211; except on the occassions when a couple of hundred folders were going at once (this was a university) and then you started to see a big impact on the rest of the syncs.</p>
<p>So what are the advantages of calling these external process directly from the CSExtension code?</p>
<ul>
<li>Imports are closer to the source &#8211; I like the idea that the import step should be going and discovering what is really in the data source, and not just reporting on the contents of a SQL table.</li>
<li>As long as the code in the export step is not adding too much of a delay, you should have linked objects created more closely together &#8211; for instanace a user account and its home folder.</li>
<li>If there&#8217;s a problem with the external process, and it&#8217;s stopping your other sync activity, you&#8217;re going to pick it up very quickly. Note this can also count as a Bad Thing!</li>
</ul>
<p>I guess my conclusion is that my collegue is almost cerainly right for large installations, where there are a lot of objects, or MAs, or both, and sync times are an issue. But for a smaller installation, or for external processes which are quick and light to run, I see no problem in calling them directly from CSExtension code. After all, that is what XMAs are supposed to be for!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/should-you-ever-run-external-processes-from-extension-code/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Disappearance from the CS should not be a justification for object deletion!</title>
		<link>http://www.wapshere.com/missmiis/disappearance-from-the-cs-should-not-be-a-justification-for-object-deletion</link>
		<comments>http://www.wapshere.com/missmiis/disappearance-from-the-cs-should-not-be-a-justification-for-object-deletion#comments</comments>
		<pubDate>Mon, 10 Sep 2007 10:39:40 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[ILM 2007]]></category>
		<category><![CDATA[MIIS 2003]]></category>
		<category><![CDATA[Philosophising]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=76</guid>
		<description><![CDATA[I&#8217;ve found myself repeating this on MMSUG a couple of times recently, so a post is probably in order. Don&#8217;t go deleting everything just because a CS object disappears!
There&#8217;s a dangerous little form in the Metaverse Design section of Identity Manager which allows you to set your Object Deletion Rule. By the simple expedient of clicking [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve found myself repeating this on <a href="http://tech.groups.yahoo.com/group/MMSUG/" target="_blank">MMSUG</a> a couple of times recently, so a post is probably in order. Don&#8217;t go deleting everything just because a CS object disappears!</p>
<p>There&#8217;s a dangerous little form in the Metaverse Design section of Identity Manager which allows you to set your Object Deletion Rule. By the simple expedient of clicking a radio button you can delete Metaverse objects just because the object (ie &#8220;connector&#8221;) disappeared from a nominated Connector Space.</p>
<p><img src="http://www.wapshere.com/images/miis_objectdeletionCSdisconnect.GIF" alt="" /></p>
<p>If you&#8217;ve also set your Management Agents to delete based on disappearance of the MV object, this deletion will then be replicated in all your connected directories.</p>
<p><img src="http://www.wapshere.com/images/ma_deprovisioning.GIF" alt="" /></p>
<p>So why am I so worried about this? Let&#8217;s say, for example, that you are supplied with a daily text file from HR listing all current users. If a user is no longer on the list then what&#8217;s the problem with removing all their accounts?</p>
<p>Take it from me (who accidentally disabled hundreds of user accounts using such a system) you need something more concrete when you&#8217;re going to start taking things away from people!</p>
<p>The fact of the matter is, glitches occur. That text file generation could have been interrupted part-way through. Even if you&#8217;re going closer to the source, eg straight from a SQL table, you can run into problems with SQL replication and DTS packages. And lets not forget the sheer scope posed by human error! I&#8217;m also wondering if an incomplete Import step into MIIS could lead to CS objects temporarily going missing &#8230; I think not, but in Good Design we don&#8217;t take the chance.</p>
<p>My proposal is that you figure out a way to get an extra <strong>Status</strong> field into your input data. This field should be used for tags such as &#8221;Active&#8221; and &#8220;Inactive&#8221;, as well as any other special-purpose flags you may see fit to introduce.</p>
<p>Here&#8217;s what you need to do:</p>
<p>1. Change that Metaverse Deletion Rule. You may need to write extension code (the third option), but I&#8217;ve only ever used the first option:</p>
<p><img style="width: 481px; height: 286px;" src="http://www.wapshere.com/images/miis_objectdeletion.GIF" alt="" width="481" height="286" /></p>
<p>2. It should be fine to leave the MA Deprovisioning rules set as shown above as you won&#8217;t be deleting the Meteverse object until all CS objects are gone.</p>
<p>3. Create a Metaverse attribute and import flow rule for the Status field, so that it is flowed in along with other object data.</p>
<p>4. You can now do a simple test, in your MVExtension code, before you proceed to anything destructive:</p>
<blockquote><p>If mventry(&#8220;Status&#8221;).Value = &#8220;Inactive&#8221; Then<br />
     <em> account disable/delete instructions</em><br />
End If</p></blockquote>
<p>5. If you wanted to, you could now use the disappearance theory as a way to clear out objects later on &#8211; just check first that a previous import has set the expected Status:</p>
<blockquote><p>If csobject Is Nothing AndAlso mventry(&#8220;Status&#8221;).Value = &#8220;Inactive&#8221; Then<br />
     <em> connector deletions</em><br />
End If</p></blockquote>
<p>So, using this method, what happens if a few objects do go missing (accidentally or otherwise) from your input data?</p>
<ul>
<li>MIIS will remove the CSobject from your source MA, correctly reflecting the input data it has been fed;</li>
<li>The metaverse (and hence other connector space) objects will be unaffected &#8211; all that&#8217;s happened is a connector has been lost;</li>
<li>When the object reappears in the inital connector space it should just rejoin to the existing metaverse object. And if it doesn&#8217;t, CHECK your join rules!</li>
</ul>
<p>If you&#8217;re worried about orphaned objects you can do the odd <a href="http://www.wapshere.com/missmiis/?p=36">MIIS DB query</a> to list the metaverse objects without a connector in the source CS, and then follow those up. After doing that a few times you will probably be well on your way to training your data handlers to NEVER just delete a record without putting it through an &#8220;Inactive&#8221; phase first!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/disappearance-from-the-cs-should-not-be-a-justification-for-object-deletion/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jackson Shaw</title>
		<link>http://www.wapshere.com/missmiis/54</link>
		<comments>http://www.wapshere.com/missmiis/54#comments</comments>
		<pubDate>Wed, 18 Jul 2007 01:54:14 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[MIIS 2003]]></category>
		<category><![CDATA[Philosophising]]></category>
		<category><![CDATA[Quest]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=54</guid>
		<description><![CDATA[Just spent the morning looking at Jackson Shaw&#8217;s IdM and AD blog. Jackson once worked at Zoomit, the company that created the original MIIS, before being bought out by Microsoft. He&#8217;s now at Quest, who seem to doing some interesting things with IdM, including tools which integrate with MIIS. Perhaps I&#8217;ll get to have some hands-on [...]]]></description>
			<content:encoded><![CDATA[<p>Just spent the morning looking at <a target="_blank" href="http://jacksonshaw.blogspot.com/" title="Jacson Shaw's blog">Jackson Shaw&#8217;s IdM and AD blog</a>. Jackson once worked at Zoomit, the company that created the original MIIS, before being bought out by Microsoft. He&#8217;s now at <a href="http://www.quest.com">Quest</a>, who seem to doing some <a target="_blank" href="http://www.quest.com/professional-services/Identity_Management.aspx">interesting things with IdM</a>, including tools which integrate with MIIS. Perhaps I&#8217;ll get to have some hands-on experience with their suite one day.</p>
<p>I particularly enjoyed reading his <a target="_blank" href="http://www.quest.com/landing/?id=938" title="Tenets of IdM">Tenets of Identity Management</a> article. It&#8217;s probably of greatest relevance to people in the product selection phase of an IdM project, but even if you&#8217;re already underway with MIIS it&#8217;s worth being reminded about the advantages of consolidating your directories and simplifying your solution. His other excellent point is about monitoring of the system. This is so important that I should probably pinch it for my <a href="http://www.wapshere.com/missmiis/?p=4">Reducing Fear and Loathing of IdM</a> article, though instead I may just put together a new post about the specific monitoring I&#8217;ve implemented in the past.</p>
<p>I also couldn&#8217;t help agreeing with Jackson that <a target="_blank" href="http://jacksonshaw.blogspot.com/2007/05/crossing-chasm-or-falling-in.html">MIIS is way too complicated</a>. It was a great shock to me, when I first started out, to realise that I had to learn .NET to do something as simple, and Microsoft-based, as creating a user account in AD (see <a href="http://www.wapshere.com/missmiis/?p=5">What do you mean I have to WRITE CODE???</a>). But whatever toolsets and out-of-the-box functionalities are added in the future, I can&#8217;t help but hope that those in the know will still be able to dive under the bonnet and make all sorts of other interesting things happen. Because once you&#8217;ve got the hang of it, it really is good fun!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/54/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Some Thoughts on Clearing Delta Tables</title>
		<link>http://www.wapshere.com/missmiis/some-thoughts-on-clearing-delta-tables</link>
		<comments>http://www.wapshere.com/missmiis/some-thoughts-on-clearing-delta-tables#comments</comments>
		<pubDate>Mon, 18 Jun 2007 11:32:56 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[ILM 2007]]></category>
		<category><![CDATA[MIIS 2003]]></category>
		<category><![CDATA[Philosophising]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=21</guid>
		<description><![CDATA[When planning delta imports from SQL, thought needs to be given to clearing down the delta tables. If you have any type of code running in response to the imported data then you have to accept that import errors will occur, some of them not even your fault! 
What should happen to the rows in [...]]]></description>
			<content:encoded><![CDATA[<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-GB"><font face="Times New Roman">When planning delta imports from SQL, thought needs to be given to clearing down the delta tables. If you have any type of code running in response to the imported data then you have to accept that import errors <em>will</em> occur, some of them not even your fault! </font></span></p>
<p><span lang="EN-GB"><font face="Times New Roman">What should happen to the rows in the Delta table that were not imported due to errors? Ideally you will let these rows stay put, giving MIIS another go at them on the next Delta Import. But what, then, should you do with the rows that were successfully imported?</font></span></p>
<p><span lang="EN-GB"><font face="Times New Roman">The solution will depend on the number of objects you’re dealing with, how often you manage a Full Import, and what the repercussions are of missed imports. In a system where a complete set of Full Imports can be run overnight, you may well find that a few missed deltas during the day are not significant. Alternatively, if the Fulls are run weekly or less often, you are completely dependant on the reliability of your Deltas – those failed imports must get another chance.</font></span></p>
<p><span lang="EN-GB"><font face="Times New Roman">Some possible solutions: optimistic, pessimistic and best-odds.</font></span></p>
<h3 style="margin: 12pt 0cm 3pt"><span lang="EN-GB"><font face="Arial">Optimistic</font></span></h3>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-GB"><font face="Times New Roman">Assume all Delta Imports are successful. Clear out the Delta table as an automatic step before generating the new Delta table.</font></span></p>
<p><span lang="EN-GB"><font face="Times New Roman">This approach works fine in simple systems where Full Imports can be run fairly regularly (at least once a day) to mop up any missed imports. A big problem with it is that an Import must be run after <em>every run</em> of the DTS. This can quickly turn into a complete pain when you’re troubleshooting.</font></span></p>
<h3 style="margin: 12pt 0cm 3pt"><span lang="EN-GB"><font face="Arial">Pessimistic</font></span></h3>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-GB"><font face="Times New Roman">Each row in the Delta table is independently checked for import success, and only removed once the import is confirmed.</font></span></p>
<p><span lang="EN-GB"><font face="Times New Roman">You could perhaps write some code that checks through the import log file after each import, and only deletes lines from the Delta table that look correct in the log. </font></span></p>
<p><span lang="EN-GB"><font face="Times New Roman">On my MIIS course, the lovely <a href="http://www.oxfordcomputergroup.com/workshops.php">Hugh Simpson-Wells</a> suggested an extra MA where objects are sync’d back from the metaverse just so you can compare them with the source data. This is not something I’ve ever tried, but I guess it would be the way to go if you needed 100% verification on those imports.</font></span></p>
<h3 style="margin: 12pt 0cm 3pt"><span lang="EN-GB"><font face="Arial">Best-Odds</font></span></h3>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-GB"><font face="Times New Roman">The best-odds approach that I adopted was to do a simple check for errors following the Delta Import task. If <em>any</em> errors occur, I keep the <em>entire</em> Delta table. Otherwise the Delta table is cleared.</font></span></p>
<p><span lang="EN-GB"><font face="Times New Roman">The main downside of this approach is that a single (possibly trivial) error will prevent the clearing, and will cause your delta table to grow and grow. MIIS will not be bothered by being given the same import data over and over, but it does slow everything down. You can also run into problems when the same object appears multiple times in the table with conflicting instructions (like a “Delete” followed by a “Modify”). Adding a de-duping step to your DTS helps, but the only solution is to ensure that import errors are sorted out ASAP.</font></span></p>
<p><span lang="EN-GB"><font face="Times New Roman">There are a number of technical examples I should include at this point, but this is a philosophising post so I won’t do it here. There’s more to come on <a href="http://www.wapshere.com/missmiis/?p=26">how to write a VBScript to run your MIIS jobs</a>, check for errors, and then fire off whatever else you need to do. </font></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/some-thoughts-on-clearing-delta-tables/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

