Mostrando las entradas con la etiqueta certificacion. Mostrar todas las entradas
Mostrando las entradas con la etiqueta certificacion. Mostrar todas las entradas

jueves, 30 de julio de 2009

OCA: Auditoria en base de datos Oracle.

Auditoria significa capturar y almacenar información acerca de lo que está sucediendo en el sistema, este proceso por lo tanto aumenta la cantidad de trabajo que el sistema debe de hacer. La auditoria debe ser enfocada a solo aquellos eventos que son de interes, una auditoria apropiadamente direccionada tiene un mínimo impacto sobre el desempeño del sistema, pero una auditoria no adecuada puede tener un impacto significativo negativo sobre el desempeño del sistema. El monitoreo y la auditoria debe ser una parte integral de tus procedimientos de seguridad, los cuales incluyen:

Auditoria obligatoria:
Todas las bases de datos Oracle auditan ciertas acciones a pesar de que las opciones ó parámetros de auditoria esten desactivados, la razón para una auditoria obligatoria es que la base de datos necesita registrar algunas actividades de base de datos críticas como son el inicio ó apagado del sistema.

Auditoria standard
Este tipo de auditoria es una caracteristica que se usa a nivel del sistema, usando un parámetro de inicialización, dicho parámetro es AUDIT_TRAIL. Después de que habilitaste la auditoria, ahora debes de seleccionar los objetos y privilegios que quieras auditar.

Auditoria basada en valores
Este tipo de auditoría extiende la auditoría standard, capturando no solo los eventos de auditoria que han ocurrido sino tambien los valores actuales que han sido insertados, actualizados o borrados, la auditoría basada en valores es implementada a través de triggers de base de datos.

Auditoría detallada
La auditoria detallada extiende la auditoria standard, capturando las declaraciones SQL actuales que han sido ejecutadas y no solo el evento que ha ocurrido.

Mucha teoria, veamos algo de practica sobre como podemos implementar la auditoría detallada en Oracle:
Supongamos que tú como DBA quieres saber cuando un usuario a seleccionado ciertos registros que son de vital importancia para la empresa, los registros los vamos a crear de la siguiente manera:

Objetos a crear:

Una tabla en el schema hr llamada empleados, el ddl es el siguiente:

create table hr.empleados(
codigo char(2) constraint nn_codigo_emp not null,
nombres varchar2(40) constraint nn_nombres_emp not null,
apellidos varchar2(40) constraint nn_apellidos_emp not null,
sueldo number(10,2) constraint nn_sueldo_emp not null,
primary key(codigo)
);

-- y el dml el siguiente:
insert into hr.empleados values('01','nombres1','apellidos1',1000);
insert into hr.empleados values('02','nombres2','apellidos2',2000);
insert into hr.empleados values('03','nombres3','apellidos3',3000);
insert into hr.empleados values('04','nombres4','apellidos4',4000);
insert into hr.empleados values('05','nombres5','apellidos5',5000);

Una vez creada la tablita vamos a auditar(seguir los pasos) de los usuarios que seleccionan los registros de los empleados que ganan más de S/.3000 (campo sueldo de la tabla hr.empleados)

Creamos un par de usuarios y le asignamos los privilegios de conexion y consulta sobre la tabla creada anteriormente:

create user sapo01 identified by sapo01;
create user sapo02 identified by sapo02;
grant connect to sapo01,sapo02;
grant select on hr.empleados to sapo01,sapo02;

Usamos el paquete dbms_fga para crear una politica de auditoria sobre una tabla o vista determinada(en nuestro caso la tabla hr.empleados), si cualquiera de las filas retornadas desde una consulta(query sql) ejecutadas por cualquier usuario coincide con la columna auditada y la condición de auditoria especificada entonces un evento de auditoria será creado y almacenado en las pistas de auditoria de Oracle. Opcionalmente, el evento de auditoria puede tambien ejecutar un procedimiento, La auditoria detallada se enfoca en un nivel declarativo(sql) es así que una declaración select que retorna cientos de filas generará solo un registro de auditoria.

El bloque pl/sql que crea la politica de auditoria es el siguiente:

begin
dbms_fga.add_policy (
object_schema=>'hr',
object_name=>'empleados',
policy_name=>'auditoria_sueldo_empleado',
audit_condition=>'sueldo>3000',
audit_column=>'sueldo',
handler_schema=>null,
handler_module=>null,
enable=>true,
statement_types=>'select');
end;

Ahora entramos con cualquiera de los usuarios creados enteriormente desde sqlplus y ejecutamos una consulta sobre la tabla que ya hemos configurado para que sea auditada:

