Hi guys

About FGAC, I think we have to be more pragmatic.

We can identify three parts in FGAC:
- column masking
- column filtering
- row filtering

I believe the easiest to start with is column masking.

Let's start with column masking. The cinematic would be:
1. The query engine calls the catalog getTable() with credentials
2. The catalog calls the authorizer to verify credentials and to get
the associated roles
3. The catalog returns a "mask function name" to the query engine
(basically an id). This function name should be part of the Iceberg
REST getTable response (it's not today, so maybe we should start a
discussion with the Iceberg community to add this optional "mask"
field.
4. Then the query engine "maps" the "mask name" to its logic.

It means that:
1. The query engine is "coupled" with Polaris "mask name": it should
"translate" the mask name to its internal function. If the "mask name"
is not understood by the query engine, a "permission exception"
happens.
2. With this approach, we don't need an abstract representation in
Polaris (no Substrait, no Coral, ...). Polaris just "stores" mask
names.
3. It's a PoC approach that would allow us to evaluate the "plumbing"
required between catalog/authorizer/query engine.

Thoughts ?

I propose to start drafting a document with step by step FGAC patterns.

Regards
JB

On Tue, May 20, 2025 at 10:05 AM Prashant Singh
<prashant.si...@snowflake.com.invalid> wrote:
>
> > Let's work together on a proper design.
>
> For sure ! will be reaching out soon for this !
>
> Best,
> Prashant Singh

Reply via email to