sábado, 27 de septiembre de 2008

¿Que son las transacciones SQL ?

Son un conjunto de instrucciones SQL que tienen la cualidad de ejecutarse como una sola unidad, es decir o se ejecutan todas o no se ejecuta ninguna.

A las tablas capaces de soportar transacciones se les conoce como ACID (Atomicidad, Consistencia, Aislamiento , Durabilidad) en inglés (Atomicity, Consistency, Isolation & Durability)

  1. Atomicidad :=> Algo que no puede dividirse, osea todas las consultas son tratadas como una sola y estas solo se ejecutan cuando todas son correctas en el caso de existir un error no se ejecuta nada.

  2. Consistencia :=> Esto esta ligado a la integridad referencial, es decir solo se pueden escribir datos validos respetando los tipos de datos declarados y la integridad referencial.

  3. Aislamiento :=> Cada transacción es ejecutada independientemente de otra transacción o mejor dicho una tras otra, luego de que estas transacciones son ejecutadas (exitosas o incorrectas) los cambios son visibles para el resto de los usuarios.

  4. Durabilidad :=> Cuando se completa una transacción con éxito los cambios se vuelven permanentes.

Ejemplo

Veamos con el siguiente ejemplo cuan importante puede ser una transacción.

Supongamos que dos vendedores de una tienda consultan las disponibilidad de televisores LCD y solo hay uno es stock (como estos están de moda) para realizar una venta y solo queda un televisor en Stock.

Primero solo con SQL

Vendedor 1 : SELECT stock FROM televisores;

Vendedor 2 : SELECT stock FROM televisores;

Vendedor 1 : UPDATE televisores SET stock = stock -1;

Vendedor 2 : UPDATE televisores SET stock = stock -1;

Primero al hacer los SELECT cada vendedor vera en su pantalla que hay disponible 1 televisor.

El vendedor 1 venderá el televisor dejando el stock en 0, luego el vendedor 2 que no sabe que el televisor ya ha sido vendido venderá el televisor (pensando que hay stock) y el stock sera -1 ya que el último ha sido vendido por el vendedor 1.

Si fuese la vida real habrá un cliente que deberá esperar mas de lo normal para que llegue su televisor.


Ahora los mismo con Transacciones

Vendedor 1 : START TRANSACTION;

Vendedor 1 : SELECT stock FROM televisores;

Vendedor 1 : UPDATE televisores SET stock = stock -1;

Vendedor 1 : COMMIT; (ejecuta)


Vendedor 2 : START TRANSACTION;

Vendedor 2 : SELECT stock FROM televisores;

Vendedor 2 : ROLLBACK; (sale de la transacción sin hacer nada mas)

Vendedor 2 : Avisa a cliente que no hay disponibilidad y pregunta si quiere comprarlo y esperar unos días hasta que nuevamente exista stock.


Como hemos visto las operaciones se hicieron ordenadamente permitiendo la consistencia de los datos una vez que el primer vendedor termino la operación el vendedor 2 realizo sus consultas.


Ejemplo 2 (Algo Mas trabajado)

Este ejemplo muestra como realizar operaciones en una transacción tenemos 1 una tabla llamada departamentos con la siguiente estructura y registros


CREATE TABLE `departamentos` (
`CODIGODEP` INTEGER(11) NOT NULL DEFAULT '0',
`NOMBREDEP` VARCHAR(100) ,
`PRESUPUESTO` INTEGER(11) ,
PRIMARY KEY (`CODIGODEP`)
)ENGINE=InnoDB

INSERT INTO `departamentos` (`CODIGODEP`, `NOMBREDEP`, `PRESUPUESTO`) VALUES
(1, 'Informatica', 300000),
(2, 'Personal', 200000),
(11, 'Calidad', 150000),
(13, 'Seguridad', 450000),
(56, 'Recursos Humanos', 900000),
(77, 'Administracion', 1500000);

y ahora crearemos una nueva tabla departamentos2 y asignaremos el 30% del dinero del presupuesto de cada departamento a la tabla departamentos2 , es decir en presupuesto de departamentos restaremos el 30% de su presupuesto y los asignaremos a los departamentos de de la tabla departamentos2. (las estructuras serán iguales e incuso mantendremos los mismos códigos de y nombres de los departamentos)


CREATE TABLE `departamentos2` (
`CODIGODEP` INTEGER(11) NOT NULL DEFAULT '0',
`NOMBREDEP` VARCHAR(100) ,
`PRESUPUESTO` INTEGER(11) ,
PRIMARY KEY (`CODIGODEP`)
)ENGINE=InnoDB

