msgbartop
Desarrollador Web, Android y iOS
msgbarbottom

Transacciones MySQL con Doctrine y Symfony

Lo primero de todo, ¿qué es una transacción MySQL? Una transacción en MySQL es la combinación de una o más consultas SQL que juntas forman una unidad de trabajo. El ejemplo clásico es el movimiento de dinero en un banco entre dos cuentas bancarias. Si la persona A quiere hacer una transferencia bancaria a la persona B, habrá dos consultas: 1) la que descuenta el dinero a la persona A y 2) la que aumenta el saldo de la persona B. Si falla la consulta 2, tenemos un problema: Le habremos descontado el dinero a la persona A pero la persona B nunca recibirá su dinero.

En casos como estos es necesario tomar estas dos consultas como un todo y si falla una de las dos operaciones, volver atrás y deshacer la operación. Para ello se utilizan las transacciones.

En este ejemplo vamos a ver como realizar transacciones con el ORM Doctrine y Symfony (no necesariamente debemos utilizar Symfony).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$conn = Doctrine_Manager::getInstance()->getCurrentConnection();
$conn->beginTransaction();
 
try{
 
    /** Hacemos las operaciones necesarias
      * para realizar la transferencia bancaria */
 
    $userA = UserTable::getById($userA_id);
    $userB = UserTable::getById($userB_id);
 
    $userA->money -= 20;
    $userA->save();
 
    $userB->money += 20;
    $userB->save();
 
    $conn->commit();
}
catch (Exception $e){
    $conn->rollBack();
    throw $e;
}

Si las dos operaciones se realizan con éxito, quedará reflejado en la base de datos. Si por el contrario cualquiera de las dos consultas fallará, se desharán los cambios (rollBack) y no se guardarán en la base de datos (mostramos el error y deberemos tratarlo según nuestros intereses).

Etiquetas: , , , ,

Cambiar puerto 22 del servidor ssh

Si queremos tener más seguridad en nuestro servidor, un truco fácil es el de cambiar el puerto del servidor ssh. Por defecto, la conexión se hace en el puerto 22, que es uno de los puertos más utilizados por scripts maliciosos para realizar ataques por fuerza bruta o denegación de servicio.

Cambiar el puerto del ssh es tan sencillo como hacer lo siguiente:

1
nano /etc/ssh/sshd_config

Editamos la linea dice

1
#Port 22

La descomentamos (quitamos la almoadilla) y cambiamos el 22 por el puerto que queramos. Nos tenemos que asegurar de que el puerto que elijamos no esté ya en uso (Aquí tenemos una lista de puertos). Por ejemplo, si elegimos el puerto 27, la línea quedará:

1
Port 27

Ahora editamos el archivo /etc/services

1
nano /etc/services

buscamos las líneas:

1
2
ssh         22/tcp
ssh         22/udp

y las cambiamos por el nuevo puerto que hemos seleccionado antes:

1
2
ssh         27/tcp
ssh         27/udp

Ahora paramos e iniciamos el servidor ssh:

1
/etc/init.d/ssh stop
1
/etc/init.d/ssh start

Y ya lo tenemos. A partir de ahora, cuando queramos acceder a nuestro servidor mediante ssh, deberemos especificar el puerto por el que nos queremos conectar. Por ejemplo:

1
ssh usuario@192.168.1.100 -p27

Puede que te salte algún error relacionado con las public keys. Es normal, ya que anteriormente ha detectado movimiento en el puerto 22. Simplemente hay que borrar esos public keys:

1
 rm ~/.ssh/known_hosts

A partir de ahora tendremos nuestro servidor ssh un poco más seguro.

Etiquetas: , ,