First think about what you want to achieve with a backup. To my humble opinion, a dump is not a backup good enough for DR. It can help restoring to a point in time but with a dump you can not recover the transactions that were created since the 'backup' was taken.
So if you just want an SQL dump that allows you to restore to a time in the past and ignores all transactions made between the dump time and the restore time, you can do that with a user that has read only access to those tables.
If you want a real backup, one that also enables you to recover the transactions made since the backup, use pg_backup to make a physical backup of the database and regularly make wall backups (there is a parameter for that "archive_command") and of course, your cluster needs archive_mode = ON, and wal_level to archive or replica (depends on version, replica for >= 9.6) This backup needs to be done by the database owner, often the postgres OS user.