It isn't so much doing less as compartmentalising the code. Programmers will make mistakes,
so doesn't it make sense to limit the damage that can occur when such a mistake is made?
If you have an SQL injection vulnerability, why does it have to be a data loss problem (if the
attacker can issue DROP TABLE) when it could just be information disclosure (and even that can
be limited).
And if we ignore the security aspect, restricting what an application can do can help pick up
programming errors. If you have a log analysis application, it might only need to read from a
set of tables and not write to any tables. Giving it only those permissions makes it obvious
if those expectations aren't met.