1 Reply Latest reply on Aug 12, 2016 12:36 AM by pulkit jain

    Row Level Security Difficulties with Redshift

    . Coelho Machado



      I’m writing this hoping to get some help from community and maybe find someone who already faced similar difficulties.


      We are currently using Amazon Redshift as our main data warehouse.

      We have a bundle of BI applications (Tableau is one of them) querying this data warehouse all the time, but we are starting to see some degraded performance in our applications because of concurrency, as our organization grows.


      Our first try at optimizing this scenario was using published extracts, but we have a very specific row level security need. We have users being add to our database each day, and each user may see a different set of data than everybody else.

      For instance, after joining our fact table (15million records) with our individual security rules for each user table (3 hundred thousands), it generated an extract with approximately 300 million rows.


      We tried Tableau 10 Beta expecting better results with a new feature: Cross-Database Join. We tried to connect our published extracts to another kind of RDBMS (that would keep our security rules for each user updated), but this new feature isn’t able to connect to published extracts yet.


      What we really need is to find a solution which removes Tableau’s need to connect to Redshift, but still keeps performance levels and our row level security rules updated.


      We don’t see any way to use published extracts (according to the docs, the best way to maintain performance) while joining with our row level security table.


      We would be glad if someone could help or enlighten us with a possible solution.


      Best regards,


      Felipe Machado

        • 1. Re: Row Level Security Difficulties with Redshift
          pulkit jain

          Hi, Just wanted to know how much s the average number of records which a single user is expected to load.

          I mean it can't be like all user want to see all 15 million records.


          if average number of records needed for a user in around 500000 or less than following approach might help.


          pull your user detail table and  put the DB filter as

          user_name = username()

          in filters option in datasource.

          here user_name should be the column with user name in your user table.

          this will reduce your data for user table to 1 record on runtime.


          after that pull your table with main data and join it with user table in tableau.

          due to this join data from main table will be reduced to only this user.

          only demerit is you have to keep your data source as live.


          I hope this Helps you.