I believe granting execute gets your basic CRUD, but TRUNCATE is more of an admin instruction, so it requires explicit granting rather than implied. I'm not 100% sure though. I've never used TRUNCATE in production code before.

-tg