How to do granular security ( row & column level) in vertica
How to do granular security ( row & column level) in Vertica like oracle supports VPD policy.
Need to have solution defined in the database instead of doing in the front end. Since I have global support and each region can have different access and if add security table base on user access I see that query is visible with extra filter or join I am doing. Need to apply this security such way that users can't see filter or join I am applying the vertica database.
Need to have solution defined in the database instead of doing in the front end. Since I have global support and each region can have different access and if add security table base on user access I see that query is visible with extra filter or join I am doing. Need to apply this security such way that users can't see filter or join I am applying the vertica database.
0
Comments
Vertica is a columnar database and Oracle VPD enforces row level security.
What you can do is create multiple projections that will serve for each of your users attending your security/VPD needs.
See example :
1-create user
2-create specific projection
3-create view to point to that projection
4-grant select on that view to the user
- the create view is needed as no select grant can be done over a projection.
Create projection:
Create view on top of projection:
Grant access to the view :
Login with test1 user and check what was done:
I am not a fun of the approach - but it does the trick
Now one more question is it possible to have project access set on user and this user can be stored in the DB so that while retrieve data I can decide which projection need to pull dynamically ?
So base on location ( global or domain ) base access user or group privilege will be set and created different projects as you mentioned and from my front end it pass group or user it will get only projections he can access.
Since different region has different countries and need setup each group is assigned to countries level access, so when users sign in from the front end security defined in table ( since lot of users) easier to lookup the table access and find out access level and use particular projection.
It might work but this will be very hard to implement, even with a (projection > view > access).
I didn't use any of the stuff i written on a project or any production db so far, but i know it actually work.
#Granular access to the data is not a think that Vertica was build for, they might improve this in the future for sure but with some cost(performance wise, as new objects will be required).
I am part of HR Systems, basically HR data should be more secured and let me know whether Vertica support below mentioned security model. I am bit confused to choose Vertica for my DW project.
Hi arunkumardct,
Row & Column level security model can be done using ACCESS_POLICY.
Note the following
Only DBADMIN users can create access policies.
To give a specific user or group of users a unique view of a table
(for example, only let users see rows with their name), you can create an access policy that is based on a role. Then you assign that role to a user.
Use something like database firewall for vertica?
https://www.datasunrise.com/firewall/vertica/
define the security policies based on specific columns or rows. from outside .
Define the access based fine granular such as region or ip or application