Чудове питання!
По-перше, давайте зробимо кілька припущень про "краще".
Я припускаю, що ви не дуже піклуєтеся про місце на диску - бітова маска ефективна з космічної точки зору, але я не впевнений, що це має велике значення, якщо ви використовуєте SQL-сервер.
Я припускаю, ви дбаєте про швидкість. Бітова маска може бути дуже швидкою під час використання обчислень, але ви не зможете використовувати індекс під час запитів бітової маски. Це не повинно мати великого значення, але якщо ви хочете знати, які користувачі мають доступ для створення, ваш запит буде приблизно таким
select * from user where permsission & CREATE = TRUE
(сьогодні в дорозі немає доступу до SQL Server). Цей запит не зможе використовувати індекс через математичну операцію - тож якщо у вас величезна кількість користувачів, це буде досить боляче.
Я припускаю, що ви дбаєте про ремонтопридатність. З точки зору ремонтопридатності, бітова маска не така виразна, як основний домен проблеми, як зберігання явних дозволів. Вам майже напевно довелося б синхронізувати значення прапорців бітової маски для декількох компонентів - включаючи базу даних. Не неможливо, але біль у спині.
Отже, якщо немає іншого способу оцінки "кращого", я б сказав, що шлях бітової маски не такий хороший, як зберігання дозволів у нормалізованій структурі бази даних. Я не згоден з тим, що це буде "повільніше, тому що вам потрібно зробити приєднання" - якщо у вас немає абсолютно нефункціональної бази даних, ви не зможете виміряти це (тоді як запит без переваг активного індексу може стати помітним повільніше з кількома тисячами записів).