C:\Documents and Settings\Pc>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Sßb Ago 1 22:27:18 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
nolog> connect sapo01/sapo01@optimus;
Conectado.
SAPO01: OPTIMUS> select * from hr.empleados where sueldo=4000;
CO NOMBRES
-- ----------------------------------------
APELLIDOS SUELDO
---------------------------------------- ----------
04 nombres4
apellidos4 4000
SAPO01: OPTIMUS>

Ahora como usuario dba vemos los registros de auditoria creados, consultando a la vista dba_fga_audit_trail vemos algunos datos relevantes, entre los que destacan:

DB_USER, el usuario que realizó la consulta
OS_USER, el usuario desde donde se inició la sesión del sistema operatico cliente
USERHOST, nombre de la máquina del usuario que realizó la consulta
OBJECT_SCHEMA, el nombre del esquema auditado(hr en nuestro caso)
OBJECT_NAME, nombre de la tabla ó vista auditada(empleados en nuestro caso)
POLICY_NAME, nombre de la politica creada(auditoria_sueldo_empleado)
SQL_TEXT, el sql que ejecutó el usuario

El proceso de auditoría creado es bastante simple, en tu trabajo quizás quieras auditar tablas o vistas críticas que involucran miles de accesos por minuto, por lo que estos tipos de registros de auditoria debes de hacerlo con mucho cuidado y solo en casos en que lo amerite, como dije al comienzo una auditoría mal creada puede devenir en un performance negativo.

domingo, 26 de julio de 2009

SCJP Declaraciones Inicializacion y Alcance 2

Declarando una interface
Cuando creamos una interface, lo que estamos realizando es un contrato de lo que la clase que implementa dicha interface tiene que hacer sin decir nada acerca de como la clase lo hará, en pocas palabras la interface indica que se va a hacer y la clase que implementa dicha interface indica como se va implementar, de esto concluimos que una interface es un contrato que la clase que lo implementa debe de cumplir. Por ejemplo si tenemos la interface Imprimible definida de la siguiente manera:

public interface Imprimible{
public void imprimirAPdf();
public void imprimirAExcel();
}

Y una clase Libro que implementa la interface anterior de la siguiente manera:

public class Libro implements Imprimible{
public void imprimirAPdf(){
-- Aqui va el código que imprime el libro en formato pdf
}
public void imprimirAExcel(){
-- Aqui va el código que imprime el libro en formato excel
}
}

La clase al implementar la interface debe de cumplir con el contrato, es decir debe de proveer una forma de implementación para cada uno de los métodos de la interface, en el ejemplo vemos que la clase implementa los métodos declarando código entre las llaves de apertura y cerradura de dichos métodos, en la interface después de los parentesis termina su declaración con un punto y coma.

Podemos pensar en las interfaces como clases 100% abstractas, asi como una clase abstracta una interface define métodos abstractos que toman la siguiente forma:

abstract void nombreMetodo();

Pero mientras que una clase abstracta puede definir tanto métodos abstractos como no abstractos, una interface solo puede tener métodos abstractos, es decir podemos tener una clase abstracta de la siguiente manera:

public abstract class Libro{
-- Método abstracto:
public abstract void calcularCosto();

-- Método no abstracto:
public void calcularVentas(){
--Aquí la implementación del método.
}
}

Pero no podemos hacer una interface parcialmente abstracta, las interfaces son 100% abstractas, es decir todos sus métodos son abstractos(no tienen una implementación { ... } ), por lo que la siguiente interface es incorrecta:

public interface Imprimible{
-- Método abstracto:
public abstract void imprimirAPdf();

-- Método no abstracto:
public void imprimirAExcel(){
--Aquí la implementación del método.
}
}

Algunas reglas más sobre la declaración de las interfaces son las siguientes:

1. Todos los métodos de las interfaces son implicitamente públicos y abstractos, en otras palabras no necesitamos escribir los modificadores public y abstract en la declaración del método, el método siempre será públic y abstracto. Veamos, si tenemos la siguiente interface:

public interface Imprimible{
void imprimirAPdf();
int imprimirAExcel();
}

Entonces lo que el compilador realmente analizará es:

public interface Imprimible{
public abstract void imprimirAPdf();
public abstract int imprimirAExcel();
}

2. Todas las variables definidas en una interface deben ser públicas estáticas y finales, en otras palabras las interfaces pueden declarar solo constantes, no variables de instancia.

--Recordar una variable de instancia;
public class Libro{
-- variable de instancia:
private int ancho;
}

3. Los métodos de las interfaces no deben ser estáticos. No podemos hacer lo siguiente:
public interface Imprimible{
public static void imprimir();
}

