jueves, mayo 22, 2014

oracle audit by session no funciona



Cuando se establecen auditorías ORACLE con el comando audit hay dos variantes que hay que valorar: BY SESSION o BY ACCESS.

Inicialmente la idea era que BY ACCESS crea un registro de auditoría por cada registro al que se accede, y BY SESSION crea un registro de auditoría por cada operación realizada en la sesión abierta.

Por lo tanto, en una select full a una tabla, BY ACCESS crea un registro de auditoría por cada registro de la tabla, y en cambio BY SESSION registra una select sobre la tabla.

Ahora vienen las malas noticias: en Oracle11g, tanto BY ACCESS como BY SESSION te generará el mismo número de registro de auditorías, aunque eso sí, BY ACCESS tiene información más detallada en cada registro.

Fuente: http://docs.oracle.com/cd/B28359_01/network.111/b28531/whatsnew.htm#DBSEG000

The BY SESSION clause of the AUDIT statement now writes one audit record for every audited event. In previous releases, BY SESSION wrote one audit record for all SQL statements or operations of the same type that were executed on the same schema objects in the same user session. Now, both BY SESSION and BY ACCESS write one audit record for each audit operation. In addition, there are separate audit records for LOGON and LOGOFF events. If you omit the BY ACCESS clause, then BY SESSION is used as the default.  

martes, marzo 25, 2014

Perl, consultar el directorio activo (active directory de Windows)

Para consultas del directorio activo tendremos que instalar el módulo NET::Ldap.
Hay muchas referencias en Internet para el acceso a servidores LDAP, pero pocas se refieren al Directorio Activo de Microsoft (Active Directory).

Me he descargado el DWIMPerl para Windows, y voy a utilizar el editor perl que trae el mismo, que se llama PADRE.

Lo primero es conseguir conectarse al servidor.


Si el resultado es SUCCESS, ya podemos continuar con las consultas.

En este momento deberíamos conectarnos al directorio activo y mirar en una de las entradas que nos interesan cómo se llaman los ATRIBUTOS por lo que podemos preguntar.


Ahora que ya tenemos claro eso, podemos terminar el programa que aplica un filtro a la consulta, y luego recorre las entradas devueltas imprimiendo en pantalla los atributos que nos interesen:


Así queda el programa:


#!/usr/bin/perl

 use Net::LDAP;

 my $usuario = "dominio\\usuarioAdministrador";
 my $password = "password";
 
 my $servidorLdap = "ldap://servidor.dominio.es";

 # conexion al servidor
 $ldap = Net::LDAP -> new ($servidorLdap) || die "No me he podido conectar al servidor\n";

 # validarnos en el servidor
 $mensaje = $ldap -> bind($usuario, password => $password);
 $resultado = sprintf("%s",$mensaje->error);
 
 # Establecemos el filtro que nos interesa: 
 $filtro = "objectClass=group";

 # Lanzamos la consulta:
 $resultado = $ldap -> search(filter => "(&($filtro))", base => "DC=dominio,DC=es");
 
 # Miramos el numero de entradas que cumplen el filtro:
 my $numero = $resultado -> count;
 
 # Por cada respuesta escribimos en una linea el nombre y cuando ha cambiado la entrada:
 my $count = $resultado -> count;
 for (my $i=0; $i<$count; $i++) {
     $entry = $resultado->entry($i);
     print $entry->get_value('CN').", ".
           $entry->get_value('whenChanged')."\n";
}

 # Nos desconectamos:
 $mensaje = $ldap->unbind;

lunes, marzo 24, 2014

Linux, añadir un disco al servidor y crear el filesystem



Cuando añadimos un disco físico al servidor, todavía no está utilizable por el sistema operativo.

En el directorio /dev se habrá creado el fichero de dispositivos. El primer problema es encontrar el fichero del nuevo disco.