y ahora las transacciones


START TRANSACTION;
insert into `departamentos2`
select codigodep, nombredep, presupuesto * 0.30 from `departamentos`;
update departamentos set presupuesto = presupuesto - (presupuesto * 0.30);
COMMIT;


El resultado ha sido una tabla de posee todos los registros de departamentos 1 y los presupuestos de ambas tablas han sido modificados correctamente sumando y restando respectivamente un 30%.


Con esto evitamos que algún otro usuario este modificando la tabla departamentos cuando realizamos la operación

Jlara

viernes, 26 de septiembre de 2008

Instalar Java Development Kit (JDK) y Java Runtime Environment (JRE) en Ubuntu Linux

En este pequeño tutorial explicare como instalar el JRE correcto en esta versión de Linux, ya que cuando vamos a descargar los archivos desde la página de Sun hay tantos que aveces no sabemos cual se debe instalar.

Instalación probada en ubuntu 7.10 desktop, Ubuntu 8.04 desktop y server.

Paquetes necesarios:

  1. => sun-java6-bin : Sun Java Runtime Environment (JRE) 6
  2. => sun-java6-demo : Sun Java Development Kit (JDK) 6 demos
  3. => sun-java6-jdk : Sun Java Development Kit (JDK) 6
  4. => sun-java6-jre : Sun Java Runtime Environment (JRE) 6
Instalar Sun Java 6

Abra un intérprete de comandos (terminal) y escriba lo siguiente para instalar JDK y JRE:

$ sudo apt-get install sun-java6-bin sun-java6-jre sun-java6-jdk

Aqui aparecerá un mensaje donde indicara todas las dependencias de paquetes a instalar, presionamos S para aceptar.

Instalación por defecto la versión Java

Ubuntu Linux viene con update-java-alternatives utilidad para las actualizaciones de todas las alternativas que pertenecen a un kit de desarrollo para el lenguaje Java. Para seleccionar, JVM de Sun a lo dispuesto escriba:

$ sudo update-java-alternatives -s java-6-sun

También es necesario editar un archivo llamado /etc/jvm . Este archivo define por defecto el orden de búsqueda de sistema para jvm (java virtual machine) . Cada lista de JVM en el directorio JAVA_HOME debe estar en este archivo. La JVM por defecto del sistema es el primero disponible de arriba a abajo. Abrir /etc/jvm

$ sudo vi /etc/jvm

Asegúrate de añadir /usr/lib/jvm/java-6-sun en la parte superior de la lista JVM.

El archivo debe decir lo siguiente:

/usr/lib/jvm/java-6-sun
/usr/lib/jvm/java-gcj
/usr/lib/jvm/ia32-java-1.5.0-sun
/usr/lib/jvm/java-1.5.0-sun
/usr

Guardar y cierrar el archivo. (Esc :wq)

Configuración de la variable de entorno

También es necesario configurar y JAVA_HOME variable PATH (en todo el sistema) de configuración . Abre tu $ HOME / .bash_profile o /etc/profile :

$ vi $HOME/.bash_profile

Agregar siguiente línea:

export JAVA_HOME=/usr/lib/jvm/java-6-sun
export PATH=$PATH:$JAVA_HOME/bin


Guardar y cierrar el archivo. (Esc :wq)

Prueba tu nuevo JDK

Escriba el siguiente comando para mostrar la versión:

$ java -version

Debe mostrar un mensaje como este:
java version "1.6.0_03"
Java(TM) SE Runtime Environment (build 1.6.0_03-b05)
Java HotSpot(TM) Server VM (build 1.6.0_03-b05, mixed mode)

(Si ves esto felicidades ya tienes todo lo necesario instalado)
Primer programa (Java Hola Mundo)

$ vi holaMundo.java

Escriba el siguiente código:

public class holaMundo{
public static void main(String[] args) {
System.out.println("Hola, Mundo!");
}
}

Guardar y cerrar el archivo. holaMundo.java compilar y ejecutar el programa escribiendo dos instrucciones:

$ javac holaMundo.java
$ java holaMundo


Salida:

Hola, Mundo!





Personalizando nuestra consola con Linux Logo

Linux logo es un pequeño script que permite ver el logo de la distribuccion Linux (solo lo he usado con Debian) en la pantalla inicial de Linux.

