Para obtener solo 13 y 15, haz lo siguiente:
select user_id
from my_table
group by user_id
having max(case when role_id = 13 then 1 else 0 end) = 1 and -- has 13
max(case when role_id = 15 then 1 else 0 end) = 1 and -- has 15
max(case when role_id not in (13, 15) then 1 else 0 end) = 0 -- nothing else
Esto verifica que 13 y 15 estén en el conjunto user_id. Luego verifica que no haya nada más en el conjunto.
Me doy cuenta de que usar la cláusula de tener con la declaración de caso parece incómodo al principio. Sin embargo, puedes expresar mucha lógica sobre diferentes combinaciones de cosas en el conjunto.