sql >> Base de Datos >  >> RDS >> Mysql

MySQL SecureString como cadena de conexión

Hay otras formas de hacerlo. Depende de quién crea que viene detrás de su cadena de conexión y qué tipo de acceso y niveles de habilidad van a tener. La cadena de conexión está ahí, en alguna parte, no importa cómo intentes ocultarla.

Sabiendo que la cadena de conexión podría ser pirateada, siempre asumo que será pirateada y tomo precauciones en el otro extremo.

Hacemos varias cosas en el extremo del servidor de base de datos para asegurarnos de que, incluso si la cadena de conexión está comprometida, los datos siguen siendo seguros.

  • El usuario asociado con la cadena de conexión prácticamente no tiene permisos en el servidor. Los únicos permisos que tienen son EJECUTAR y CONTROL en el ESQUEMA que contiene los Procedimientos almacenados.
  • El único acceso que tiene el front-end es a través de procedimientos almacenados. Nunca permitimos que el front-end envíe cadenas SQL.
  • Los datos se mantienen en un esquema separado de los ejecutables, en el esquema de DATOS, el usuario asociado con la cadena de conexión tiene CERO permisos, no pueden mirarlo, olerlo ni tocarlo.
  • Los procedimientos almacenados delegan los permisos a un usuario sin inicio de sesión que tiene suficientes permisos para ejecutar el proceso. (CON EJECUTAR COMO 'Usuario sin inicio de sesión')

Esto es todo lo que podemos hacer. No hemos encontrado una manera de evitar que la cadena de conexión quede expuesta de alguna manera en alguna parte.

En respuesta a la pregunta que Alex hizo a continuación. (demasiado largo para un comentario)

Nota. Lo siguiente es para MS SQL Server, puede aplicarse a otros sistemas DBMS, pero no puedo responder por ningún otro.

Una base de datos contiene esquema, el esquema contiene objetos de base de datos como tablas, vistas, procedimientos almacenados. El esquema le permite aislar los objetos de la base de datos, por ejemplo, si tiene un grupo de tablas que cualquier persona puede ver, entonces podrían incluirse en un esquema COMÚN, si tiene información de nómina que necesita asegurar, puede poner eso en un esquema de NÓMINA. Luego puede poner diferentes medidas de seguridad en el ESQUEMA según el tipo de objetos que se encuentran dentro de ellos. Gráficamente parecen carpetas en un disco duro y debajo de ellas están todos los objetos de la base de datos que contienen. Cuando enciende su servidor, hay varios esquemas que se crean automáticamente. Con el que está más familiarizado sería el esquema DBO. Es posible que no lo sepa si su administrador lo ha configurado como su esquema predeterminado.

Lo que hacemos es colocar todos los datos en un esquema DATA, esto significa que solo se permiten tablas. Entonces, si tuviéramos una base de datos de nómina, las tablas de datos entrarían en un esquema llamado dataPayroll.

Un procedimiento almacenado es un bloque o bloques de código SQL que el servidor de la base de datos puede ejecutar cuando se le solicita. Puede devolver una tabla de datos o un solo valor. Piense en ello como un método en C#.

Los procedimientos almacenados tienen parámetros de entrada y de retorno que se utilizan en el código SQL. Los procedimientos almacenados parametrizados son una sólida defensa contra los ataques de inyección SQL.

Nuestro protocolo dice que los procedimientos almacenados y las vistas se almacenan en un esquema precedido por 'prog'. Entonces, en el caso de la base de datos de nómina, todos los objetos que no son datos están dentro del esquema progPayroll.

El usuario definido por la cadena de conexión solo tiene permisos de control y ejecución en el esquema 'prog'. Esto les permite llamar al procedimiento almacenado. Al usuario definido por la cadena de conexión se le deniegan todos los demás permisos. A este usuario también se le niegan TODOS los permisos en cualquier otro lugar. En el procedimiento almacenado, el permiso para acceder a los datos se delega a un usuario SIN INICIO DE SESIÓN que tiene permiso para recuperar los datos del esquema de "datos" mediante el comando EXECUTE AS.

NO hay sql en el front-end. Todo lo que saben los programadores front-end es cuál es el nombre de los procedimientos almacenados, los parámetros y los tipos y valores devueltos.

De esta manera, incluso si el atacante logra extraer la cadena de conexión de su programa, todavía tiene mucho trabajo por hacer para poder hacer algo en su base de datos, ya que el usuario que tiene solo puede ejecutar un procedimiento almacenado.

Si no tiene idea de qué es esto, entonces realmente necesita que un programador de base de datos configure su sistema por usted.