¿Es posible realizar una función de grupo bitwise?

Tengo un campo en una tabla que contiene banderas bitwise. Digamos que para el ejemplo hay tres banderas:4 => read, 2 => write, 1 => execute y la mesa se ve asi*:

  user_id  |  file  |  permissions
-----------+--------+---------------
        1  |  a.txt |  6    ( <-- 6 = 4 + 2 = read + write)
        1  |  b.txt |  4    ( <-- 4 = 4 = read)
        2  |  a.txt |  4
        2  |  c.exe |  1    ( <-- 1 = execute)

Estoy interesado en encontrar a todos los usuarios que tienen un conjunto de marcas particular (por ejemplo: escribir) en CUALQUIER registro. Para hacer esto en una consulta, me di cuenta de que si obtuviera todos los permisos del usuario juntos obtendría un valor único que es la "suma total" de sus permisos:

  user_id  |  all_perms
-----------+-------------
        1  |  6        (<-- 6 | 4 = 6)
        2  |  5        (<-- 4 | 1 = 5)

*Mi tabla real no tiene que ver con archivos o permisos de archivos, sino un ejemplo.

¿Hay alguna manera de que pueda realizar esto en una declaración? A mi modo de ver, es muy similar a una función agregada normal con GROUP BY:

SELECT user_id, SUM(permissions) as all_perms
FROM permissions
GROUP BY user_id

... pero obviamente, alguna función mágica "en modo de bit" o "en lugar de SUM". Alguien sabe algo como eso?

(Y para los puntos de bonificación, ¿funciona en oráculo?)

Respuestas a la pregunta(5)

Su respuesta a la pregunta