When I learned database design back in the early 2000s one of the essential concepts was a stored procedure which anticipated this problem back when we weren't entirely sure how much we could trust the application layer (which was increasingly a webpage). The idea, which has long since disappeared (for very good and practical reasons)from modern webdev, was that even if the application layer was entirely compromised you still couldn't directly access data in the data layer.
No need to bring back stored procedure, but only allowing tool calls which themselves are limited in scope seem the most obvious solution. The pattern of "assume the LLM can and will be completely compromised" seems like it would do some good here.