{"id":97,"date":"2008-02-29T14:39:43","date_gmt":"2008-02-29T14:39:43","guid":{"rendered":"https:\/\/www.wapshere.com\/missmiis\/?p=97"},"modified":"2009-04-05T07:59:34","modified_gmt":"2009-04-05T07:59:34","slug":"configuration-of-the-sql-ma","status":"publish","type":"post","link":"https:\/\/www.wapshere.com\/missmiis\/configuration-of-the-sql-ma","title":{"rendered":"Configuration of the SQL MA"},"content":{"rendered":"<p>And now for a closer look at the configuration of SQL MAs.<\/p>\n<p>The config details that are common to all MA types are covered in <a href=\"https:\/\/www.wapshere.com\/missmiis\/?p=95\">this post<\/a>, so I won&#8217;t repeat them here.<\/p>\n<p>The SQL-specific options probably apply equally to the Oracle and DB2 MAs, but I&#8217;ve never used &#8217;em myself.<\/p>\n<p>We&#8217;ll start on the <strong>Connect to database<\/strong> page of the MA config, where you will no doubt have already filled in your server, database and table or view name. You may optionally enter a name of a <strong>Delta View<\/strong> (which could actually be a table) and <strong>Multivalue Table<\/strong> (which could equally be a view). Both options need explanation, and you will find it further down this page.<\/p>\n<p><!--more--><\/p>\n<p>On the <strong>Configure Columns<\/strong> page you will see the columns and their data types as found in SQL. There is an <strong>Edit<\/strong> button here but it all it does is allow you to set how empty fields are treated. If you want to change a data type, or add an extra field, you must do it in SQL and then, in ILM, choose the MA and <strong>Refresh Schema<\/strong>.<\/p>\n<p>The <strong>Set Anchor<\/strong> option refers to the primary key of the table. It will be used to uniquely identify the record. Get it right as you can&#8217;t change it later!<\/p>\n<p>For the <strong>Object Type<\/strong> you have two choices &#8211; fixed or column. This will also be unchangeable after MA creation.<\/p>\n<ul>\n<li>For the <strong>Fixed<\/strong> type you state that all objects imported into this connector space will be of type &#8220;blah&#8221;. (or type &#8220;person&#8221;, or &#8220;group&#8221; if you don&#8217;t like &#8220;blah&#8221;&#8230;)<\/li>\n<li>For the <strong>Column<\/strong> type you are telling ILM to go look up the object type in one of the table columns. This is a nicely flexible option &#8211; just add a column called &#8220;ObjectType&#8221; to your table, and then populate it with person, group, dog, cat, tea-tray&#8230; whatever you need.<\/li>\n<\/ul>\n<h3>Delta Table\/View<\/h3>\n<p>The <strong>Delta View\/Table<\/strong> is where you list that subset of records which have changed since the last import, allowing you save time with a <strong>Delta Import and Delta Sync<\/strong>. The Delta table must have <em>every<\/em> column of the primary table <em>plus<\/em> an extra column indicating if the change is an &#8216;Add&#8217;, &#8216;Delete&#8217; or &#8216;Modify&#8217;. As I&#8217;m just talking MA configuration here I shall refer you to my earlier post on <a href=\"https:\/\/www.wapshere.com\/missmiis\/?p=12\">how to make SQL delta tables<\/a>. It&#8217;s also covered in the <a href=\"http:\/\/technet2.microsoft.com\/ILM\/en\/library\/a4d5346d-418c-497c-bbab-ff49e94e982b1033.mspx?mfr=true\">MIIS Walkthroughs<\/a>.<\/p>\n<p>Once you enter your Delta table name on the <strong>Connect to database<\/strong> page and click OK, you get this alarming looking message from ILM: &#8220;You must configure change type attribute (delta) in order to continue&#8221;. Which is kind of silly at this point, because you don&#8217;t configure it until the <em>next <\/em>page. So OK the message, and you will arrive on the <strong>Configure Columns<\/strong> page.<\/p>\n<p>Now you have the option to <strong>Configure delta<\/strong>. Click this button and you get a little form where you select that extra column in the delta table which holds the &#8216;Add&#8217;,&#8217;Delete&#8217; or &#8216;Modify&#8217; instruction. While you&#8217;re here you can also tell ILM you don&#8217;t want to use the words &#8216;Add&#8217;,&#8217;Delete&#8217; and &#8216;Modify&#8217;, but something else instead &#8211; up to you.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.wapshere.com\/images\/ma-sql-configdelta.gif\" alt=\"\" \/><\/p>\n<p>You will also notice an option for <strong>Attribute modify<\/strong>. This is only enabled when you&#8217;re also doing multi-value imports. It&#8217;s rather an advanced topic so I shall refer you to <a href=\"http:\/\/http\/\/www.wapshere.com\/missmiis\/?p=18\">this other post I wrote on attribute-level imports<\/a>.<\/p>\n<h3>MultiValue Table\/View<\/h3>\n<p>The SQL MA will interpret each table line as a seperate object, and each column entry as a single value. This is fine for surname, userID and other such singled-valued attributes &#8211; but is no good for listing multiple telephone numbers, or direct reports, or group members.<\/p>\n<p>To populate multi-valued attribtes from a SQL MA you must use a multivalue table.<\/p>\n<p>Such a table can have multiple lines for each object, one for each attribute value. Using the classic example of group membership, you may have:<\/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>Sales<\/td>\n<td>member<\/td>\n<td>mdali<\/td>\n<\/tr>\n<tr>\n<td>Sales<\/td>\n<td>member<\/td>\n<td>ffranc<\/td>\n<\/tr>\n<tr>\n<td>Sales<\/td>\n<td>member<\/td>\n<td>vrickmans<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Now, when configuring your MA, you enter the name of the MultiValue table on the <strong>Connect to database<\/strong> page, and then, on the <strong>Configure Columns<\/strong> page, you will find you can now click the <strong>Multi-value<\/strong> button.<\/p>\n<p>This takes you to a form which is, frankly, as clear as mud (and also includes a number of pointless options which are always greyed out), but lucky for you, I have it figured out \ud83d\ude09<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.wapshere.com\/images\/ma-multivaluesettings.GIF\" alt=\"\" width=\"406\" height=\"470\" \/><\/p>\n<p>The <strong>Attribute name<\/strong> column is the one, in your Multivalue table, where you listed the <em>name <\/em>of the multivalue attributes &#8211; eg., member, telephone, directReports etc. In my example I have called this column, with dazzling logic, &#8220;AttributeName&#8221;.<\/p>\n<p>The <strong>Attribute type<\/strong> can only ever be <strong>String<\/strong> &#8211; don&#8217;t ask me why the others are there. It wants you to enter the name of the column where the attribute <em>value<\/em> will be found. Again I have been truly unimaginative and stuck to &#8220;Value&#8221; as my column heading.<\/p>\n<p>And finally, at the bottom, you list the expected attributes. It is not enough for ILM to go and find these in that AttributeName column &#8211; they must also be registered here, along with their data type. (This is not so surprising really &#8211; compare it to selecting the required attributes in an <a href=\"https:\/\/www.wapshere.com\/missmiis\/?p=96\">AD MA<\/a>.)<\/p>\n<p>For other posts on multivalue tables please see<\/p>\n<ul>\n<li><a title=\"Permanent link to Who needs Group Populator when you have Multivalue tables?\" rel=\"bookmark\" href=\"https:\/\/www.wapshere.com\/missmiis\/\/?p=9\">Who needs Group Populator when you have Multivalue tables?<\/a><\/li>\n<li><a title=\"Permanent link to Delta and Multivalued Combined\" rel=\"bookmark\" href=\"https:\/\/www.wapshere.com\/missmiis\/\/?p=17\">Delta and Multivalued Combined<\/a>.<\/li>\n<\/ul>\n<h3>Export Flows and De\/Provisioning<\/h3>\n<p>Certain restrictions exist if you wish to export data from a SQL MA &#8211; such as creating or deleting lines in the table, or updating individual values.<\/p>\n<p>You can do it, but only to <em>tables<\/em> or <em>simple views<\/em>. If the view is built from several tables you will find you cannot write to it. This is a restriction imposed by SQL rather than ILM.<\/p>\n<h3>And finally&#8230;<\/h3>\n<p>SQL MAs are mighty useful and you may find yourself using them a lot. Sometimes it is easier to sync via a SQL table that direct to a tricky application. SQL is great at tasks like creating delta tables from a comparison of two snapshots. There&#8217;s also no reason why you can&#8217;t create other databases on the ILM server to hold the tables for your SQL MAs.<\/p>\n<p>Just don&#8217;t put &#8217;em in the MicrosoftIdentityIntegrationServer database&#8230;<\/p>\n<p>I wouldn&#8217;t say it if I hadn&#8217;t seen it done.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>And now for a closer look at the configuration of SQL MAs. The config details that are common to all MA types are covered in this post, so I won&#8217;t repeat them here. The SQL-specific options probably apply equally to the Oracle and DB2 MAs, but I&#8217;ve never used &#8217;em myself. We&#8217;ll start on the&#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":[34,28,19,5],"tags":[],"class_list":["post-97","post","type-post","status-publish","format-standard","hentry","category-ilm2007","category-miis2003","category-newbie","category-sql"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/pkp1o-1z","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.wapshere.com\/missmiis\/wp-json\/wp\/v2\/posts\/97","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=97"}],"version-history":[{"count":1,"href":"https:\/\/www.wapshere.com\/missmiis\/wp-json\/wp\/v2\/posts\/97\/revisions"}],"predecessor-version":[{"id":457,"href":"https:\/\/www.wapshere.com\/missmiis\/wp-json\/wp\/v2\/posts\/97\/revisions\/457"}],"wp:attachment":[{"href":"https:\/\/www.wapshere.com\/missmiis\/wp-json\/wp\/v2\/media?parent=97"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wapshere.com\/missmiis\/wp-json\/wp\/v2\/categories?post=97"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wapshere.com\/missmiis\/wp-json\/wp\/v2\/tags?post=97"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}