Por lo general utilizo debian para la instalación de servidores sin entorno grafico por lo que me resultó interesante tener esta aplicación cada vez que accedo al equipo.


Instalación:

apt-get install linuxlogo (También se puede utilizar aptitude).

Una vez instalado editamos como superusuario el siguiente fichero etc/inittab y nos dirigimos a la siguiente linea 1:2345:respawn:/sbin/getty 38400 tty1 donde tty1 es la primera terminal virtual (ejemplo presionando Alt + F2 se abrira la tty 2).

Modificamos la linea quedando de esta menera:

1:2345:respawn:/sbin/getty -f /etc/issue.linuxlogo 38400 tty1 (Se puede hacer lo mismo con cada terminal para que en todas nos aparezca el logo)

Ahora reiniciamos :

/etc/init.d/linuxlogo restart

Ahora cada vez que entremos al equipo nos aparecera el Logo.

Si queremos verlo también por putty para los que se conectan ssh desde windows a Linux

linux_logo > /etc/motd

Existen logos para todas las distribucciones de linux (si lo instalan en redhat, fedora, centos o cuaquier deribado deben utilizar yum en lugar de apt)


Jlara

Redes sociales e información pública

Este post, aunque ya se ha hablado mucho sobre este tema, va a tratar sobre ese gran contenedor de información que es Internet y las redes sociales.

Ahora bien, ¿qué pasa con la información de Internet?, generalmente el usuario da por buena cualquier información que encuentre sobre un tema determinado. Podría ser cierto, pero... ¿nos podemos fiar?, si somos un poco paranoicos…

¿Qué pasa con las redes sociales?

Si intentamos darnos de alta en una red social, sólo nos piden nombre y apellidos (cosa muy fácil de mentir) y una dirección de correo electrónico (siempre se pueden crear cuantas anónimas o con nombres falsos), y una fecha de nacimiento. Con estos datos, yo mismo podría hacerme pasar por cualquier persona y difundir datos falsos, despectivos o incluso incriminatorios de una persona pública o de una empresa. Porque… ¿por qué no hacerme pasar por George Bush o Vladímir Putin?, o por ejemplo podría hacerme pasar por un ingeniero del CERN (que ahora está muy de moda) y lanzar rumores sobre el funcionamiento del mismo o incluso por qué no, del fin del mundo?

¿Cuánto daño puede hacer una información falsa en Internet?,

Depende, ya que influyen muchos factores: repetición, medio de publicación, etc. Por eso se hace cada vez más necesario el poder conocer y cuantificar la mayor cantidad de información que esté “circulando” por la red, para poder detectar y mitigar en la medida de lo posible estos riesgos.

José María Arce Guillén S21sec labs

Linux también tiene virus


En los últimos años ha crecido el malware diseñado para Linux, infectando gran cantidad de ordenadores y servidores con este sistema operativo.

Aunque Linux es utilizado por una minoría en comparación con el número de usuarios de Windows, al igual que está pasando Mac OS X, ambos sistemas operativos cada vez tienen más popularidad entre los usuarios. Por este motivo, los cibercriminales están creando malware desarrollado para que afecte específicamente a los equipos Apple u ordenadores con Linux.

Como destaca Sophos en su Informe de Seguridad de julio de 2008 sobre cibercrimen, el problema del malware contra Apple es actualmente muy pequeño si se compara con el lanzado contra Windows, pero esto no significa que no haya riesgo. Desde la aparición del primer malware contra Mac OS X a finales de 2007 -generado por motivos económicos- ha habido varias tentativas por parte de los hackers para infectar y robar desde ordenadores Mac.

El mismo informe señala que desde hace 6 años el malware RST-B, diseñado para Linux, ha infectado un gran número de ordenadores y servidores que usan este sistema operativo. Según los datos de SophosLabs, el nivel más alto de infección de Linux/RST-B con ordenadores comprometidos está en EE.UU, seguido de China y Alemania.

Pese a que Linux se presenta en varias distribuciones, el kernel o núcleo sobre el que se desarrollan las diferentes versiones es siempre el mismo, y por esta razón los virus creados para Linux se ejecutan en cualquier distribución pero pueden no tener el mismo efecto.

(fuente vnunet.es)


Transacciones y bloqueo de Tablas MySQL

Por defecto, MySQL se ejecuta con el modo autocommit activado. Esto significa que en cuanto ejecute un comando que actualice (modifique) una tabla, MySQL almacena la actualización en disco.