4. Como los métodos de las interfaces son abstractos entonces no podemos definirlos tambien como finales final, strictfp ó native.

5. Una interface puede extender una o más interfaces, es decir podemos hacer lo siguiente:

public interface interface1{
void metodo1();
}

public interface interface2{
void metodo2();
}

public interface interface3 extends interface1,interface2{
void metodo1();
void metodo2();
void metodo3();
}

6. Una interface solo puede extender interfaces no puede extender clases, por ejemplo si tenemos la clase:

public class Descargable{
protected int descargar(){
-- XXX
}
}

entonces la siguiente declaración de interface es incorrecta:

public interface interface3 extends Descargable{
protected int descargar();
}

7. Una interface no puede implementar otra interface o una clase, no podemos hacer lo siguiente:

public interface interface3 implements interface1,interface2{
void metodo1();
void metodo2();
void metodo3();
}

8. Una interface debe ser declarada con la palabra clave interface.

Declarando constantes en interfaces
Nosotros podemos declarar constantes en una interface, haciendolo garantizamos que cualquier clase que implementa la interface tendrá acceso a la misma constante, la regla principal para las constantes es la siguiente:

public static final = ;

Por ejemplo si tenemos la siguiente interface:

public interface Imprimible{
int ancho = 100;
int largo = 170;
public void imprimir( );
}

y la siguiente clase:

public class Libro implements Imprimible{
public void imprimir(){
--Nosotros podemos usar las constantes
System.out.println(ancho*largo):

--Pero no podemos asignarles un valor porque las declaraciones int ancho = 100;
--el compilador lo analiza como public static final int ancho = 100; es decir es
--declarado como final y estático ya no podemos modificarlo, por lo tanto es incorrecto:
ancho = 666;
}
}

SCJP Declaraciones Inicializacion y Alcance 1

Cuando escribimos código en java, lo que estamos escribiendo es justamente clases o interfaces, dentro de estas clases como conocemos pueden haber variables y métodos(y algunas otras cosas más), la forma en la que declaramos las clases, métodos y variables afecta en forma sustancial el comportamiento del código, por ejemplo un método público puede ser accedido desde código ejecutandose en cualquier lugar en tu aplicación, haciendo el método privado lo oculta a cualquier posible llamada(excepto a la clase en la cuál fué declarada).

Reglas de declaración de archivos fuente
  1. Solo puede haber una clase pública por archivo fuente.
  2. Los comentarios pueden aparecer al inicio o al fin de cualquier línea en el archivo de código fuente.
  3. Si es que hay una clase pública el nombre del archivo debe de coincidir con el nombre de la clase, por ejemplo si hay una clase declarada public Casa entonces el nombre del archivo deberá ser Casa.java
  4. Si la clase es parte de un paquete, la declaración del paquete debe ser la primera línea en el archivo de código fuente, antes de cualquier declaración de importacion import que pueda estar presente.
  5. Si hay declaraciones de importacion import, estas declaraciones deben de ir entre la declaración del paquete(si es que lo hubiera) y la declaración de la clase.
  6. Declaraciones de importación import y de paquetes package aplican a todas las clases dentro de un archivo de código fuente, en otras palabras, no hay manera para declarar multiples clases en un archivo y tenerlos en diferentes paquetes o usar diferentes importaciones.
  7. Un archivo puede tener más de una clase no pública.
  8. Archivos con clases no públicas pueden tener un nombre que no coincide con cualquiera de las clases en el archivo.
Declaraciones de clases y modificadores
  1. Modificadores de acceso: public, protected, private
  2. Modificadores de no-acceso: strictfp, final y abstract
Acceso de Clase
Que es lo que significa acceder a una clase?, cuando decimos que el código de una clase(class X) a accedido a otra clase(class Y) esto significa que la clase X puede hacer cualquiera de las 3 siguientes acciones:

Crear una instancia de la clase Y.
class X{
Y y = new Y( );
}

Extender la clase Y.
class X extends Y{ }

Accesar ciertos métodos y variables de la clase Y, dependiendo del control de acceso de estos métodos y variables.
class X{
Y y = new Y( );
X(){
y.holamundo();
}
}

Modificador de Acceso por Defecto.
Una clase con default access no tiene un modificador de acceso que le precede en su declaración, es decir tiene la forma class X{ } y no public class X { } este es el control de acceso que se obtiene cuando no escribimos el modificador en la declaración, las clases con default access pueden ser vistas como clases con nivel de acceso a nivel de paquete, porque una clase con default access puede ser vista solo por clases dentro del mismo paquete. Por ejemplo si tenemos una clase llamada Persona en el paquete miempresa.core declarada de la siguiente manera:

package miempresa.core;
class Persona{ }

y queremos usar la clase anterior pero en otro paquete digamos miempresa.rrhh con la clase Empleado extendiendola de la siguiente manera:

package miempresa.rrhh;
class Empleado extends Persona{ }

Al compilar la clase Persona no hay problema, pero cuando queremos compilar la clase Empleado entonces el compilador nos retorna un error diciendonos que no tiene acceso a la clase Persona esto es cierto porque el modificador de acceso de la clase Persona es por default, es decir no está indicado explicitamente(no está escrito) y por lo tanto solo puede ser visto por aquellas clases declaradas en el mismo paquete, es decir en el paquete miempresa.core, lo anterior se puede solucionar declarando la clase Empleado en el paquete miempresa.core ó declarando el modificador de acceso a public

Modificador de Acceso Público.
Una declaración de clase con la palabra clave public da a todas las clases de todos los paquetes acceso a esta clase pública, es decir en el ejemplo anterior si a la clase Persona la redeclaro como
public class Persona{ } entonces esta clase puede ser accedida desde cualquier clase en cualquier paquete desde mi aplicación. Ojo que si tratamos de usar la clase pública desde otro paquete entonces debemos de importar dicha clase con la palabra clave import

Otros Modificadores de Clase que no son de Acceso.
Podemos modificar la declaración de una clase con las palabras clave final y abstract

Clases Finales.
Cuando es usada en la declaración de una clase, la palabra clave final significa que la clase no puede ser extendida, en otras palabras ninguna clase puede heredar o extender una clase declarada final si intentamos hacerlo en compilador nos retornará un error.

Clases Abstractas.
Una clase abstracta no puede nunca ser instanciada, su único proposito es ser extendida.
Es decir si tenemos:
public abstract class Persona{ }
no podemos hacer esto:
Persona p = new Persona();
lo que debemos de hacer es lo siguiente:
public class Empleado extends Persona{ }

sábado, 25 de julio de 2009

Pasos para certificarse en java.

Aqui vamos a ver el trámite que hay que realizar para poder dar el examen, ojo no para aprobarlo, ya depende de ti si has estudiado lo suficiente.

