If you have a delimited list, searching for users with a given role will become very expensive: effectively, you need to perform a FULL scan of this table and see all the values ββfor this column in each row, trying to see if it contains a given role.
A separate table (normalized, many-many relation) is the way to go, and with proper indexing you will not have a full scan.
eg:
User: UserId, Name, .... Role: RoleId, Name, .... UserRole: UserRoleId, UserId, RoleId
(UserRoleId is optional, you can also use PK for UserId + RoleId, I will not discuss here surrogate or composite keys here)
You will need an index (UserId, RoleId), which is UNIQUE, to ensure there are no duplicates. It will also help in any queries where you are trying to determine if a particular user has a specific role (WHERE userId = x AND roleId = y)
If you are viewing all the roles that a user has, you only need an index for UserId.
Conversely, if you are looking for all users of a given role, an index on just roleId will speed it up. If you do not fulfill this request or do it very rarely, then without this index, the speed will increase slightly for insert / update, since this is the least. This is a cautious act of balancing, which is database tuning.