{"id":9,"date":"2007-05-25T12:02:18","date_gmt":"2007-05-25T12:02:18","guid":{"rendered":"https:\/\/www.wapshere.com\/missmiis\/?p=9"},"modified":"2023-01-16T06:08:11","modified_gmt":"2023-01-16T06:08:11","slug":"who-needs-group-populator-when-you-have-multivalue-tables","status":"publish","type":"post","link":"https:\/\/www.wapshere.com\/missmiis\/who-needs-group-populator-when-you-have-multivalue-tables","title":{"rendered":"Who needs Group Populator when you have Multivalue tables?"},"content":{"rendered":"<p>Getting members into groups seems to be an early hurdle for many people. Microsoft provide the <a href=\"http:\/\/www.microsoft.com\/technet\/security\/guidance\/identitymanagement\/idmanage\/p2prov_8.mspx?mfr=true\" target=\"_blank\" rel=\"noopener noreferrer\">Group Populator<\/a> &#8211; 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>\n<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>\n<p>So enough waffle &#8211; lets get down to how it works.<\/p>\n<p>A Multivalue SQL MA needs two tables:<\/p>\n<ol>\n<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>\n<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>\n<\/ol>\n<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>\n<p>My first table I will call <strong>ADMV_Objects<\/strong>. It lists all the possible Groups and Users that may be involved.<\/p>\n<table border=\"1\">\n<tbody>\n<tr>\n<td><strong>ObjectID<\/strong><\/td>\n<td><strong>ObjectType<\/strong><\/td>\n<\/tr>\n<tr>\n<td>jpearson<\/td>\n<td>User<\/td>\n<\/tr>\n<tr>\n<td>Directors<\/td>\n<td>Group<\/td>\n<\/tr>\n<tr>\n<td>Sales<\/td>\n<td>Group<\/td>\n<\/tr>\n<tr>\n<td>mdali<\/td>\n<td>User<\/td>\n<\/tr>\n<tr>\n<td>than<\/td>\n<td>User<\/td>\n<\/tr>\n<tr>\n<td>&#8230;<\/td>\n<td>&#8230;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<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>\n<table border=\"1\">\n<tbody>\n<tr>\n<td><strong>ObjectID<\/strong><\/td>\n<td><strong>AttributeName<\/strong><\/td>\n<td><strong>Value<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Directors<\/td>\n<td>member<\/td>\n<td>than<\/td>\n<\/tr>\n<tr>\n<td>Directors<\/td>\n<td>member<\/td>\n<td>jpearson<\/td>\n<\/tr>\n<tr>\n<td>Directors<\/td>\n<td>dlMemSubmitPerms<\/td>\n<td>Directors<\/td>\n<\/tr>\n<tr>\n<td>Directors<\/td>\n<td>dlMemSubmitPerms<\/td>\n<td>Sales<\/td>\n<\/tr>\n<tr>\n<td>Sales<\/td>\n<td>member<\/td>\n<td>mdali<\/td>\n<\/tr>\n<tr>\n<td>Sales<\/td>\n<td>dlMemSubmitPerms<\/td>\n<td>Sales<\/td>\n<\/tr>\n<tr>\n<td>&#8230;<\/td>\n<td>&#8230;<\/td>\n<td>&#8230;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>It is now just a matter of configuring my SQL MA.<\/p>\n<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>\n<p><img loading=\"lazy\" decoding=\"async\" style=\"width: 457px; height: 464px;\" title=\"Multivalue ConnectDB\" src=\"https:\/\/www.wapshere.com\/images\/ma-multivalue-connectdb.GIF\" alt=\"Multivalue ConnectDB\" width=\"457\" height=\"464\" \/><\/p>\n<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.\u00a0 Here I get to tell MIIS:<\/p>\n<ul>\n<li>where to look for the the attribute names;<\/li>\n<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>\n<li>which multivalue attributes to expect.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" style=\"width: 406px; height: 470px;\" title=\"MultiValue-Settings\" src=\"https:\/\/www.wapshere.com\/images\/ma-multivaluesettings.GIF\" alt=\"MultiValue-Settings\" width=\"406\" height=\"470\" \/><\/p>\n<p>Finally set your Join rules so MIIS knows where to flow the attributes and you&#8217;re away!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Getting members into groups seems to be an early hurdle for many people. Microsoft provide the Group Populator &#8211; 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&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","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":[22,34,28,5],"tags":[],"class_list":["post-9","post","type-post","status-publish","format-standard","hentry","category-groups","category-ilm2007","category-miis2003","category-sql"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/pkp1o-9","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.wapshere.com\/missmiis\/wp-json\/wp\/v2\/posts\/9","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=9"}],"version-history":[{"count":3,"href":"https:\/\/www.wapshere.com\/missmiis\/wp-json\/wp\/v2\/posts\/9\/revisions"}],"predecessor-version":[{"id":3340,"href":"https:\/\/www.wapshere.com\/missmiis\/wp-json\/wp\/v2\/posts\/9\/revisions\/3340"}],"wp:attachment":[{"href":"https:\/\/www.wapshere.com\/missmiis\/wp-json\/wp\/v2\/media?parent=9"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wapshere.com\/missmiis\/wp-json\/wp\/v2\/categories?post=9"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wapshere.com\/missmiis\/wp-json\/wp\/v2\/tags?post=9"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}