Pregunta

Soy parte de un equipo que crea una aplicación web usando PHP y MySQL. La aplicación tendrá múltiples usuarios con diferentes roles. La aplicación también se utilizará de manera distribuida geográficamente.

Por consiguiente, necesitamos crear un sistema de control de acceso que controle los permisos de usuario para registros de bases de datos específicos, es decir, modifique las consultas de la base de datos para que solo se muestren registros específicos. Por ejemplo, para un usuario a nivel de ciudad, solo se deben mostrar los registros que se relacionan con la ciudad particular del usuario, mientras que para un usuario a nivel nacional, se deben mostrar los registros de TODAS LAS CIUDADES en el país.

Necesito ayuda para diseñar un sistema que pueda manejar este tipo de recuperación de información sin codificar la información en las consultas SQL.

Cualquier ayuda sería apreciada.

Gracias de antemano

¿Fue útil?

Solución

El diseño de la aplicación variará según las necesidades de seguridad requeridas.

Por ejemplo, ¿se almacena la información en varias bases de datos o en una sola base de datos? ¿Es importante presentar a cada TIPO de usuario un esquema de la base de datos que represente sus permisos particulares? Obviamente, las respuestas a estas preguntas sugieren si necesita un sistema más seguro para acceder a la base de datos o no.

Si lo hace, cree un usuario de base de datos para cada tipo de usuario que existirá en el sistema. Proporcione a cada usuario permisos para las tablas, vistas, procedimientos, etc. apropiados. Cuando un usuario se autentique en el sistema, deberá crear una conexión de base de datos condicional basada en el tipo de usuario para esa persona.

Para llegar al extremo, también puede ser apropiado controlar el acceso a la base de datos estrictamente a través de procedimientos almacenados. Luego, cada usuario de la base de datos solo tendría acceso a su conjunto necesario de procedimientos almacenados.

La implementación de seguridad en la base de datos puede ser difícil y aumenta la complejidad de la aplicación, así como el costo de mantenerla y disminuye la cohesión general en la aplicación IMO, pero también presenta un muro de seguridad muy estricto para cualquiera que quiera piratear o abusar del sistema.

Independientemente de lo que implemente en la base de datos por motivos de seguridad, obviamente también necesitará usar un mecanismo de sesión para almacenar el usuario autenticado actualmente y su tipo. Una manera fácil de cambiar la funcionalidad de un usuario en particular es encapsular las acciones disponibles de cada usuario (funciones o métodos de lectura) y sus atributos (o propiedades) dentro de una clase para representar al usuario específico. De esa forma, si dos personas acceden a Dashboard.php, verán con precisión los datos a los que tienen acceso.

Por último, puede controlar algunos de los controles de acceso (y probablemente tendrá que hacerlo) a través de la información almacenada sobre el usuario en la base de datos, como qué ciudades necesitan para ver la información o qué usuario supervisan. Luego, use esa información para crear colecciones de objetos a los que se pueda acceder desde sus objetos de dominio específicos del usuario.

Otros consejos

¿Los usuarios tendrán acceso directo al motor de la base de datos? Evítalo si puedes.

Haga que la aplicación se conecte a la base de datos con una cuenta de usuario dedicada que le proporciona solo los permisos que necesita TODA la aplicación. Haga el resto de la seguridad DENTRO de la aplicación basada en usuarios y roles definidos por la aplicación y una API personalizada simple.

Si estos usuarios pueden necesitar acceder y usar múltiples aplicaciones de este tipo, considere almacenar a los usuarios en una base de datos compartida separada y haga que las aplicaciones lo consulten usando la API personalizada compartida.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top