I’ve built a similar thing against Snowflake, with one added layer: tenant-scoped views with the ID baked in, and an associated tenant-scoped role that only has read access to its own views.
It also lets you make updates to the underlying table (shared between all tenant views) and then separately update the views. As long as you aren’t making breaking schema changes you can more easily validate the changes before releasing.