{"id":3317,"date":"2018-05-29T10:59:31","date_gmt":"2018-05-29T13:59:31","guid":{"rendered":"http:\/\/www.dbarj.com.br\/?p=3317"},"modified":"2018-06-04T12:54:15","modified_gmt":"2018-06-04T15:54:15","slug":"como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios","status":"publish","type":"post","link":"https:\/\/www.dbarj.com.br\/pt-br\/2018\/05\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\/","title":{"rendered":"Como contornar a necessidade de WITH GRANT OPTION em views que acessam tabelas de outros usu\u00e1rios"},"content":{"rendered":"<p>H\u00e1 um bom tempo a Oracle introduziu limita\u00e7\u00f5es em VIEWS para evitar que algum usu\u00e1rio (com acesso \u00e0 um determinado objeto no banco de dados) repassasse seu conte\u00fado para outro, encapsulando-o em views.<\/p>\n<p>Como \u00e9 sempre melhor mostrar exemplos do que escrever teoria, digamos ent\u00e3o que temos 3 usu\u00e1rios no banco de dados (<strong> USER_A, USER_B, USER_C <\/strong>).<\/p>\n<p>A tabela <strong>T1<\/strong> pertence ao <strong>USER_A<\/strong>.<\/p>\n<ol>\n<li><strong>USER_A<\/strong>: GRANT SELECT ON T1 to <strong>USER_B<\/strong> (sem GRANT OPTION)<\/li>\n<li><strong>USER_B<\/strong>: CREATE VIEW V1 AS SELECT * FROM USER_A.T1<\/li>\n<li><strong>USER_B<\/strong>: GRANT SELECT ON V1 TO <strong>USER_C<\/strong><\/li>\n<li><strong>USER_C<\/strong>: Executa um SELECT * FROM USER_B.V1<\/li>\n<\/ol>\n<p>Vamos criar um demo e verificar o que acontece &#8230;<\/p>\n<p>Criando usu\u00e1rios e permiss\u00f5es:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"oracledb\">SQL&gt; conn \/ as sysdba\r\nConnected.\r\nSQL&gt; create user USER_A identified by oracle quota unlimited on usertbs;\r\n\r\nUser created.\r\n\r\nSQL&gt; grant create session, create table to USER_A;\r\n\r\nGrant succeeded.\r\n\r\nSQL&gt; create user USER_B identified by oracle;\r\n\r\nUser created.\r\n\r\nSQL&gt; grant create session, create view to USER_B;\r\n\r\nGrant succeeded.\r\n\r\nSQL&gt; create user USER_C identified by oracle;\r\n\r\nUser created.\r\n\r\nSQL&gt; grant create session to USER_C;\r\n\r\nGrant succeeded.<\/pre>\n<p>Criando objetos e concedendo os acessos..<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"oracledb\">SQL&gt; conn USER_A\/oracle\r\nConnected.\r\nSQL&gt; create table USER_A.t1 tablespace usertbs as select * from all_objects;\r\n\r\nTable created.\r\n\r\nSQL&gt; select count(*) from USER_A.t1;\r\n\r\n  COUNT(*)\r\n----------\r\n     74052\r\n\r\nSQL&gt; grant select on USER_A.t1 to USER_B;\r\n\r\nGrant succeeded.\r\n\r\nSQL&gt; conn USER_B\/oracle\r\nConnected.\r\nSQL&gt; create view USER_B.v1 as select * from USER_A.t1;\r\n\r\nView created.\r\n\r\nSQL&gt; select count(*) from USER_B.v1;\r\n\r\n  COUNT(*)\r\n----------\r\n     74052\r\n\r\nSQL&gt; grant select on USER_B.v1 to USER_C;\r\ngrant select on USER_B.v1 to USER_C\r\n                      *\r\nERROR at line 1:\r\nORA-01720: grant option does not exist for 'USER_A.T1'<\/pre>\n<p>O erro <span style=\"color: #800000;\"><strong>ORA-01720<\/strong><\/span> aparece, exigindo que o <strong>USER_B<\/strong> tenha <em>GRANT OPTION<\/em> na tabela <strong>T1<\/strong> do <strong>USER_A<\/strong> para que possa conceder grant em sua pr\u00f3pria view para o <strong>USER_C<\/strong>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"632\" class=\"alignnone size-full wp-image-3311 \" src=\"http:\/\/www.dbarj.com.br\/wp-content\/uploads\/2018\/05\/img_5b0c55bda890c.png\" alt=\"\" srcset=\"https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2018\/05\/img_5b0c55bda890c.png 1920w, https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2018\/05\/img_5b0c55bda890c-300x99.png 300w, https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2018\/05\/img_5b0c55bda890c-768x253.png 768w, https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2018\/05\/img_5b0c55bda890c-1024x337.png 1024w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/p>\n<p>Portanto, USER_C n\u00e3o ter\u00e1 acesso ao objeto USER_A. Justo! Faz parte da seguran\u00e7a que tanto precisamos.<\/p>\n<p>Essa limita\u00e7\u00e3o j\u00e1 \u00e9 bem conhecida e <a href=\"https:\/\/docs.oracle.com\/cd\/E11882_01\/server.112\/e41084\/statements_9013.htm#BABGJCJA\" target=\"_blank\" rel=\"noopener\">documentada<\/a>:<\/p>\n<blockquote><p>NOTE:<\/p>\n<p>To grant\u00a0SELECT\u00a0on a view to another user, either you must own all of the objects underlying the view or you must have been granted the\u00a0SELECT\u00a0object privilege\u00a0WITH\u00a0GRANT\u00a0OPTION\u00a0on all of those underlying objects. This is true even if the grantee already has\u00a0SELECT\u00a0privileges on those underlying objects<\/p><\/blockquote>\n<p>No entanto, o que poucas pessoas sabem \u00e9 que essa prote\u00e7\u00e3o pode ser facilmente contornada usando algo chamado <strong>PIPELINED FUNCTIONS<\/strong>.<\/p>\n<h2>Como contornar ent\u00e3o a exig\u00eancia de GRANT OPTION?<\/h2>\n<p>Se o usu\u00e1rio USER_B, propriet\u00e1rio da view, tamb\u00e9m tivesse o privil\u00e9gio CREATE PROCEDURE, ele poderia contornar o erro ORA-01720 encapsulando os resultados da tabela T1 em uma fun\u00e7\u00e3o com pipeline, e usar essa fun\u00e7\u00e3o dentro de sua view. Vamos ver como isso funcionaria:<\/p>\n<p>Primeiro, vamos conceder <em>CREATE PROCEDURE<\/em> para o USER_B:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"oracledb\">SQL&gt; conn \/ as sysdba\r\nConnected. \r\nSQL&gt; grant create procedure to USER_B;\r\n\r\nGrant succeeded.<\/pre>\n<p>Chegou a hora de criar a fun\u00e7\u00e3o com pipeline:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"oracledb\">SQL&gt; conn USER_B\/oracle\r\nConnected.\r\nSQL&gt; CREATE OR REPLACE PACKAGE pkg_bypass_go AS\r\n  2  \r\n  3    TYPE t_tab IS TABLE OF USER_A.T1%ROWTYPE;\r\n  4  \r\n  5    FUNCTION run (p_sql  IN  CLOB)\r\n  6      RETURN t_tab PIPELINED;\r\n  7  \r\n  8  END pkg_bypass_go;\r\n  9  \/\r\n\r\nPackage created.\r\n\r\nSQL&gt; CREATE OR REPLACE PACKAGE BODY pkg_bypass_go AS\r\n  2  \r\n  3    FUNCTION run (p_sql  IN  CLOB)\r\n  4      RETURN t_tab PIPELINED\r\n  5    IS\r\n  6      l_cursor SYS_REFCURSOR;\r\n  7      l_row    USER_A.T1%ROWTYPE;\r\n  8    BEGIN\r\n  9      OPEN l_cursor FOR p_sql;\r\n 10      LOOP\r\n 11        FETCH l_cursor\r\n 12        INTO  l_row;\r\n 13        EXIT WHEN l_cursor%NOTFOUND;\r\n 14        PIPE ROW (l_row);\r\n 15      END LOOP;\r\n 16      CLOSE l_cursor;\r\n 17      RETURN;\r\n 18    END run;\r\n 19  \r\n 20  END pkg_bypass_go;\r\n 21  \/\r\n\r\nPackage body created.<\/pre>\n<p>E agora, criando a view e concedendo permiss\u00e3o de leitura ao USER_C:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"oracledb\">SQL&gt; conn USER_B\/oracle\r\nSQL&gt; create or replace view USER_B.v1 as select * from table(pkg_bypass_go.run('select * from USER_A.t1'));\r\n\r\nView created.\r\n\r\nSQL&gt; select count(*) from USER_B.v1;\r\n\r\n  COUNT(*)\r\n----------\r\n     74052\r\n\r\nSQL&gt; grant select on USER_B.v1 to USER_C;\r\n\r\nGrant succeeded.\r\n\r\nSQL&gt; conn USER_C\/oracle\r\nConnected.\r\nSQL&gt; select count(*) from USER_B.v1;\r\n\r\n  COUNT(*)\r\n----------\r\n     74052\r\n<\/pre>\n<p>Perfeito. O <strong>USER_B<\/strong> p\u00f4de dar acesso ao\u00a0<strong>USER_C<\/strong>na tabela do <strong>USER_A<\/strong> sem qualquer <em>GRANT OPTION<\/em>.<\/p>\n<p>A view est\u00e1 agora executando um <span style=\"color: #800000;\"><strong><em>select * from table(pkg_bypass_go.run(&#8216;select * from USER_A.t1&#8217;))<\/em><\/strong><\/span>.<\/p>\n<p>Observe que a tabela agora est\u00e1 sendo pr\u00e9-processada por uma fun\u00e7\u00e3o com pipeline <span style=\"text-decoration: underline;\"><strong>para cada linha<\/strong><\/span>, por isso n\u00e3o espere nem de perto que o SELECT execute com a mesma performance que um acesso direto \u00e0 tabela. Portanto, use-o apenas para pequenas tabelas ou consultas que n\u00e3o precisem de desempenho m\u00e1ximo. Tamb\u00e9m recomendo melhorar o c\u00f3digo da PACKAGE, implementando alguns bulk collections e ajustes de pipeline, caso voc\u00ea precise melhorar o desempenho dessa abordagem.<\/p>\n<b>Gostou? N\u00e3o deixe de comentar ou deixar um \ud83d\udc4d!<\/b>\n<div class='watch-action'><div class='watch-position align-left'><div class='action-like'><a class='lbg-style2 like-3317 jlk' href='javascript:void(0)' data-task='like' data-post_id='3317' data-nonce='de4404f630' rel='nofollow'><img class='wti-pixel' src='https:\/\/www.dbarj.com.br\/wp-content\/plugins\/wti-like-post\/images\/pixel.gif' title='Like' \/><span class='lc-3317 lc'>+6<\/span><\/a><\/div><\/div> <div class='status-3317 status align-left'><\/div><\/div><div class='wti-clear'><\/div>","protected":false},"excerpt":{"rendered":"<p>H\u00e1 um bom tempo a Oracle introduziu limita\u00e7\u00f5es em VIEWS para evitar que algum usu\u00e1rio (com acesso \u00e0 um determinado objeto no banco de dados) repassasse seu conte\u00fado para outro, encapsulando-o em views. Como \u00e9 sempre melhor mostrar exemplos do que escrever teoria, digamos ent\u00e3o que temos 3 usu\u00e1rios no banco de dados ( USER_A, &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/www.dbarj.com.br\/pt-br\/2018\/05\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\/\">Continue lendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,2],"tags":[],"class_list":["post-3317","post","type-post","status-publish","format-standard","hentry","category-security","category-database","item-wrap"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Como contornar a necessidade de WITH GRANT OPTION em views que acessam tabelas de outros usu\u00e1rios - DBA - Rodrigo Jorge - Oracle Tips and Guides<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbarj.com.br\/pt-br\/2018\/05\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\/\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"DBA RJ\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2018\\\/05\\\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2018\\\/05\\\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\\\/\"},\"author\":{\"name\":\"DBA RJ\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/#\\\/schema\\\/person\\\/28a44ca3a6633fe4156ad1ea209d40a9\"},\"headline\":\"Como contornar a necessidade de WITH GRANT OPTION em views que acessam tabelas de outros usu\u00e1rios\",\"datePublished\":\"2018-05-29T13:59:31+00:00\",\"dateModified\":\"2018-06-04T15:54:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2018\\\/05\\\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\\\/\"},\"wordCount\":496,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/#\\\/schema\\\/person\\\/28a44ca3a6633fe4156ad1ea209d40a9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2018\\\/05\\\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/www.dbarj.com.br\\\/wp-content\\\/uploads\\\/2018\\\/05\\\/img_5b0c55bda890c.png\",\"articleSection\":[\"Database Security\",\"Oracle Database General\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2018\\\/05\\\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2018\\\/05\\\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\\\/\",\"url\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2018\\\/05\\\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\\\/\",\"name\":\"Como contornar a necessidade de WITH GRANT OPTION em views que acessam tabelas de outros usu\u00e1rios - DBA - Rodrigo Jorge - Oracle Tips and Guides\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2018\\\/05\\\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2018\\\/05\\\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/www.dbarj.com.br\\\/wp-content\\\/uploads\\\/2018\\\/05\\\/img_5b0c55bda890c.png\",\"datePublished\":\"2018-05-29T13:59:31+00:00\",\"dateModified\":\"2018-06-04T15:54:15+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2018\\\/05\\\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2018\\\/05\\\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2018\\\/05\\\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\\\/#primaryimage\",\"url\":\"http:\\\/\\\/www.dbarj.com.br\\\/wp-content\\\/uploads\\\/2018\\\/05\\\/img_5b0c55bda890c.png\",\"contentUrl\":\"http:\\\/\\\/www.dbarj.com.br\\\/wp-content\\\/uploads\\\/2018\\\/05\\\/img_5b0c55bda890c.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2018\\\/05\\\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Como contornar a necessidade de WITH GRANT OPTION em views que acessam tabelas de outros usu\u00e1rios\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/#website\",\"url\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/\",\"name\":\"DBA - Rodrigo Jorge - Oracle Tips and Guides\",\"description\":\"Blog about Databases, Security and High Availability\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/#\\\/schema\\\/person\\\/28a44ca3a6633fe4156ad1ea209d40a9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/#\\\/schema\\\/person\\\/28a44ca3a6633fe4156ad1ea209d40a9\",\"name\":\"DBA RJ\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/RodrigoJorgePOUG19.png\",\"url\":\"https:\\\/\\\/www.dbarj.com.br\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/RodrigoJorgePOUG19.png\",\"contentUrl\":\"https:\\\/\\\/www.dbarj.com.br\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/RodrigoJorgePOUG19.png\",\"width\":712,\"height\":712,\"caption\":\"DBA RJ\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/RodrigoJorgePOUG19.png\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Como contornar a necessidade de WITH GRANT OPTION em views que acessam tabelas de outros usu\u00e1rios - DBA - Rodrigo Jorge - Oracle Tips and Guides","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbarj.com.br\/pt-br\/2018\/05\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\/","twitter_misc":{"Escrito por":"DBA RJ","Est. tempo de leitura":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbarj.com.br\/pt-br\/2018\/05\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\/#article","isPartOf":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/2018\/05\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\/"},"author":{"name":"DBA RJ","@id":"https:\/\/www.dbarj.com.br\/pt-br\/#\/schema\/person\/28a44ca3a6633fe4156ad1ea209d40a9"},"headline":"Como contornar a necessidade de WITH GRANT OPTION em views que acessam tabelas de outros usu\u00e1rios","datePublished":"2018-05-29T13:59:31+00:00","dateModified":"2018-06-04T15:54:15+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/2018\/05\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\/"},"wordCount":496,"commentCount":3,"publisher":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/#\/schema\/person\/28a44ca3a6633fe4156ad1ea209d40a9"},"image":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/2018\/05\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\/#primaryimage"},"thumbnailUrl":"http:\/\/www.dbarj.com.br\/wp-content\/uploads\/2018\/05\/img_5b0c55bda890c.png","articleSection":["Database Security","Oracle Database General"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbarj.com.br\/pt-br\/2018\/05\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbarj.com.br\/pt-br\/2018\/05\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\/","url":"https:\/\/www.dbarj.com.br\/pt-br\/2018\/05\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\/","name":"Como contornar a necessidade de WITH GRANT OPTION em views que acessam tabelas de outros usu\u00e1rios - DBA - Rodrigo Jorge - Oracle Tips and Guides","isPartOf":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/2018\/05\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\/#primaryimage"},"image":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/2018\/05\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\/#primaryimage"},"thumbnailUrl":"http:\/\/www.dbarj.com.br\/wp-content\/uploads\/2018\/05\/img_5b0c55bda890c.png","datePublished":"2018-05-29T13:59:31+00:00","dateModified":"2018-06-04T15:54:15+00:00","breadcrumb":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/2018\/05\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbarj.com.br\/pt-br\/2018\/05\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.dbarj.com.br\/pt-br\/2018\/05\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\/#primaryimage","url":"http:\/\/www.dbarj.com.br\/wp-content\/uploads\/2018\/05\/img_5b0c55bda890c.png","contentUrl":"http:\/\/www.dbarj.com.br\/wp-content\/uploads\/2018\/05\/img_5b0c55bda890c.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbarj.com.br\/pt-br\/2018\/05\/como-contornar-a-necessidade-de-with-grant-option-em-views-que-acessam-tabelas-de-outros-usuarios\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.dbarj.com.br\/pt-br\/"},{"@type":"ListItem","position":2,"name":"Como contornar a necessidade de WITH GRANT OPTION em views que acessam tabelas de outros usu\u00e1rios"}]},{"@type":"WebSite","@id":"https:\/\/www.dbarj.com.br\/pt-br\/#website","url":"https:\/\/www.dbarj.com.br\/pt-br\/","name":"DBA - Rodrigo Jorge - Oracle Tips and Guides","description":"Blog about Databases, Security and High Availability","publisher":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/#\/schema\/person\/28a44ca3a6633fe4156ad1ea209d40a9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbarj.com.br\/pt-br\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":["Person","Organization"],"@id":"https:\/\/www.dbarj.com.br\/pt-br\/#\/schema\/person\/28a44ca3a6633fe4156ad1ea209d40a9","name":"DBA RJ","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2019\/09\/RodrigoJorgePOUG19.png","url":"https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2019\/09\/RodrigoJorgePOUG19.png","contentUrl":"https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2019\/09\/RodrigoJorgePOUG19.png","width":712,"height":712,"caption":"DBA RJ"},"logo":{"@id":"https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2019\/09\/RodrigoJorgePOUG19.png"}}]}},"_links":{"self":[{"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/posts\/3317","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/comments?post=3317"}],"version-history":[{"count":0,"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/posts\/3317\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/media?parent=3317"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/categories?post=3317"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/tags?post=3317"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}