How to hide view definition?

Moderator: NorbertKrupa

Post Reply
beth
Intermediate
Intermediate
Posts: 58
Joined: Tue Oct 01, 2013 12:42 pm

How to hide view definition?

Post by beth » Tue Jun 10, 2014 1:56 pm

Howdy all!

Is there a way that I can hide a view's definition from a user that has only been granted just the SELECT privilege on it?

Code: Select all

dbadmin=> create view public.dual_view as select * from dual;
CREATE VIEW

dbadmin=> create user beth;
CREATE USER

dbadmin=> \c dbadmin beth
You are now connected to database "dbadmin" as user "beth".

dbadmin=> select * from public.dual_view;
ERROR 4367:  Permission denied for relation dual_view

dbadmin=> \c dbadmin dbadmin
You are now connected to database "dbadmin" as user "dbadmin".

dbadmin=> grant select on public.dual_view to beth;
GRANT PRIVILEGE

dbadmin=> \c dbadmin beth
You are now connected to database "dbadmin" as user "beth".

dbadmin=> select * from public.dual_view;
 dummy
-------
 X
(1 row)

dbadmin=> select view_definition from views where table_name = 'dual_view';
            view_definition
---------------------------------------
 SELECT dual.dummy FROM v_catalog.dual
(1 row)
I have several views that contain some proprietary logic that I don't want the average user to be able to see!

Thank in advance!

User avatar
JimKnicely
Site Admin
Site Admin
Posts: 1825
Joined: Sat Jan 21, 2012 4:58 am
Contact:

Re: How to hide view definition?

Post by JimKnicely » Wed Jun 11, 2014 9:29 pm

You could create another view that queries the view you want hidden :idea:

Code: Select all

dbadmin=> create user jim;
CREATE USER
dbadmin=> create view public.dual_vw as select * from dual;
CREATE VIEW
dbadmin=> create view public.dual_vw2 as select * from public.dual_vw;
CREATE VIEW
dbadmin=> grant select on public.dual_vw2 to jim;
GRANT PRIVILEGE
dbadmin=> \c dbadmin jim
You are now connected to database "dbadmin" as user "jim".
dbadmin=> select view_definition from views where table_name = 'dual_vw';
 view_definition
-----------------
(0 rows)

dbadmin=> select view_definition from views where table_name = 'dual_vw2';
             view_definition
------------------------------------------
 SELECT dual_vw.dummy FROM public.dual_vw
(1 row)
Jim Knicely

Image

Note: I work for Vertica. My views, opinions, and thoughts expressed here do not represent those of my employer.

beth
Intermediate
Intermediate
Posts: 58
Joined: Tue Oct 01, 2013 12:42 pm

Re: How to hide view definition?

Post by beth » Thu Jun 12, 2014 12:45 pm

Cool, thanks, Jim! That's a brilliant quick solution :)

Post Reply

Return to “New to Vertica Database Administration”