Normalmente, el disco /dev/sda será el principal.
Tendremos el /dev/sda1como una partición de ese disco principal.
/dev/sda2 será una segunda partición.

Seguramente /dev/sdb será el nuevo disco que hemos añadido.

¿Cómo continuamos?

1.-Crear a nivel de sistema operativo el volumen físico ("Physical volume"):
pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.

2.-Comprobar si realmente se ha creado bien:

pvdisplay /dev/sdb
 

  "/dev/sdb" is a new physical volume of "150.00 GB"

  --- NEW Physical volume ---

  PV Name               /dev/sdb

  VG Name               

  PV Size               150.00 GB

  Allocatable           NO

  PE Size (KByte)       0

  Total PE              0

  Free PE               0

  Allocated PE          0

  PV UUID               kojD15-fcL3-HTZf-6VOm-Oc0H-apH7-qzXNuL

3.-Crear el "Volume Group". El que estoy creando es para el software introscope, por lo que lo llamaré vgintroscope.
En este ejemplo lo voy a crear con extensiones de 32Mb.

vgcreate vgintroscope /dev/sdb –s 32

4.-Ahora tenemos que ver cómo se ha creado el "Volume Group":


vgdisplay vgintroscope
  
  --- Volume group ---

  VG Name               vgintroscope

  System ID            

  Format                lvm2

  Metadata Areas        1

  Metadata Sequence No  1

  VG Access             read/write

  VG Status             resizable

  MAX LV                0

  Cur LV                0

  Open LV               0

  Max PV                0

  Cur PV                1

  Act PV                1

  VG Size               149.97 GB

  PE Size               32.00 MB

  Total PE              4799

  Alloc PE / Size       0 / 0  

  Free  PE / Size       4799 / 149.97 GB

  VG UUID               AfWior-uCD3-T22E-V2Cd-aabm-BCi7-jGYnNA


5.-Hay que crear el volumen lógico. En mi caso voy a asignarle todo el tamaño disponible al nuevo volumen. Normalmente se le asigna un tamaño menor con el fin de tener posibilidades de crecimiento en el futuro.

En el punto anterior (4º), he visto que el VG tiene 4799 extensiones. Como he dicho voy a asignar todas las extensiones al lvintroscope.

lvcreate -l 4799 vgintroscope -n lvintroscope
  Logical volume "lvintroscope" created


6.-Crear el FileSystem. Elijo el formato ext3.


mkfs -t ext3 /dev/vgintroscope/lvintroscope
mke2fs 1.39 (29-May-2006)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

19660800 inodes, 39313408 blocks

1965670 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=4294967296

1200 block groups

32768 blocks per group, 32768 fragments per group

16384 inodes per group

Superblock backups stored on blocks:

        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,

        4096000, 7962624, 11239424, 20480000, 23887872



Writing inode tables: done                           

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done



This filesystem will be automatically checked every 39 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.



7.-Crear el directorio y montar el filesystem en ese directorio:
mkdir /introscope
mount /dev/vgintroscope/lvintroscope /introscope

8.-Si se quiere que se haga el montaje automáticamente cada vez que se reinicia el servidor, entonces hay que meter la entrada correspondiente en el fichero /etc/fstab.

Saludos,
Aitor.

viernes, marzo 07, 2014

Linux zerbitzariari disko berri bat gehitu



Linux zerbitzariari disko bat gehitu ondoren, oraindik sistema eragilearentzat ez dago erabilgarri.
/dev direktorioan aurkitu duen diskaren "device" fitxategia sortuko zen.
Lehenengo arazoa, diskoa aurkitzea da.

Normalean /dev/sda diskoa nagusia izango da.
/dev/sda1 diska naguziaren partizio bat.
/dev/sda2 diska naguziaren beste partizio bat.

¿Zer egin behar da orain?

Seguraski, /dev/sdb izango da jarri dugun disko berria.

1.-"Physical volume" edo bolumen fisikoa sortu:
pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.

