{"id":3306,"date":"2018-05-29T10:58:47","date_gmt":"2018-05-29T13:58:47","guid":{"rendered":"http:\/\/dev.dbarj.com.br\/?p=3306"},"modified":"2018-06-01T10:23:59","modified_gmt":"2018-06-01T13:23:59","slug":"how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables","status":"publish","type":"post","link":"https:\/\/dev.dbarj.com.br\/en\/2018\/05\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\/","title":{"rendered":"How to bypass requirement of WITH GRANT OPTION on views accessing third-party tables"},"content":{"rendered":"<p>A long time back, Oracle introduced limitations on VIEWS to avoid that some user with access to a given object in the database to pass on its contents to another user, by encapsulating it on views.<\/p>\n<p>As it&#8217;s always better to show examples than writing theory, let&#8217;s say we have 3 users on the database (<strong>USER_A, USER_B, USER_C<\/strong>).<\/p>\n<p>Table <strong>T1<\/strong> belongs to <strong>USER_A<\/strong>.<\/p>\n<ol>\n<li><strong>USER_A<\/strong>: GRANT SELECT ON T1 to <strong>USER_B<\/strong> (without 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>: Performs SELECT * FROM USER_B.V1<\/li>\n<\/ol>\n<p>Let&#8217;s create a demo and check what happens&#8230;<\/p>\n<p>Creating users and permissions:<\/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>Creating objects and granting..<\/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>The <span style=\"color: #800000;\"><strong>ORA-01720<\/strong><\/span>\u00a0error is raised, requiring <strong>USER_B<\/strong> to have <em>GRANT OPTION<\/em> on <strong>USER_A<\/strong> table\u00a0<strong>T1<\/strong> in order to grant his own view to <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:\/\/dev.dbarj.com.br\/wp-content\/uploads\/2018\/05\/img_5b0c55bda890c.png\" alt=\"\" srcset=\"https:\/\/dev.dbarj.com.br\/wp-content\/uploads\/2018\/05\/img_5b0c55bda890c.png 1920w, https:\/\/dev.dbarj.com.br\/wp-content\/uploads\/2018\/05\/img_5b0c55bda890c-300x99.png 300w, https:\/\/dev.dbarj.com.br\/wp-content\/uploads\/2018\/05\/img_5b0c55bda890c-768x253.png 768w, https:\/\/dev.dbarj.com.br\/wp-content\/uploads\/2018\/05\/img_5b0c55bda890c-1024x337.png 1024w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/p>\n<p>So USER_C will not have access at all to USER_A object. Fair enough!\u00a0It&#8217;s part of the security we so badly need.<\/p>\n<p>This limitation is well know and <a href=\"https:\/\/docs.oracle.com\/cd\/E11882_01\/server.112\/e41084\/statements_9013.htm#BABGJCJA\" target=\"_blank\" rel=\"noopener\">documented<\/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>However, what a few people know is that this protection can be easily bypassed by using something called <strong>PIPELINED FUNCTIONS<\/strong>.<\/p>\n<h2>So how to bypass the Grant Option requirement?<\/h2>\n<p>If the USER_B account, who owns the view, also had the CREATE PROCEDURE privilege, he could bypass the\u00a0ORA-01720 error by encapsulating the table T1 results on a pipelined function, and use this function inside his view. Let&#8217;s see how this would work:<\/p>\n<p>First, let&#8217;s grant <em>CREATE PROCEDURE<\/em> to 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>Now is time to create the pipelined function:<\/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>And now creating the view and granting to 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>Perfect. <strong>USER_B<\/strong> could give\u00a0access to\u00a0<strong>USER_C<\/strong>\u00a0on <strong>USER_A<\/strong> table without any\u00a0<em>GRANT OPTION<\/em>.<\/p>\n<p>The view now is running a <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>Please note the table now is being pre-processed by a pipelined function <span style=\"text-decoration: underline;\"><strong>for each row<\/strong><\/span>, so don&#8217;t expect the SELECT on it to perform even closer as a direct table access. So use it only for small tables or queries that don&#8217;t need max performance. I do also recommend to improve the PACKAGE code, implementing some bulk collections and pipeline tunings in case you need to improve the performance of this approach.<\/p>\n<b>Have you enjoyed? Please leave a comment or give a ?!<\/b>\n<div class='watch-action'><div class='watch-position align-left'><div class='action-like'><a class='lbg-style2 like-3306 jlk' href='javascript:void(0)' data-task='like' data-post_id='3306' data-nonce='b7aaf4ff99' rel='nofollow'><img class='wti-pixel' src='https:\/\/dev.dbarj.com.br\/wp-content\/plugins\/wti-like-post\/images\/pixel.gif' title='Like' \/><span class='lc-3306 lc'>+6<\/span><\/a><\/div><\/div> <div class='status-3306 status align-left'><\/div><\/div><div class='wti-clear'><\/div>","protected":false},"excerpt":{"rendered":"<p>A long time back, Oracle introduced limitations on VIEWS to avoid that some user with access to a given object in the database to pass on its contents to another user, by encapsulating it on views. As it&#8217;s always better to show examples than writing theory, let&#8217;s say we have 3 users on the database &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/dev.dbarj.com.br\/en\/2018\/05\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\/\">Continue reading<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20,15],"tags":[],"class_list":["post-3306","post","type-post","status-publish","format-standard","hentry","category-security-en","category-database-en","item-wrap"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to bypass requirement of WITH GRANT OPTION on views accessing third-party tables - DBA - Rodrigo Jorge - Oracle Tips and Guides<\/title>\n<meta name=\"description\" content=\"This article describes how to bypass grant option requirement on views using PIPELINED FUNCTIONS in Oracle Database.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/dev.dbarj.com.br\/en\/2018\/05\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\/\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"DBA RJ\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/dev.dbarj.com.br\\\/en\\\/2018\\\/05\\\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/dev.dbarj.com.br\\\/en\\\/2018\\\/05\\\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\\\/\"},\"author\":{\"name\":\"DBA RJ\",\"@id\":\"https:\\\/\\\/dev.dbarj.com.br\\\/en\\\/#\\\/schema\\\/person\\\/28a44ca3a6633fe4156ad1ea209d40a9\"},\"headline\":\"How to bypass requirement of WITH GRANT OPTION on views accessing third-party tables\",\"datePublished\":\"2018-05-29T13:58:47+00:00\",\"dateModified\":\"2018-06-01T13:23:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/dev.dbarj.com.br\\\/en\\\/2018\\\/05\\\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\\\/\"},\"wordCount\":465,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\\\/\\\/dev.dbarj.com.br\\\/en\\\/#\\\/schema\\\/person\\\/28a44ca3a6633fe4156ad1ea209d40a9\"},\"image\":{\"@id\":\"https:\\\/\\\/dev.dbarj.com.br\\\/en\\\/2018\\\/05\\\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/dev.dbarj.com.br\\\/wp-content\\\/uploads\\\/2018\\\/05\\\/img_5b0c55bda890c.png\",\"articleSection\":[\"Database Security\",\"Oracle Database General\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/dev.dbarj.com.br\\\/en\\\/2018\\\/05\\\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/dev.dbarj.com.br\\\/en\\\/2018\\\/05\\\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\\\/\",\"url\":\"https:\\\/\\\/dev.dbarj.com.br\\\/en\\\/2018\\\/05\\\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\\\/\",\"name\":\"How to bypass requirement of WITH GRANT OPTION on views accessing third-party tables - DBA - Rodrigo Jorge - Oracle Tips and Guides\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/dev.dbarj.com.br\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/dev.dbarj.com.br\\\/en\\\/2018\\\/05\\\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/dev.dbarj.com.br\\\/en\\\/2018\\\/05\\\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/dev.dbarj.com.br\\\/wp-content\\\/uploads\\\/2018\\\/05\\\/img_5b0c55bda890c.png\",\"datePublished\":\"2018-05-29T13:58:47+00:00\",\"dateModified\":\"2018-06-01T13:23:59+00:00\",\"description\":\"This article describes how to bypass grant option requirement on views using PIPELINED FUNCTIONS in Oracle Database.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/dev.dbarj.com.br\\\/en\\\/2018\\\/05\\\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/dev.dbarj.com.br\\\/en\\\/2018\\\/05\\\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/dev.dbarj.com.br\\\/en\\\/2018\\\/05\\\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\\\/#primaryimage\",\"url\":\"http:\\\/\\\/dev.dbarj.com.br\\\/wp-content\\\/uploads\\\/2018\\\/05\\\/img_5b0c55bda890c.png\",\"contentUrl\":\"http:\\\/\\\/dev.dbarj.com.br\\\/wp-content\\\/uploads\\\/2018\\\/05\\\/img_5b0c55bda890c.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/dev.dbarj.com.br\\\/en\\\/2018\\\/05\\\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/dev.dbarj.com.br\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to bypass requirement of WITH GRANT OPTION on views accessing third-party tables\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/dev.dbarj.com.br\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/dev.dbarj.com.br\\\/en\\\/\",\"name\":\"DBA - Rodrigo Jorge - Oracle Tips and Guides\",\"description\":\"Blog about Databases, Security and High Availability\",\"publisher\":{\"@id\":\"https:\\\/\\\/dev.dbarj.com.br\\\/en\\\/#\\\/schema\\\/person\\\/28a44ca3a6633fe4156ad1ea209d40a9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/dev.dbarj.com.br\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/dev.dbarj.com.br\\\/en\\\/#\\\/schema\\\/person\\\/28a44ca3a6633fe4156ad1ea209d40a9\",\"name\":\"DBA RJ\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/dev.dbarj.com.br\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/RodrigoJorgePOUG19.png\",\"url\":\"https:\\\/\\\/dev.dbarj.com.br\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/RodrigoJorgePOUG19.png\",\"contentUrl\":\"https:\\\/\\\/dev.dbarj.com.br\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/RodrigoJorgePOUG19.png\",\"width\":712,\"height\":712,\"caption\":\"DBA RJ\"},\"logo\":{\"@id\":\"https:\\\/\\\/dev.dbarj.com.br\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/RodrigoJorgePOUG19.png\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to bypass requirement of WITH GRANT OPTION on views accessing third-party tables - DBA - Rodrigo Jorge - Oracle Tips and Guides","description":"This article describes how to bypass grant option requirement on views using PIPELINED FUNCTIONS in Oracle Database.","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:\/\/dev.dbarj.com.br\/en\/2018\/05\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\/","twitter_misc":{"Written by":"DBA RJ","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/dev.dbarj.com.br\/en\/2018\/05\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\/#article","isPartOf":{"@id":"https:\/\/dev.dbarj.com.br\/en\/2018\/05\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\/"},"author":{"name":"DBA RJ","@id":"https:\/\/dev.dbarj.com.br\/en\/#\/schema\/person\/28a44ca3a6633fe4156ad1ea209d40a9"},"headline":"How to bypass requirement of WITH GRANT OPTION on views accessing third-party tables","datePublished":"2018-05-29T13:58:47+00:00","dateModified":"2018-06-01T13:23:59+00:00","mainEntityOfPage":{"@id":"https:\/\/dev.dbarj.com.br\/en\/2018\/05\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\/"},"wordCount":465,"commentCount":4,"publisher":{"@id":"https:\/\/dev.dbarj.com.br\/en\/#\/schema\/person\/28a44ca3a6633fe4156ad1ea209d40a9"},"image":{"@id":"https:\/\/dev.dbarj.com.br\/en\/2018\/05\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\/#primaryimage"},"thumbnailUrl":"http:\/\/dev.dbarj.com.br\/wp-content\/uploads\/2018\/05\/img_5b0c55bda890c.png","articleSection":["Database Security","Oracle Database General"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/dev.dbarj.com.br\/en\/2018\/05\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/dev.dbarj.com.br\/en\/2018\/05\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\/","url":"https:\/\/dev.dbarj.com.br\/en\/2018\/05\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\/","name":"How to bypass requirement of WITH GRANT OPTION on views accessing third-party tables - DBA - Rodrigo Jorge - Oracle Tips and Guides","isPartOf":{"@id":"https:\/\/dev.dbarj.com.br\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/dev.dbarj.com.br\/en\/2018\/05\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\/#primaryimage"},"image":{"@id":"https:\/\/dev.dbarj.com.br\/en\/2018\/05\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\/#primaryimage"},"thumbnailUrl":"http:\/\/dev.dbarj.com.br\/wp-content\/uploads\/2018\/05\/img_5b0c55bda890c.png","datePublished":"2018-05-29T13:58:47+00:00","dateModified":"2018-06-01T13:23:59+00:00","description":"This article describes how to bypass grant option requirement on views using PIPELINED FUNCTIONS in Oracle Database.","breadcrumb":{"@id":"https:\/\/dev.dbarj.com.br\/en\/2018\/05\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/dev.dbarj.com.br\/en\/2018\/05\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/dev.dbarj.com.br\/en\/2018\/05\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\/#primaryimage","url":"http:\/\/dev.dbarj.com.br\/wp-content\/uploads\/2018\/05\/img_5b0c55bda890c.png","contentUrl":"http:\/\/dev.dbarj.com.br\/wp-content\/uploads\/2018\/05\/img_5b0c55bda890c.png"},{"@type":"BreadcrumbList","@id":"https:\/\/dev.dbarj.com.br\/en\/2018\/05\/how-to-bypass-requirement-of-with-grant-option-on-views-accessing-third-party-tables\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/dev.dbarj.com.br\/en\/"},{"@type":"ListItem","position":2,"name":"How to bypass requirement of WITH GRANT OPTION on views accessing third-party tables"}]},{"@type":"WebSite","@id":"https:\/\/dev.dbarj.com.br\/en\/#website","url":"https:\/\/dev.dbarj.com.br\/en\/","name":"DBA - Rodrigo Jorge - Oracle Tips and Guides","description":"Blog about Databases, Security and High Availability","publisher":{"@id":"https:\/\/dev.dbarj.com.br\/en\/#\/schema\/person\/28a44ca3a6633fe4156ad1ea209d40a9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/dev.dbarj.com.br\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/dev.dbarj.com.br\/en\/#\/schema\/person\/28a44ca3a6633fe4156ad1ea209d40a9","name":"DBA RJ","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/dev.dbarj.com.br\/wp-content\/uploads\/2019\/09\/RodrigoJorgePOUG19.png","url":"https:\/\/dev.dbarj.com.br\/wp-content\/uploads\/2019\/09\/RodrigoJorgePOUG19.png","contentUrl":"https:\/\/dev.dbarj.com.br\/wp-content\/uploads\/2019\/09\/RodrigoJorgePOUG19.png","width":712,"height":712,"caption":"DBA RJ"},"logo":{"@id":"https:\/\/dev.dbarj.com.br\/wp-content\/uploads\/2019\/09\/RodrigoJorgePOUG19.png"}}]}},"_links":{"self":[{"href":"https:\/\/dev.dbarj.com.br\/en\/wp-json\/wp\/v2\/posts\/3306","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dev.dbarj.com.br\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dev.dbarj.com.br\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dev.dbarj.com.br\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dev.dbarj.com.br\/en\/wp-json\/wp\/v2\/comments?post=3306"}],"version-history":[{"count":0,"href":"https:\/\/dev.dbarj.com.br\/en\/wp-json\/wp\/v2\/posts\/3306\/revisions"}],"wp:attachment":[{"href":"https:\/\/dev.dbarj.com.br\/en\/wp-json\/wp\/v2\/media?parent=3306"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dev.dbarj.com.br\/en\/wp-json\/wp\/v2\/categories?post=3306"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dev.dbarj.com.br\/en\/wp-json\/wp\/v2\/tags?post=3306"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}