viernes, 22 de noviembre de 2013

Auditoria en SQL Server 2008 R2

SQL Server provee una herramienta robusta para auditar eventos a nivel de servidor, como a nivel de base de datos y sobre datos inclusive en consultas DML. A continuación detallo los pasos necesarios para utilizar este tipo de auditoria. 1. En Audits, dentro de Security crear un nuevo Audit

2. Completamos la información del Audit, el cual servirá únicamente como medio de almacenamiento. Podremos crear varios audit con diferentes finalidades. Podemos establecerle límites de espacio y tiene una opción de apagar el sevidor si la auditoria falla.

3. Una vez creada la Audit procederemos a habilitarla, cualquier modificación sobre ella deberá esta deshabilitada.

4. El siguiente paso puede ser en 2 formas: 1 – Nivel de Servidor 2 – Nivel de Base de Datos. 1 – Nivel de Servidor Sobre la opción de Server Audit Specification, crearemos una nueva.

5. En una nueva opción, hay diferentes grupos de opciones que podemos auditar, favor revisar el siguiente enlace donde se especifican las cualidades de cada grupo. http://technet.microsoft.com/en-us/library/cc280663%28SQL.100%29.aspx Vamos a realizar el ejemplo de auditar BACKUP/RESTORE y además, LOGIN de usuarios. Quedaría de la siguiente forma:

6. Una vez registrado la auditoria de servidor procederemos a activarla

7. Cuando existan LOGINS al servidor, respaldos o restauración de base de datos, vamos a tener información de ello en el “AuditModificaciones”

Podemos ver los Logins y el Backup que hice de prueba

8. El siguiente paso sería configurar la auditoria a nivel de base de datos

9. Especificamos la auditoria para la tabla “Clientes” en el evento INSERT, además especificamos auditoria ante cualquier cambio en la estructura de la base de datos (CREATE, ALTER, DROP)

10. Siempre la habilitamos porque se crea deshabilitada,

11. Vemos los resultados en el audit “AuditModificaciones”

viernes, 1 de marzo de 2013

Utilizando Change Tracking y Chage Data Capture en SQL Server





Change Tracking  es un método que provee SQL Server 2008,  para determinar qué cambios ha ocurrido en los datos y estructura de la base de datos.
Podemos realizar las siguientes funciones:
·         Funcionalidad con DML
·         Responde preguntas como:
o   Cuantas filas en la tabla han cambiado
o   Que Columnas ha cambiado
o   Que fila en particular ha sido actualizada

Configurando Change Tracking
Para habilitarlo lo podemos hacer vía SSMS o por ALTER DATABASE.
Se deberá configurar las siguientes opciones:
·         Change Tracking definirlo en True
·         Retention Period  Define la cantidad de tiempo que se le dara mantenimiento.  Por defecto es 2
·         Tipo de Unidad de Retention Period.   Dias, Horas, Minutos.  Por defecto es Dias
·         Auto CleanUp.   Lo pondremos en ON  para que automáticamente limpie la información

O bien definir la siguiente instrucción T-SQL
ALTER DATABASE AdventureWorksDW2008
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 7 DAYS, AUTO_CLEANUP = ON)

Vemos lo que tenemos configurado:
SELECT  * FROM sys.change_tracking_databases ctd
SELECT OBJECT_NAME([object_id]), * FROM sys.change_tracking_tables ctt

Al realizar INSERT,  UPDATE  o DELETE   podremos verificar la información de indica que se realizado una modificación y en que numero de registro de una tabla
DECLARE @last_synchronization_version bigint
SET @last_synchronization_version =
CHANGE_TRACKING_Min_VALID_VERSION(2105058535);

SELECT  CT.* FROM CHANGETABLE(CHANGES NOMBRE_TABLA, @last_synchronization_version) AS CT

 

Habilitando el CDC (Change Data Capture)  


Para habilitarlo en la base de datos utilizar la siguiente instrucción T-SQL
EXECUTE sys.sp_cdc_enable_db;

Luego habilitarlo para una tabla específica,  utilizaremos el ejemplo de la tabla llamada “Director”
EXEC sys.sp_cdc_enable_table
    @source_schema = N'dbo'
  , @source_name = N'Director'
  , @role_name = N'cdc_admin'
  , @capture_instance = N'Director'
  , @supports_net_changes = 1