2.-Begiratu benetan ondo sortu den, eta tamaina egokia duen:

pvdisplay /dev/sdb
 

  "/dev/sdb" is a new physical volume of "150.00 GB"

  --- NEW Physical volume ---

  PV Name               /dev/sdb

  VG Name               

  PV Size               150.00 GB

  Allocatable           NO

  PE Size (KByte)       0

  Total PE              0

  Free PE               0

  Allocated PE          0

  PV UUID               kojD15-fcL3-HTZf-6VOm-Oc0H-apH7-qzXNuL

3.-Sortu "Volume Group"-a. Nirea Introscope softwarearentzat da. Beraz vgintroscope deituko diot.
Adibide honetan 32Mb-ko luzapenak edo zatiak erabiltzen ditut.


vgcreate vgintroscope /dev/sdb –s 32

4.-Ikusi nola sortu den "Volume Group"-a:


vgdisplay vgintroscope
  
  --- Volume group ---

  VG Name               vgintroscope

  System ID            

  Format                lvm2

  Metadata Areas        1

  Metadata Sequence No  1

  VG Access             read/write

  VG Status             resizable

  MAX LV                0

  Cur LV                0

  Open LV               0

  Max PV                0

  Cur PV                1

  Act PV                1

  VG Size               149.97 GB

  PE Size               32.00 MB

  Total PE              4799

  Alloc PE / Size       0 / 0  

  Free  PE / Size       4799 / 149.97 GB

  VG UUID               AfWior-uCD3-T22E-V2Cd-aabm-BCi7-jGYnNA


5.-Orain, bolumen logikoa sortuko dugu. Tamania guztia emango diot bolumen honentzat. Askotan tamania txikiagoa ematen zaio, aurrerako, beharra izanez gero handitzeko. Laugarren puntuan, VG horrek 4799 zati dituela ikusten dut. Zatitxo guztiak izango dira lvintroscope-rentzat.

lvcreate -l 4799 vgintroscope -n lvintroscope
  Logical volume "lvintroscope" created


6.-Sortu Fitxategi sistema (filesystem). Ext3 formatua aukeratzen dut.


mkfs -t ext3 /dev/vgintroscope/lvintroscope
mke2fs 1.39 (29-May-2006)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

19660800 inodes, 39313408 blocks

1965670 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=4294967296

1200 block groups

32768 blocks per group, 32768 fragments per group

16384 inodes per group

Superblock backups stored on blocks:

        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,

        4096000, 7962624, 11239424, 20480000, 23887872



Writing inode tables: done                           

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done



This filesystem will be automatically checked every 39 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.



7.-Sortu direktorioa eta aurreko puntuan sortu duzun filesystem-a puntu horretara lotu:
mkdir /introscope
mount /dev/vgintroscope/lvintroscope /introscope

8.-Zerbitzaria pizten den bakoitzean, automatikoki muntaia egitea nahi baduzu, /etc/fstab fitxategian sarrera hori sartu beharko duzu.

Agur bero bat.
Aitor

martes, febrero 11, 2014

Regreso

Después de tres meses sin escribir nada, creo que ha llegado la hora de retomar la actividad del blog. ¿Qué ha motivado esta sequía divulgadora? Quien sabe, probablemente la falta de feedback, aunque también es verdad que nuevas inquietudes, para más detalle de tipo existencial, han provocado que haya destinado gran parte del tiempo libre a la lectura, sin más, que ya se sabe que requiere de muchas horas libres.

Un mail llamando la atención sobre el abandono del blog ha sido suficiente para retomar esta actividad que espero que ayude a muchos, así como otros blogs me ayudan a mí en mi trabajo diario.

Saludos,
Mikelats.

sábado, noviembre 09, 2013

Como desinstalar Windows Live Essentials

Un amable seguidor respondía perfectamente cómo se desinstala en este sitio:


