{"id":895,"date":"2014-12-19T18:53:20","date_gmt":"2014-12-19T17:53:20","guid":{"rendered":"http:\/\/konsilium.de\/blog\/?p=895"},"modified":"2022-07-07T22:00:53","modified_gmt":"2022-07-07T20:00:53","slug":"erwin-tipp-002-grant-generierung-via-macro","status":"publish","type":"post","link":"https:\/\/konsilium.de\/blog\/2014\/12\/19\/erwin-tipp-002-grant-generierung-via-macro\/","title":{"rendered":"ERwin Tipp #002 &#8211; GRANT Generierung via Macro"},"content":{"rendered":"\n<p>Dieser ERwin-Tipp beschreibt wie ERwin mit Hilfe eines Macros, ein Post-SQL generiert und auf diese Weise das via Forward-Engineering erstellte DDL-Skript um dynamisch generierte GRANT-Statements erweitert. Hierbei werden nur f\u00fcr jene Datenbank-Objekte GRANTs erzeugt, die auch in die Generierungsauswahl mitaufgenommen wurden. Ferner wird ber\u00fccksichtigt, dass pro Systemumgebung unterschiedliche technische User in den GRANT-Statements zu ber\u00fccksichtigen sind.<\/p>\n\n\n\n<p>ERwin Data Modeler besitzt eine interne Macro-Sprache &#8211; na ja &#8211; eigentlich sind es zwei unterschiedliche. Die \u00e4ltere wird nicht weiterentwickelt, ich nenne Sie Legacy-Macro-Sprache. Sie besitzt eine einfache Syntax und einen geringen Funktionsumfang und ist daher schnell einsetzbar. Die &#8222;andere&#8220; Macrosprache ist wesentlich komplexer. Sie wird in den Forward-Engineering-Templates eingesetzt, die mit der ERwin-Installation ausgeliefert werden. Dieser Artikel bezieht sich auf die Verwendung der Legacy-Macrosprache.<\/p>\n\n\n\n<p>Zun\u00e4chst ben\u00f6tigen eine UDP-Property, in der ein normiertes K\u00fcrzel f\u00fcr die jeweilige Systemumgebung hinterlegt wird, f\u00fcr die das DDL-Skript generiert werden soll. Hierzu verwende ich eine UDP auf Ebene &#8222;Model&#8220;.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"http:\/\/konsilium.de\/blog\/wp-content\/uploads\/2014\/10\/ERwin-Model-Prop-UDP-DWH_DEPLOY_ENVIRONMENT1.png\"><img decoding=\"async\" loading=\"lazy\" width=\"518\" height=\"476\" src=\"http:\/\/konsilium.de\/blog\/wp-content\/uploads\/2014\/10\/ERwin-Model-Prop-UDP-DWH_DEPLOY_ENVIRONMENT1.png\" alt=\"Erwin Dialogfenster, Model Properties, Registerkarte UDP\" class=\"wp-image-905\" srcset=\"https:\/\/konsilium.de\/blog\/wp-content\/uploads\/2014\/10\/ERwin-Model-Prop-UDP-DWH_DEPLOY_ENVIRONMENT1.png 518w, https:\/\/konsilium.de\/blog\/wp-content\/uploads\/2014\/10\/ERwin-Model-Prop-UDP-DWH_DEPLOY_ENVIRONMENT1-300x275.png 300w, https:\/\/konsilium.de\/blog\/wp-content\/uploads\/2014\/10\/ERwin-Model-Prop-UDP-DWH_DEPLOY_ENVIRONMENT1-326x300.png 326w\" sizes=\"(max-width: 518px) 100vw, 518px\" \/><\/a><figcaption>Erwin Dialogfenster, Model Properties, Registerkarte UDP<\/figcaption><\/figure><\/div>\n\n\n\n<p>Ferner stelle ich sicher, dass im Falle eines Forward-Engineering auch Post-SQLs generiert werden:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"http:\/\/konsilium.de\/blog\/wp-content\/uploads\/2014\/10\/ERwin-FE-Prop-Schema-Props-ScriptGen.png\"><img decoding=\"async\" loading=\"lazy\" width=\"642\" height=\"462\" src=\"http:\/\/konsilium.de\/blog\/wp-content\/uploads\/2014\/10\/ERwin-FE-Prop-Schema-Props-ScriptGen.png\" alt=\"ERwin-FE-Prop-Schema-Props-ScriptGen\" class=\"wp-image-907\" srcset=\"https:\/\/konsilium.de\/blog\/wp-content\/uploads\/2014\/10\/ERwin-FE-Prop-Schema-Props-ScriptGen.png 642w, https:\/\/konsilium.de\/blog\/wp-content\/uploads\/2014\/10\/ERwin-FE-Prop-Schema-Props-ScriptGen-300x215.png 300w, https:\/\/konsilium.de\/blog\/wp-content\/uploads\/2014\/10\/ERwin-FE-Prop-Schema-Props-ScriptGen-416x300.png 416w\" sizes=\"(max-width: 642px) 100vw, 642px\" \/><\/a><\/figure><\/div>\n\n\n\n<p>Anschlie\u00dfend lege ich ein Script-Template an &#8211; dies ist das Macro:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"http:\/\/konsilium.de\/blog\/wp-content\/uploads\/2014\/10\/ERwin-ScriptTemplates-Prop-Macro-Grants.png\"><img decoding=\"async\" loading=\"lazy\" width=\"673\" height=\"638\" src=\"http:\/\/konsilium.de\/blog\/wp-content\/uploads\/2014\/10\/ERwin-ScriptTemplates-Prop-Macro-Grants.png\" alt=\"ERwin-ScriptTemplates-Prop-Macro-Grants\" class=\"wp-image-904\" srcset=\"https:\/\/konsilium.de\/blog\/wp-content\/uploads\/2014\/10\/ERwin-ScriptTemplates-Prop-Macro-Grants.png 673w, https:\/\/konsilium.de\/blog\/wp-content\/uploads\/2014\/10\/ERwin-ScriptTemplates-Prop-Macro-Grants-300x284.png 300w, https:\/\/konsilium.de\/blog\/wp-content\/uploads\/2014\/10\/ERwin-ScriptTemplates-Prop-Macro-Grants-316x300.png 316w\" sizes=\"(max-width: 673px) 100vw, 673px\" \/><\/a><\/figure><\/div>\n\n\n\n<p>Nachfolgend nun das Erwin-Macro zur dynamischen Generierung von GRANTs &#8211; in Abh\u00e4ngigkeit der gew\u00e4hlten Systemumgebung. Der technische User auf der Entwicklungsumgebung hei\u00dft TUCWHE01. &#8222;E&#8220; steht f\u00fcr &#8222;ENTW&#8220; (Entwicklungsumgebung). &#8222;01&#8220; unterscheidet den ETL-User vom read-only Lese-User &#8222;02&#8220;.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- --------------------------------------------------------\n-- ERwin Macro zur Generierung von GRANT-Statements\n-- --------------------------------------------------------\n-- ---------------------------------------------------------------\n-- f\u00fcr Systemumgebung: %DiagramProp(DWH_DEPLOY_ENVIRONMENT)\n-- ---------------------------------------------------------------\n%Decl(vSchemaName,undefined)\n%Decl(vUmgebung,undefined--)\n\n-- Table-GRANTs\n%ForEachEntity() {\n&nbsp;%Switch(%DiagramProp(DWH_DEPLOY_ENVIRONMENT)) {\n&nbsp; %Choose(ENTW) {GRANT SELECT ON %TableOwner.%TableName TO USER tucwhE02; GRANT SELECT, INSERT, UPDATE, DELETE, INDEX ON %TableOwner.%TableName TO USER tucwhE01;}\n&nbsp; %Choose(REF)&nbsp; {GRANT SELECT ON %TableOwner.%TableName TO USER tucwhR02; GRANT SELECT, INSERT, UPDATE, DELETE, INDEX ON %TableOwner.%TableName TO USER tucwhR01;}\n&nbsp; %Choose(PROD) {GRANT SELECT ON %TableOwner.%TableName TO USER tucwhP02; GRANT SELECT, INSERT, UPDATE, DELETE, INDEX ON %TableOwner.%TableName TO USER tucwhP01;)}\n&nbsp; %Default {%Decl(vUmgebung,UDP_NOT_VALID)}\n&nbsp;}\n}\n-- View-GRANTs\n%ForEachView() {\n&nbsp;%Switch(%DiagramProp(DWH_DEPLOY_ENVIRONMENT)) {\n&nbsp; %Choose(ENTW) {GRANT SELECT ON %TableOwner.%ViewName TO USER tucwhE02;}\n&nbsp; %Choose(REF)&nbsp; {GRANT SELECT ON %TableOwner.%ViewName TO USER tucwhR02;}\n&nbsp; %Choose(PROD) {GRANT SELECT ON %TableOwner.%ViewName TO USER tucwhP02;}\n&nbsp; %Default {%Decl(vUmgebung,UDP_NOT_VALID)}\n&nbsp;}\n}\n\n-- MView-GRANTs\n%ForEachMatView() {\n&nbsp;%Switch(%DiagramProp(DWH_DEPLOY_ENVIRONMENT)) {\n&nbsp; %Choose(ENTW) {GRANT SELECT ON %TableOwner.%ViewName TO USER tucwhE02; GRANT CONTROL ON %TableOwner.%ViewName TO USER tucwhE01;}\n&nbsp; %Choose(REF)&nbsp; {GRANT SELECT ON %TableOwner.%ViewName TO USER tucwhRE02; GRANT CONTROL ON %TableOwner.%ViewName TO USER tucwhR01;}\n&nbsp; %Choose(PROD) {GRANT SELECT ON %TableOwner.%ViewName TO USER tucwhP02; GRANT CONTROL ON %TableOwner.%ViewName TO USER tucwhP01;}\n&nbsp; %Default {%Decl(vUmgebung,UDP_NOT_VALID)}\n&nbsp;}\n}<\/code><\/pre>\n\n\n\n<p>Etwas tricky: Variablen-Zuweisungen innerhalb einer Schleife, haben nur im Kontext der Schleife G\u00fcltigkeit. Auch wenn die Variable vorher au\u00dferhalb der Schleifendeklaration deklariert wurde.<\/p>\n\n\n\n<p>Viel Spa\u00df damit!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dieser ERwin-Tipp beschreibt wie ERwin mit Hilfe eines Macros, ein Post-SQL generiert und auf diese Weise das via Forward-Engineering erstellte DDL-Skript um dynamisch generierte GRANT-Statements erweitert. Hierbei werden nur f\u00fcr jene Datenbank-Objekte GRANTs erzeugt, die auch in die Generierungsauswahl mitaufgenommen wurden. Ferner wird ber\u00fccksichtigt, dass pro Systemumgebung unterschiedliche technische User in den GRANT-Statements zu ber\u00fccksichtigen&hellip;&nbsp;<a href=\"https:\/\/konsilium.de\/blog\/2014\/12\/19\/erwin-tipp-002-grant-generierung-via-macro\/\" class=\"\" rel=\"bookmark\">Weiterlesen &raquo;<span class=\"screen-reader-text\">ERwin Tipp #002 &#8211; GRANT Generierung via Macro<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":2318,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","footnotes":""},"categories":[6],"tags":[15,77],"_links":{"self":[{"href":"https:\/\/konsilium.de\/blog\/wp-json\/wp\/v2\/posts\/895"}],"collection":[{"href":"https:\/\/konsilium.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/konsilium.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/konsilium.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/konsilium.de\/blog\/wp-json\/wp\/v2\/comments?post=895"}],"version-history":[{"count":18,"href":"https:\/\/konsilium.de\/blog\/wp-json\/wp\/v2\/posts\/895\/revisions"}],"predecessor-version":[{"id":2694,"href":"https:\/\/konsilium.de\/blog\/wp-json\/wp\/v2\/posts\/895\/revisions\/2694"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/konsilium.de\/blog\/wp-json\/wp\/v2\/media\/2318"}],"wp:attachment":[{"href":"https:\/\/konsilium.de\/blog\/wp-json\/wp\/v2\/media?parent=895"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/konsilium.de\/blog\/wp-json\/wp\/v2\/categories?post=895"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/konsilium.de\/blog\/wp-json\/wp\/v2\/tags?post=895"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}