Primer paso: Comprar el voucher.
El voucher es un documento digital, que como todo documento tiene un número que lo identifica, cuando compras un voucher lo único que interesa es dicho número, el voucher lo puedes comprar mediante el partner de Sun en el Perú
cjava, te comunicas con Elizabeth Bazalar(elizabeth.bazalar@cjavaperu.com) ó con Edwin Maraví(emaravi@cjavaperu.com) indicandoles que deseas comprar un voucher de certificación de un determinado examen de Sun Microsystems, ellos te responderán rápidamente indicandote el costo en dólares del examen y el número de cuenta del Banco de Crédito para que realices el depósito ó si no te gusta ir al banco entonces puedes ir directamente a sus oficinas(Jr. Joaquin Bernal # 482 Lima 14 - Perú) y realizar el pago en efectivo. Una vez que has realizado el pago, seleccionado el examen y llenado(o enviado) tus datos principales(nombres completos, dni, teléfono, correo), entonces cjava procederá a comunicarse con Sun y estos últimos generarán el número de voucher que a más tardar en dos días está en la bandeja de entrada de tu correo electrónico.

Segundo paso: registrarse en prometric.
Una vez con el número de voucher ahora te toca registrarte y programar el examen en la web de prometric que es una empresa cuyo negocio es coordinar los registros y programaciones(lugar,fecha y hora) de los examenes que otras empresas como Sun Microsystems, Microsoft ó Oracle otorgan. Si es tu primer examen entonces lo primero que tienes que hacer es registrarte, llenas un formulario simple donde colocas la información básica para poder dar el examen.

Iniciando desde
aqui el sistema te va a dar varias opciones que a continuación enumero:

Locate a test site:
Seleccionamos el país(Country) y la provincia(State/Province) damos click en "Next>", en este paso en país seleccionamos "Perú" y en provincia la única opción que es "-- None --".

Ahora seleccionamos el programa de certificación que queremos, van a aparecernos dos listas una "Client" que es el listado de empresas que otorgan certificaciones(aquí podemos encontrar Sun Microsystems, Microsoft, Oracle, etc...) seleccionamos Sun Microsystems y en listado "Program" seleccionamos "Sun Microsystems(310-311)" y le damos click en "Next>",

Lo siguiente solo es la pantalla de bienvenida de Sun que entre otras cosas muestra las politicas de confidencialidad asi como también que tú cuando registrar un voucher tambien estás declarando que no eres un ciudadano de Cuba, Irán, Corea del Norte, Sudán Siria, etc.(esto por las politicas de embargo que EEUU mantiene con estos países) solo le damos click en "Next>"

Ahora nos toca seleccionar el examen que queremos dar deacuardo al voucher que compramos, en la lista "Exam" por ejemplo seleccionamos "310-065 - Sun Certified Programmer for the Java 2 Platform, SE 6.0", al hacer esto automáticamente las listas de abajo se llenan, la primera lista nos indica el idioma en el que queremos dar el examen seleccionamos "SPANISH" y en "Currencies" la moneda con la que queremos pagar el examen, esto ultimo solo es referencial, no le hagas caso y solo dale click en "Next>"

En la siguiente pantalla seleccionamos la institución(Site) donde queremos dar el examen, seleccionamos la que quieras pulsando sobre el enlace "Schedule Appointement". Ahora si es que somos nuevos entonces le damos en "Click Here" de la parte "Are you a new user".

En esta pantalla de registro voy a explicarles cada uno de los pasos:
Prometric Testing Id: Si eres nuevo ó nunca has dado un examen,entonces dejalo en blanco.

General Information(Información General)
First Name: Aqui debes ingresar tus nombres completos como aparece en tu DNI, por ejemplo para mi sería "CARLOS ALBERTO".

Middle Initial: Lo dejamos en blanco.

Last Name: Aqui nuestros apellidos, igual como aparece en el DNI, para mi sería "CACIQUE YUPANQUI"

Address where you would like your certificate and correspondence mailed(Dirección donde quieres que te lleguen los certificados):

Address Line 1: La dirección de mi casa: por ejemplo: "Av. Tupac Amaru 094 Urb. Manco Inca Comas"

Address Line 2: Lo dejamos en blanco ó especifica otra dirección.

City: La ciudad, para nuestro caso sería "LIMA"

Country: El país, para nuestro caso sería "Perú"

Zip Code / Postal Code: El código postal de nuestro distrito, lo puedes obtener desde acá para mi caso que soy de comas sería "LIMA 7", esto les sirve a Serpost para identificar más rápidamente la dirección exacta del paquete con el certificado.

Company Name: Lo dejamos en blanco.

Phone Information(Información Telefónica)

Debemos ingresar mínimo un teléfono, cuando seleccionamos el país en el campo anterior automáticamente se registra el código telefónico para el país ahora solo le colocamos el código de la ciudad "Area Code" si eres de Lima entonces "1" y el número de tu casa en "Number" y por ultimo la información para poder realizar un login en "prometric", "Email" "Password" y una confirmación del password así como una pregunta si es que olvidamos el password "Reminder question", aceptamos las condiciones "I agree" y le damos click en "Submit>"

Una vez con el usuario y clave regresamos(que fué enviado a nuestro correo electrónico) al punto donde seleccionamos la institución donde queremos rendir el examen, una vez seleccionada la institución e ingresado nuestro usuario y password vamos a programar el examen, nos aparecerá un calendario y una lista a la derecha, en el calendario se habilitarán los día disponibles deacuerdo a la institución y na vez seleccioando el día en la lista de la derecha aparecerá la hora en la que quieres dar el examen.

Ahora llega el momento de ingresar el código del examen "Voucher Number o Promotion Code", en Discount Type(tipo de descuento) seleccionamos "Voucher Number" y en Voucher Number el número del voucher que
cjava nos envió, le damos click en "Validate". Ahora solo leemos los datos de resumen(Todo lo que hemos hecho hasta aquí) y damos click en "Submit". Una vez realizado esto ultimo prometric nos enviará un correo electrónico con los datos de resumen.

Tercer paso: dar el examen,
Vas a la institución donde has programado el examen 30 minutos antes con tu DNI, firmas unos documentos que indican las politicas del examen como que está prohibido llevar aparatos electrónicos, copiar, etc.., porsiacaso te filman..., al final de dar el examen te entregan tu reporte que indica si has aprobado o no y los puntos del examen con un porcentage de aprobación sobre cada uno de ellos.

Cuarto paso: Solo si has aprobado y es tu primer examen,
Ahora tienes que validar tu dirección para que te envíen allí el certificado, esto debes de hacerlo dos días después de aprobar el examen a través de
certmanager desde aquí puedes rastrear tu certificado y validar la dirección para que una vez validado pueda ser enviado a Serpost y desde allí a tu casa.

Quinto paso: Esperar,
Sé paciente a que te llegue el certificado a tu casa, en aproximadamente 3 semanas te llegará.