usuarios usuario una tipos sobre sistema rol privilegios permisos gestor definicion datos dar asignar asignaciĆ³n database database-design user-permissions

database - usuario - roles y privilegios en mysql



Mejor forma de representar los roles de los usuarios en la base de datos (2)

Su primer enfoque es factible cuando el número de roles / permisos diferentes es relativamente pequeño. Por ejemplo, si solo tiene dos tipos de usuarios: normal y administrador, una tabla separada parece una exageración. is_admin columna individual is_admin es suficiente y simple.

Sin embargo, este enfoque no escala una vez que el número de roles excede unos pocos. Tiene varios inconvenientes:

  • la tabla de usuario se vuelve muy "ancha" y tiene muchas columnas vacías (desperdiciando espacio)

  • agregar un nuevo rol al sistema requiere modificar la tabla de usuarios. Esto es engorroso y puede llevar mucho tiempo para una gran base de datos de usuarios

  • enumerar las funciones de los usuarios requiere enumerar todas las columnas, a diferencia de la consulta simple de la base de datos.

¿Representa los permisos de usuario mejores en la tabla de usuarios o mejor en su propia tabla de permisos?

Permisos en la tabla de Usuario
Poner permisos en la tabla de usuario significa hacer una columna para cada permiso en la tabla de usuario. Una ventaja es que las consultas deben ejecutarse más rápido porque no son necesarias las uniones cuando se relacionan los usuarios con los permisos de los usuarios. Una desventaja es que tener muchas columnas de permisos satura la tabla de usuarios.

Permisos en la tabla Permiso unidos a la tabla Usuario con relación muchos a muchos
Hacerlo de esta forma separa de forma limpia los permisos de la tabla de usuarios, pero requiere una unión a través de dos tablas para acceder a los permisos de usuario. El acceso a la base de datos puede ser más lento, pero el diseño de la base de datos parece más limpio.

Tal vez mantener los permisos en una tabla separada sea mejor cuando hay muchos permisos. ¿Cuáles son otras consideraciones al tomar esta decisión y qué diseño es mejor en diversas situaciones?


El patrón estándar para el control de acceso se llama Seguridad basada en roles . A medida que crece la cantidad de usuarios y la cantidad de tipos de permisos que necesita, la administración de sus enlaces de usuario a permiso puede ser cada vez más difícil.

Por ejemplo, si tiene cinco administradores y cincuenta usuarios, ¿cómo mantiene sincronizados los permisos de cada grupo? Cuando uno de sus usuarios es promovido a un administrador, ¿cuántas ediciones necesita realizar? La respuesta es crear dos intersecciones: usuarios-a-roles y roles-a-permisos .

Esta solución se describe (incluido el diagrama de relaciones entre entidades) en mi respuesta a esta pregunta .