For security reasons, you should probably grant select, delete, update and insert to your app user in production.
Have another user who can do alter, create, drop and index when running migrations.
If you run seeders in production, also grant select, insert and references to the migration user.
Yeah, 2 users, migrations are not always run in production everyday and this keeps more secure your database.