Al parecer, las explicaciones no le sirvieron al que realizó la pregunta, pero os aseguro funciona. Reproduzco exactamente lo que aparece en la sección de comentarios:



WINDOWS XP:

1.
Haga clic en Inicio y luego haga clic en Ejecutar.
2. Tipo C: \ Archivos de programa \ Windows Live \ installer \ wlarp.exe continuación, pulse Enter.
3. Una nueva ventana se abrirá. Seleccione desinstalar y haga clic en Continuar.
4. Seleccione el programa en vivo de Windows que desea eliminar y haga clic en Continuar.
5. Siga las instrucciones en pantalla.

WINDOWS VISTA:

1. Haga clic en el botón Inicio.
2. Tipo C: \ Archivos de programa \ Windows Live \ installer \ wlarp.exe en el cuadro Iniciar búsqueda y presione Enter.
3. Una nueva ventana se abrirá. Seleccione desinstalar y haga clic en Continuar.
4. Seleccione el programa en vivo de Windows que desea eliminar y haga clic en Continuar.
5. Siga las instrucciones en pantalla.


Al ejecutar WLARP nos saldrá esta ventana:



Sólo hay que tener en cuenta un pequeño detalle que me ha ocurrido en un Windows Vista:

Si abres el interprete de comandos y haces:
cd "c:\Archivos de Programa"
Al menos en mi caso, hago el dir y no tengo permisos para ver nada.

La solución: directamente hacer:
cd "c:\Archivos de programa\Windows Live\installer"

Saludos,

jueves, noviembre 07, 2013

Guardar página web como MHT en Chrome

A diferencia del Internet Explorer o de Firefox, en Chrome no tendremos la opción de elegir al momento, de qué forma guardar la página HTML que estamos viendo. Se guardará como configuremos el navegador. Después de cambiar la configuración hay que reiniciarlo.

Para entrar a la configuración, tecleamos lo siguiente en la barra de direcciones:
chrome://flags/

Buscamos la opción "GUARDAR PÁGINA COMO MHTML" y clic en "HABILITAR". Luego a reiniciar el Chrome.

A partir de ahora, al guardar una página siempre se guardará como MHTML.

Saludos,


sábado, octubre 26, 2013

Manipulación de Excel desde VB.NET

Hola,
Recientemente publiqué como se hace la manipulación de un fichero Excel desde FreePascal-Lazarus. Ahora toca el equivalente desde VB.NET.

Para el caso de .NET hay mucha más información en Internet. En este enlace por ejemplo, se hace una utilización básica: http://social.msdn.microsoft.com/Forums/vstudio/en-US/4fe0c8c2-e952-4196-96d7-b833292a9c2e/open-an-excel-file-using-vbnet?forum=vbgeneral

En Visual Studio 2010, habría que agregar la referencia "Microsoft Excel Object Library" (después del término Excel suele aparecer la versión 11.0, 12.0, 14.0,...). Para agregar la referencia recordemos que hay que ir al Menú PROYECTO, Opción AGREGAR REFERENCIA y Pestaña COM.

Imaginemos que estamos haciendo un proyecto VB.NET de tipo APLICACIÓN DE CONSOLA. En ese caso el programa por defecto consiste en un MÓDULO, llamado MODULE1. Antes del cuerpo de MODULE1 tenemos que importar el espacio de nombres siguiente:

Imports Excel = Microsoft.Office.Interop.Excel

Ahora ya podemos utilizar tranquilamente las funciones y procedimientos para acceder a las celdas de las hojas y de los libros Excel que queramos. En cuanto termine el programa que estoy haciendo subiré el código fuente. Mientras tanto, la utilización más básica, está en el enlace que he puesto arriba.

Saludos.

lunes, septiembre 16, 2013

Como instalar 7zip en Red Hat, Fedora, CentOS


Instalación de 7zip (compresor, cifrador (AES, etc.), descompresor ZIP, RAR, ...)


