Index design and access control solve different problems, and teams conflate them. An index makes one query shape cheaper: a composite index on three columns took a three-condition query from 16.6 ms to 0.04 ms by moving every predicate into the index condition and removing the sort (Milan Jovanovic). That is a performance outcome. It says nothing about what happens when the agent writes a query against a table you never indexed, or against a table you never intended it to see.
Query planners answer any request for any table the connecting role can read. The same asymmetry that governs composite indexes governs permissions. Postgres uses a composite index for a filter on its leading column, and the leftmost prefix rule means an index on (region, product) helps a filter on region alone but does nothing for product alone (Ken Wagatsuma). Permissions are blunter still: a table grant is all or nothing at the table level unless you go to columns, and a role either can or cannot see a table.
The decision rule is simple. Index work is for latency. Grants are for reach. If you can only do one, do the grants, because a permission error is recoverable and a data exfiltration is not.



