How to give SELECT rights to a view via role?
Version Vertica: v11.1.0-0
➜ ~ /opt/vertica/bin/vsql -U dbadmin -d VMart -p 5433 -h 127.0.0.1 VMart=> create user tableau1 IDENTIFIED BY '111111'; CREATE USER VMart=> create user tableau2 IDENTIFIED BY '111111'; CREATE USER VMart=> create user tableau3 IDENTIFIED BY '111111'; CREATE USER VMart=> CREATE SCHEMA DDS default include privileges; CREATE SCHEMA VMart=> CREATE ROLE dds_reader; CREATE ROLE VMart=> GRANT USAGE ON SCHEMA DDS to dds_reader; GRANT PRIVILEGE VMart=> GRANT SELECT ON SCHEMA DDS to dds_reader with grant option; GRANT PRIVILEGE VMart=> GRANT dds_reader TO tableau1, tableau2, tableau3 WITH ADMIN OPTION; GRANT ROLE VMart=> create table dds.test1 (id int); WARNING 6978: Table "test1" will include privileges from schema "DDS" CREATE TABLE VMart=> alter table dds.test1 owner to tableau2; ALTER TABLE VMart=> create view dds.v_test1 as select * from dds.test1; WARNING 7070: View "v_test1" will include privileges from schema "DDS" CREATE VIEW VMart=> alter view dds.v_test1 owner to tableau3; ALTER VIEW VMart=> \c VMart tableau1 Password: You are now connected to database "VMart" as user "tableau1". VMart=> set role dds_reader; SET VMart=> select * from dds.test1; id ---- (0 rows) VMart=> select * from dds.v_test1; ERROR 4367: Permission denied for relation v_test1
If you do not use ROLE, then it works.
VMart=> create user tableau1 IDENTIFIED BY '111111'; CREATE USER VMart=> create user tableau2 IDENTIFIED BY '111111'; CREATE USER VMart=> create user tableau3 IDENTIFIED BY '111111'; CREATE USER VMart=> CREATE SCHEMA DDS default include privileges; CREATE SCHEMA VMart=> GRANT USAGE, SELECT ON SCHEMA DDS to tableau1, tableau2, tableau3; GRANT PRIVILEGE VMart=> GRANT SELECT ON SCHEMA DDS to tableau3 with grant option; GRANT PRIVILEGE VMart=> create table dds.test1 (id int); WARNING 6978: Table "test1" will include privileges from schema "DDS" CREATE TABLE VMart=> alter table dds.test1 owner to tableau2; ALTER TABLE VMart=> create view dds.v_test1 as select * from dds.test1; WARNING 7070: View "v_test1" will include privileges from schema "DDS" CREATE VIEW VMart=> alter view dds.v_test1 owner to tableau3; ALTER VIEW VMart=> \c VMart tableau1 Password: You are now connected to database "VMart" as user "tableau1". VMart=> select * from dds.test1; id ---- (0 rows) VMart=> select * from dds.v_test1; id ---- (0 rows)