Esta modalidad de autocommit solo puede ser desactivada si se esta trabajando con tablas InnoDB (Que además son las únicas que soportan la integridad referencial en Mysql).

Para desactivar momentáneamente el autocomit ejecutamos el comando:

SET AUTOCOMMIT=0;

Luego de deshabilitar el autocommit (set autocommit = 0;) obligadamente tendremos que utilizar
obligadamente COMMIT para guardar o ROLLBACK para deshacer.

Si quiere deshabilitar el modo autocommit para una serie única de comandos, puede usar el comando
START TRANSACTION


Ejemplo:

Creare una nueva tabla en la Base de datos Empresa
:

CREATE TABLE `departamentos2` (
`CODIGODEP` INTEGER(11) NOT NULL DEFAULT '0',
`NOMBREDEP` VARCHAR(100),
`PRESUPUESTO` INTEGER(11) DEFAULT NULL,
PRIMARY KEY (`CODIGODEP`)

)ENGINE=InnoDB

y Ahora insertare registros de la tabla departamentos a departamentos2 mediante una transacción


START TRANSACTION;
SELECT @A := presupuesto
FROM departamentos
WHERE codigodep =11;
INSERT INTO departamentos2( codigodep, nombredep, presupuesto )
VALUES ( 11, 'prueba', @A );
COMMIT;

En el ejemplo anterior guarde el presupuesto del departamento 11 en la variable @A y luego asigne ese presupuesto en la tabla departamentos2

Ahora un ejemplo donde replicare todos los datos de un departamento en la tabla departamentos2

START TRANSACTION;
SELECT @A := presupuesto, @B := codigodep, @C := nombredep
FROM departamentos
WHERE codigodep =33;
INSERT INTO departamentos2( codigodep, nombredep, presupuesto )
VALUES (
@B , @C , @A
);
COMMIT ;


En el ejemplo anterior se copio todo un departamento al la tabla departamentos 2....

Se puede sumar los presupuestos y asignarlos así:

START TRANSACTION;
SELECT @A:=PRESUPUESTO FROM departamentos WHERE codigodep=11;
UPDATE departamentos2 SET PRESUPUESTO = PRESUPUESTO + @A WHERE codigodep=33;
COMMIT;


En este último ejemplo actualizo el presupuesto del departamento 33 de la tabla
departamentos2 sumandole todo el presupuesto de la departamento 11 de la tabla
departamentos

Al realizar una transacción SQL se debe tener en cuenta que la tabla se bloquea
quedando solo habilitada a lo que estamos realizando nosotros


martes, 9 de septiembre de 2008

Aumenta la creatividad de los cibercriminales

La media de páginas infectadas durante el primer semestre de 2008 es tres veces mayor que en el mismo periodo de 2007.

Once millones de malware

Sophos acaba de presentar un nuevo informe de seguridad que examina las tendencias de seguridad existentes y emergentes y ha identificado que los cibercriminales están incrementando su creatividad para utilizar nuevas técnicas en sus tentativas de defraudar dinero de los usuarios de Internet.
Se estima que el total del malware existente sobrepasa los once millones, de los que Sophos recibe aproximadamente 20.000 nuevas muestras de software sospechoso cada día, lo que supone un nuevo programa malicioso cada cuatro segundos

El informe de Sophos revela que la mayor parte de los ataques han sido diseñados para intentar engañar a los sistemas de seguridad tradicionales tales como el escaneo del correo electrónico. Durante la primera mitad de 2008 se ha visto una explosión de ataques vía web, la preferida por los hackers con motivos económicos. El 90 por ciento de estas páginas, que utilizan Caballos de Troya y programas espía, son sitios web legítimos. Algunos de ellos, pertenecientes a grandes y reconocidas compañías incluidas en Fortune 500, han sido hackeadas a través de ataques de Inyecciones SQL.

Según el informe de Sophos el sitio web que más malware aloja es Blogger (Blogspot.com), el sistema de publicación de blogs, propiedad de Google, que contabiliza el dos por ciento de todo el malware que reside en sitios web a nivel mundial.

Además, el Informe de Seguridad de Sophos detalla intentos de hackers y spammers de aprovecharse de sitios Web 2.0, tales como Facebook o LinkedIn, atacar dispositivos con sistemas operativos distintos a Windows, tales como Apple Macs y Linux, y la probabilidad de ataques emergentes contra usuarios del popular iPhone de Apple.

fuente (http://www.vnunet.es)