{"id":612,"date":"2013-06-20T21:13:03","date_gmt":"2013-06-20T19:13:03","guid":{"rendered":"http:\/\/clemente.pamplona.name\/dba\/?p=612"},"modified":"2013-06-27T12:04:46","modified_gmt":"2013-06-27T10:04:46","slug":"exportar-roles-entre-bases-de-datos","status":"publish","type":"post","link":"http:\/\/clemente.pamplona.name\/dba\/exportar-roles-entre-bases-de-datos\/","title":{"rendered":"Exportar roles entre bases de datos"},"content":{"rendered":"<p>Hoy vamos a ver como transportar roles de bases de datos.<\/p>\n<p>Los roles de bases de datos son una soluci\u00f3n c\u00f3moda y r\u00e1pida para la asignaci\u00f3n de grupos de permisos entre usuarios, el principal problema de los mismos, es que los permisos que asignas a los roles no est\u00e1n en las especificaciones de los usuarios que los poseen, sino que est\u00e1n dentro del esquema SYS dela base de datos, lo que provoca que cuando intentas importar alg\u00fan esquema de usuario que posee un rol falle si no est\u00e1 el rol previamente definido.<\/p>\n<p>Otra de las incomodidades de los roles es que , no hay una consulta sencilla que puedas hacer a la base de datos que te muestre la sintaxsis SQL del rol, con lo que su uso se convierte en algo engorroso en operaciones de movimiento de datos entre entornos.<\/p>\n<p>As\u00ed pues, si queremos trabajar con roles tendremos que tener alg\u00fan tipo de mecanismo para obtener los comandos de creacion de los roles.<br \/>\nPara esto, oracle tiene el paquete <b>dbms_metadata<\/b> que con la llamada <b>get_ddl<\/b> es capaz de obtener el c\u00f3digo SQL para un determinado objeto.<\/p>\n<p>Ahora bien,\u00bfcomo llamamos a este paquete?<\/p>\n<p>Para cada uno de nuestros roles tendremos que obtener las DDL de :<\/p>\n<ul>\n<li> creacion del rol\n<li> Grants del rol\n<li> Grants de system\n<li> Grants de objetos\n<\/ul>\n<p>As\u00ed pues, para obtener los datos del rol \u00abMIROL\u00bb har\u00edamos:<\/p>\n<pre>\r\nset linesize 200\r\nset head off\r\nset pages 0\r\nset long 9999999\r\nexec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'SQLTERMINATOR', true);\r\nSELECT 'create role MIROL' from dual;\r\nexec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'SQLTERMINATOR', true);\r\nSELECT dbms_metadata.get_granted_ddl('ROLE_GRANT',  'MIROL') FROM dual;\r\nexec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'SQLTERMINATOR', true);\r\nSELECT dbms_metadata.get_granted_ddl('SYSTEM_GRANT','MIROL') FROM dual;\r\nexec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'SQLTERMINATOR', true);\r\nSELECT dbms_metadata.get_granted_ddl('OBJECT_GRANT','MIROL') FROM dual;\r\n<\/pre>\n<p>Hay que tener en cuenta que, la  consulta de los SYSTEM_GRANT es muy pesada, especialmente en sistemas con un alto n\u00famero de objetos.<br \/>\nPor otra parte,tampoco estamos hablando de una operacion que no hemos de hacer muy amenudo y que, probablemente podamos guardar de una vez a otra  <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hoy vamos a ver como transportar roles de bases de datos. Los roles de bases de datos son una soluci\u00f3n c\u00f3moda y r\u00e1pida para la asignaci\u00f3n de grupos de permisos entre usuarios, el principal problema de los mismos, es que &hellip; <a href=\"http:\/\/clemente.pamplona.name\/dba\/exportar-roles-entre-bases-de-datos\/\">Sigue leyendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,13,7],"tags":[246,105,97,107,106,108],"class_list":["post-612","post","type-post","status-publish","format-standard","hentry","category-backup","category-scripting","category-sqlplus","tag-backup","tag-dbms_metadata","tag-expdp","tag-get_granted_ddl","tag-impdp","tag-roles"],"_links":{"self":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/612","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/comments?post=612"}],"version-history":[{"count":7,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/612\/revisions"}],"predecessor-version":[{"id":619,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/612\/revisions\/619"}],"wp:attachment":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/media?parent=612"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/categories?post=612"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/tags?post=612"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}