El nombre de instancia de captura,  es el nombre se utilizara para llamar posteriormente a esta tabla en los CDC.

DECLARE @begin_time datetime, @end_time datetime,
@from_lsn binary(10)  , @to_lsn binary(10);

SET @begin_time = GETDATE() -15;
 SET @end_time = GETDATE();
SET @from_lsn = sys.fn_cdc_map_time_to_lsn(
  'smallest greater than or equal', @begin_time);
  SET @to_lsn = sys.fn_cdc_map_time_to_lsn(
  'largest less than or equal', @end_time);

SELECT  * FROM cdc.fn_cdc_get_all_changes_Director(
       @from_lsn, @to_lsn, 'all');

O bien obtener todo lo que ha realizado en la tabla Director.  Podemos ver las tablas creadas en las tablas del sistema de la base datos.

SELECT * FROM cdc.Director_CT

miércoles, 27 de febrero de 2013

Creando un Portal Web usando WebPart



1.      Crear un nuevo web Site  llamado MiPortal

2.      En la página de Default.aspx crear una tabla con la estructura 2 Filas 3 Columnas









3.      Mezclar las 2 primeras celdas en una sola de esta forma y Agregar una Etiqueta de “Bienvenido a Mi Portal”  y darle formato


Bienvenido a Mi Portal








4.      Agregar el WebPart Manager.   Este control será el encargado de administrar el estado y el comportamiento del resto de web parts que incluyamos.  Es un control no visible. Debe estar en la primera parte antes de cualquier otro control de webparts.

5.      En la segunda fila,  vamos a agregar un control para cada celda y lo renombraremos.

1.     <asp:CatalogZone ID="LaZonaCatalogo"
2.     <asp:WebPartZone ID="ZonaContenido”
3.           <asp:WebPartZone ID="ZonaInformacion”


6.      En la Zona de Informacion vamos agregar y luego ejecutar nuestro proyecto
a.       DropDownList  lo llamaremos cbRegiones  y agregaremos valores de Departamentos.
b.      Control Calendar
c.       AdRotator

7.      En la zona de Contenido crearemos 2 controles de usuario con datagrid y luego los agregaremos a esta Zona.  Usar BD Northwind.

8.      En la segunda Celda  de la primera fila agregaremos un control de Menú lo llamaremos MenuModos,  lo rellenaremos con las modalidades disponibles para “Display” nuestro portal.
En las que encontramos: 
·         Browse  por Defecto  la de visualización
·         Catalog  para definir las zonas utilizando el Catalogzone
·         Design  para definir las webpart gráficamente “Drag a Drop”

9.      Rellenamos el Menu:

VB.NET
Dim rootItem As New MenuItem("Seleccionar Modo")

        For Each mode As WebPartDisplayMode In WebPartManager1.DisplayModes
            If mode.IsEnabled(WebPartManager1) Then
                rootItem.ChildItems.Add(New MenuItem(mode.Name))
            End If
        Next
        MenuModos.Items.Add(rootItem)
 
C#
   MenuItem rootItem = new MenuItem("Seleccionar Modo");

            foreach (WebPartDisplayMode mode in WebPartManager1.DisplayModes)
            {
                if (mode.IsEnabled(WebPartManager1))
                    rootItem.ChildItems.Add(new MenuItem(mode.Name));
            }
            MenuModos.Items.Add(rootItem);



10.   En el evento clik del menú  agregaremos una sentencia para asignarle al WebPartManager el modo seleccionado.

VB.NET
    For Each mode As WebPartDisplayMode In WebPartManager1.DisplayModes
            If mode.Name = e.Item.Text AndAlso mode.IsEnabled(WebPartManager1) Then
                WebPartManager1.DisplayMode = mode 
                Exit For
            End If
   Next

C#
foreach (WebPartDisplayMode mode in WebPartManager1.DisplayModes)
        {
            if (mode.Name == e.Item.Text && mode.IsEnabled(WebPartManager1))
            {
                WebPartManager1.DisplayMode = mode;
                break;
            }
        }