{"id":2137,"date":"2012-09-25T21:03:16","date_gmt":"2012-09-25T21:03:16","guid":{"rendered":"https:\/\/www.wapshere.com\/missmiis\/?p=2137"},"modified":"2012-10-09T21:38:10","modified_gmt":"2012-10-09T21:38:10","slug":"fim-best-practice-data-sources","status":"publish","type":"post","link":"https:\/\/www.wapshere.com\/missmiis\/fim-best-practice-data-sources","title":{"rendered":"FIM Best Practice: Use the best Data Sources"},"content":{"rendered":"<p>FIM is all about data. It&#8217;s <em>identity<\/em> data, sure &#8211; but it&#8217;s still just data. And it needs to come from somewhere.<\/p>\n<p>Typically we will have multiple sources of data coming into FIM, but as with everything, there are good and bad ways to manage this.<\/p>\n<p><!--more--><\/p>\n<p><strong>Good vs Bad data sources<\/strong><\/p>\n<p>Not all data sources are created equal. Ideally we want to get as close as possible to data that is maintained by the people who are <em>most interested in its correctness<\/em>. So for example:<\/p>\n<ul>\n<li>Employee information in the HR database,<\/li>\n<li>Cost Codes in the Purchasing system,<\/li>\n<li>Location details in the Asset Management system.<\/li>\n<\/ul>\n<p>Data is entered haphazardly when there is no real penalty from it being wrong. Perhaps telephone numbers are put in AD as a convenience to users but if they&#8217;re wrong the phones don&#8217;t break, and they only get changed when someone complains. So here AD is a bad source for telephone number.<\/p>\n<p><a name=\"objects\"><strong>Object sources<\/strong><\/a><\/p>\n<p>An object source is allowed to project a new object into the FIM Metaverse. It says &#8220;this object can exist as a unique identity in the IdM metadirectory&#8221;.<\/p>\n<p>We should have only <em>one object source per object category<\/em>.<\/p>\n<p>Note I&#8217;m not saying object <em>type<\/em>. It could be perfectly valid for person objects to be projected from HR and the Student Roster and the FIM Portal, being respectively Employees, Students and Contractors.<\/p>\n<p>You get into trouble when the same identity can be projected from multiple sources. I have seen environments where people only show up in HR after they start work, so both AD and HR are declared as projection sources. This is a ludicrous design as you can&#8217;t guarantee reliable join criteria, and all you&#8217;ve done is made yourself a duplicates generator.<\/p>\n<p><strong>Attribute sources<\/strong><\/p>\n<p>Again we should aim for one attribute source per attribute, per object category.<\/p>\n<p>Say we have multiple email environments for different businesses within a conglomerate. Naturally each should be able to contribute email address &#8211; but only for people from that business.<\/p>\n<p>While it&#8217;s possible to write all sorts of complex precedence rules it is usually a bad idea. You&#8217;re weakening your system to accommodate poor data practices and in the end, no one will thank you for it.<\/p>\n<p><strong>Clearly communicate the various data sources<\/strong><\/p>\n<p>People are going to have to get used to updating values &#8220;at the source&#8221;. If a user&#8217;s name is misspelt in the GAL there&#8217;s no point changing it in AD when FIM is updating the name from HR. It needs to be fixed in HR. This idea will take a while to filter through, but the good thing is, once FIM has changed a value back a few times, people usually get the idea.<\/p>\n<blockquote><p>Got something to add? Disagree? Comments are open!<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>FIM is all about data. It&#8217;s identity data, sure &#8211; but it&#8217;s still just data. And it needs to come from somewhere. Typically we will have multiple sources of data coming into FIM, but as with everything, there are good and bad ways to manage this.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"footnotes":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":[]},"categories":[55,42],"tags":[],"class_list":["post-2137","post","type-post","status-publish","format-standard","hentry","category-best-practice","category-fim-2010"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/pkp1o-yt","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.wapshere.com\/missmiis\/wp-json\/wp\/v2\/posts\/2137","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wapshere.com\/missmiis\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wapshere.com\/missmiis\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wapshere.com\/missmiis\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wapshere.com\/missmiis\/wp-json\/wp\/v2\/comments?post=2137"}],"version-history":[{"count":16,"href":"https:\/\/www.wapshere.com\/missmiis\/wp-json\/wp\/v2\/posts\/2137\/revisions"}],"predecessor-version":[{"id":2359,"href":"https:\/\/www.wapshere.com\/missmiis\/wp-json\/wp\/v2\/posts\/2137\/revisions\/2359"}],"wp:attachment":[{"href":"https:\/\/www.wapshere.com\/missmiis\/wp-json\/wp\/v2\/media?parent=2137"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wapshere.com\/missmiis\/wp-json\/wp\/v2\/categories?post=2137"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wapshere.com\/missmiis\/wp-json\/wp\/v2\/tags?post=2137"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}