Sitio web: www.7zip.org

  1. Abrir la terminal
  2. Cambiar al usuario root: su - root
  3. yum install p7zip
Saludos,

lunes, septiembre 09, 2013

Access no se abre si lo ha abierto otro usuario

Hay cosas en informática que no dejarán de sorprenderme. No estamos hablando de que un usuario abre el Access en modo exclusivo e impide abrir ese access a otro usuario.

Este es el supuesto:
  1. El Access está en una unidad de red.
  2. Es Access 2003. Para más datos Service Pack3.
  3. Los usuarios la abren de forma "normal" (sin hacer uso del modo exclusivo). Tampoco abren ningún formulario ni listado ni nada en "modo diseño". O sea, que el Access está en modo compartido.
  4. Algunos equipos son Windows7 y otros Windows Vista.
Y lo que ocurre: Si un usuario abre el access, al resto de usuarios ya no les funciona el acceso directo. Hacen doble clic en él y no pasa nada (sin ningún mensaje de error ni advertencia).

Solución para salir del paso: Si en lugar del acceso directo, los usuarios abren Access y desde Access abren la base de datos (el fichero .mdb), entonces consiguen abrirla bien.

Solución definitiva:

  1. Abrimos el Internet Explorer.
  2. Vamos a "Herramientas", "Opciones de Internet".
  3. Vamos a la pestaña "Seguridad".
  4. Seleccionar el icono de "Intranet Local".
  5. Clic en el botón "Sitios".
  6. Clic en el botón de "Opciones Avanzadas".
  7. Agregar el siguiente sitio teniendo en cuenta que SERVIDOR es el nombre del servidor dónde está el fichero Access, o su IP:
file://SERVIDOR
file://ip-servidor

Problema añadido que he encontrado: La solución funciona con Explorer8 y Explorer 10 (me imagino que también en Explorer 9). Sin embargo, uno de los PC-s Windows Vista, todavía tenía el Explorer7. Hasta que lo he actualizado a Explorer8 no ha funcionado la cosa.

Saludos,
Mikelats

P.D.: Esto que he contado tiene que ver con una antigua entrada que publiqué al probar el Windows Vista en el año 2008: http://aitoreus.blogspot.com.es/2008/05/mi-experiencia-con-windows-vista.html

lunes, septiembre 02, 2013

FreePascal: Fecha y Hora



Hola,
Continuemos un poco más con FreePascal. Hoy tocan las funciones de Fecha y Hora.
Hay diferentes funciones para hacer cosas similares. Yo recomendaría utilizar las funciones incluidas en la unidad sysutils.

La documentación oficial:



Uso del TIME para obtener la hora actual:




Uso del DATE para obtener la fecha:






CONVERSIÓN DE TIPOS:

Normalmente leemos la fecha de un fichero de texto o base de datos, lo que nos obligará normalmente a realizar la conversión entre tipos tanto al escribirla como al leerla.



Conversión de string en fecha:

Conversión de fecha a string:


Ejemplo de uso: En mi ejemplo he creado una variable Regla de tipo Record. Voy a leer de un fichero de texto una fecha:

Leo 10 caracteres a partir del carácter número 71:

regla.fecha:= Copy(linea,71,10);

Elimino los espacios vacíos:
 regla.fecha:= StringReplace(regla.fecha,' ','',[rfReplaceAll]);

Si no está todo vacío (o sea, que hay una fecha), intento la conversión a TIPO FECHA:
if regla.fecha <> '' then
      TryStrToDateTime(regla.fecha, regla.tdatetimeFecha);


OPERACIÓN DE COMPARACIÓN CON FECHAS:

Las fechas se pueden comparar entre sí.

if fecha1 < fecha2 then


CONVERSIÓN DE FECHA A STRING CON FORMATO:

Writeln(FormatDateTime('DD MM YYYY',fecha1);

Saludos.