Por padrão, o proprietário de um objeto tem ALL PRIVILEGES nesse objeto, mas não me lembro especificamente se esses privilégios se estendem a permitir que um usuário normal (não super) atinja GRANT permissões nesse objeto para outros usuários.
Em qualquer caso, você deve ser capaz de conceder essa capacidade a um usuário anexando a cláusula WITH GRANT OPTION a uma instrução GRANT . (Eu o encaminho para os documentos para maiores detalhes.)
Por exemplo, em seu cenário hipotético, como superusuário X , você poderia fazer algo assim:
GRANT ALL PRIVILEGES ON DATABASE database_1 TO A WITH GRANT OPTION;
O usuário A teria então o poder de GRANT de permissões em objetos em database_1 para outros usuários. Continuando com o exemplo hipotético, o usuário A poderia dar permissões específicas ao usuário B , assim:
GRANT EXECUTE ON FUNCTION function_a(), function_b() TO B;