sábado, 27 de junio de 2009

Encriptación

SQL SERVER 2005 soporta llaves criptográficas, certificados digitales y funciones criptográficas para aumentar el nivel de seguridad de la información .

Llaves simétricas
Es un valor que es usado para encriptar o desencriptar datos. Esta llave debe ser compartida entre el encriptador y el desencriptador.

La sintaxis para crear una llave simétrica es:

CREATE SYMMETRIC KEY key_name [ AUTHORIZATION owner_name ] WITH [ , ... n ] ENCRYPTION BY [ , ... n ] ::= CERTIFICATE certificate_name PASSWORD = 'password' SYMMETRIC KEY symmetric_key_name ASYMMETRIC KEY asym_key_name ::= KEY_SOURCE = 'pass_phrase' ALGORITHM = IDENTITY_VALUE = 'identity_phrase' ::= DES TRIPLE_DES RC2 RC4 RC4_128

Ejemplo:

CREATE SYMMETRIC KEY LlaveSimetrica
WITH ALGORITHM= AES_256
ENCRYPTION BY PASSWORD = 'SF$5454%&2DSF'


Llave asimétrica
Son un par de valores que están compuesto por una llave publica y una privada.
la llave publica es una llave compartida que se encarga de encriptar los datos y la llave privada se encarga de desencriptarlos .

Estas llaves son usadas para crear firmas digitales.

La sintaxis para crear una llave asimétrica es:

CREATE ASYMMETRIC KEY Asym_Key_Name [ AUTHORIZATION database_principal_name ] { [ FROM ] WITH [ ENCRYPTION BY ]::= FILE = 'path_to_strong-name_file' EXECUTABLE FILE = 'path_to_executable_file' ASSEMBLY Assembly_Name PROVIDER Provider_Name ::= ALGORITHM = PROVIDER_KEY_NAME = 'key_name_in_provider' CREATION_DISPOSITION = { CREATE_NEW OPEN_EXISTING } ::= { RSA_512 RSA_1024 RSA_2048 } ::= PASSWORD = 'password'

Ejemplo

CREATE ASYMETRIC KEY LlaveAsimetrica
WHIT ALGORITHM=RSA_2048
ENCRYPTION BY PASSWORD = 'SF$5454%&2DSF'


Certificados digitales
Los certificados asocian una llave publica con una persona

Los certificados contienen:

*Una llave publica del sujeto
*Información sobre el sujeto
*Tiempo de expiración
*Identificación del emisor y firma digital

CREATE CERTIFICATE certificate_name [ AUTHORIZATION user_name ] { FROM } [ ACTIVE FOR BEGIN_DIALOG = { ON OFF } ] ::= ASSEMBLY assembly_name { [ EXECUTABLE ] FILE = 'path_to_file' [ WITH PRIVATE KEY ( ) ] } ::= [ ENCRYPTION BY PASSWORD = 'password'] WITH SUBJECT = 'certificate_subject_name' [ , [ ,...n ] ] ::= FILE = 'path_to_private_key' [ , DECRYPTION BY PASSWORD = 'password' ] [ , ENCRYPTION BY PASSWORD = 'password' ] ::= START_DATE = 'mm/dd/yyyy' EXPIRY_DATE = 'mm/dd/yyyy'


Ejemplos:

CREATE CERTIFICATE Ventas ENCRYPTION BY PASSWORD = ''SF$5454%&2DSF' WITH SUBJECT = 'Certificado de ventas', EXPIRY_DATE = '10/31/2009';


Crear certificado desde archivo

CREATE CERTIFICATE Ventas FROM FILE = 'c:\DB\Ventas.cer' WITH PRIVATE KEY (FILE = 'c:\DB\Ventas.pvk', DECRYPTION BY PASSWORD = 'sldkflk34et6gs%53#v00');

Create certificado a un ensamblado

CREATE CERTIFICATE Ventas FROM ASSEMBLY AssemblyVentas

Para realizar una copia del certificado se debe utilizar la siguiente sintaxis

BACKUP CERTIFICATE Ventas
TO FILE = 'c:\DB\Ventas.cer'


Funciones de criptográficas

EncryptByKey y DecryptByKey: encripta y desencripta datos con llaves simétricas
EncryptByAsymKey y DecryptByAsymKey: encripta y desencripta datos con llaves asimétricas
EncryptByCert y DecryptByCert: encripta y desencripta datos con certificados digitales

Ejemplo

OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE HumanResources037;
EncryptByKey(Key_GUID('SSN_Key_01'), NationalIDNumber);

Configurar el SQL Server DatabaseMail

DatabaseMail es una solución empresarial para enviar correo electrónico desde sql server. Esta no esta disponible para versiones de Sql Express edition

Para habilitarla debes hacerlo a trabes del SQL Server Surface Area Configuration o Database Mail Configuration Wizard

Por medio del asistente tu puedes realizar la siguientes tareas

*Configurar el Database email
*Administrar las cuentas de correo y perfiles
*Administrar la seguridad de los perfiles
*Ver y cambiar parámetros del sistema

Para poder configurarlo debes ser miembro de Sysadmin rol y para poder utilizarlo debes ser miembro de DatabaseMailUserRole en MSDB

Los siguientes procedimiento almacenados sirven para configurar el DatabaseMail:

sysmail_configure_sp: Configura las opciones de DM

sysmail_help_configure_sp : Muestra las opciones de configuracion


sysmail_(add,update,delete)_account_sp: añade,modifica o borra una nueva cuenta de usuario

sysmail_(add,update,delete)_profile_sp : añade, modifica o borra un perfil


sysmail_(add,update,delete)_profileaccount_sp : añade, modifica o barra una cuenta de usuario de un perfil

sysmail_help_(account,profile,profileaccount)_sp : lista informacion sobre las cuentas, perfiles y cuentas asociadas a perfiles


sysmail_(add, update,delete)_principalprofile_sp : da , modifica o quita los permisos de un principal sobre un perfil

sysmail_(start,stop)_sp: inicia o detiene el DataBsaeMail y su respectiva cola

Un ejemplo sencillo de configurar el database mail puede ser el siguiente script,

use msdb

--Creacion de cuenta de correo
EXECUTE msdb.dbo.sysmail_add_account_sp
@account_name = 'UserAccount',
@description = 'Mail account for administrative e-mail.',
@email_address = 'dba@Prueba.com',
@display_name = 'Prueba Automated Mailer',
@mailserver_name = 'smtp.Prueba.com' ;


--Creacion de perfil de correo
EXECUTE msdb.dbo.sysmail_add_profile_sp
@profile_name = 'Prueba Administrator',
@description = 'Perfil del administrador' ;

--asociacion de cuenta de correo a perfil
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
@profile_name = 'Prueba Administrator',
@account_name = 'UserAccount',
@sequence_number = 1 ;


--Creacion del usuario en la BD msdb
create user julio

-- Asignacion de rol DatabaseMailUserRole al principal julio
EXEC sp_addrolemember N'DatabaseMailUserRole', N'julio'

-- asignacion del profile a el principal
EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
@principal_name = 'julio',
@profile_name = 'Prueba Administrator',
@is_default = 1 ;

Como es almacenada la información en la Base de Datos

SQL Server almacena los datos en Extends, que son bloques de 64 KB que contiene 8 paginas de datos, por lo tanto una pagina tiene un tamaño de 8 KB.

En la mayoría de los casos todos las paginas que contienen un extend son utilizadas por un mismo objeto, pero existe la posibilidad de que en un extend existan paginas con diferentes objetos debido a que cada uno de ellos no se consume muchas paginas.

Una pagina esta compuesta por 8192 bytes de los cuales 8060 bytes son utilizados para datos y el resto para la cabecera y datos de validación de la pagina.

Existen diferentes tipos de paginas, como lo son:

Paginas de datos: Son las paginas donde los datos son guardados
Pagina de índices: Contienen las llaves delos índices
Pagina de Texto/Imágenes: Pagina de datos para tipo de dato text, ntext e imagen
Pagina GAM: Mantiene la información de cuales extends están siendo usados y cuales no dentro de un archivo de datos
Pagina IAM: Mantiene el rastro de cuales extends están siendo utilizados en una tabla o índice
Pagina de espacio libre: Tipo especial de pagina que mantiene el espacio libre de todas las paginas de la BD
Pagina cambios masivos: Mantiene información acerca de las ultimas paginas de datos que fueron cambiadas por modificaciones masivas desde el ultimo backup del log
Pagina de cambios diferenciales: Mantiene información acerca de las paginas que han sido modificadas desde el ultimo backup de la BD

Ubicación de los archivos de base de datos

La ubicación de los archivos de datos, es decisivo en el rendimiento de una base de datos, pero esta depende de la complejidad y características de la solución, además del presupuesto que se tenga.

En aplicaciones pequeñas que no exigen alta disponibilidad, se podría utilizar varios discos para aumenta el rendimiento de la BD

Por ejemplo en un aplicación sencilla compuesta por una archivo de dato y un log, se podría mejorar el rendimiento ubicando los archivos en discos diferentes, para que de esta manera incrementar la velocidad de escritura y lectura físicas a disco.

Otro posibilidad con pocos recursos, seria además de los dos discos ubicar un tercero en donde se podría almacenar un archivo con los índices. Para hacer esto se debería crear un FileGroup en el nuevo disco y crear todos los índices hay. Esto en muchas situación puede mejorar el rendimiento, ya que se podría buscar los datos en los índices y en el archivo de datos simultáneamente.

Otra posibilidad con otro disco adicional sería crear otro archivo de datos en el mismo filegroup, para que de esta manera la información pudiese ser escrita y leída en paralelo

En escenario donde es necesario alta disponibilidad, se podría utilizar discos configurados como RAID.

Para archivos de datos un RAID 5 (striping with parity) seria ideal, ya que este brinda tolerancia a falla y lecturas rápidas

Para archivos de Log, necesitan velocidades rápidas de escritura y ya que las escrituras son secuenciales, un RAID 1 (disk mirroring), brindaría Tolerancia a falla y velocidades de escritura altas

En escenarios ideales un RAID 0+1 ofrecería un RAID 5 con espejo

Creación de Base de Datos

Base de datos del sistema

Las base de datos del sistema son 5

Master: Almacena toda la información sobre las base de datos de usuario, debe hacerse un backup de ella cada vez que se crear o elimina una base de datos del servidor

Model: Esta base de datos es una especie de Template utilizado cuando se crea una base de datos nueva, es decir que la configuración por defecto de las nuevas base de datos serán tomadas de esta base de datos

Msdb:En esta base de datos se almacena toda la configuración del SQLAGENT y planes de mantenimiento

TempDB: En esta base de datos se almacena toda la información temporal necesaria para realizar una consulta como tablas temporales, procedimientos almacenados temporales. Se recomienda mover esta Base de datos para un solo disco y de esta manera mejorar el rendimiento del servidor.



Resource: Es una base de datos de solo lectura que contiene todos los objetos del sistema. (Sys.objects). El objetivo de esta base de datos es facilitar las actualizaciones de versiones de SQL Server

Creación de Base de Datos de Usuario

Una base de datos esta compuesta por lo menos por dos archivos. Un archivo de datos con extensión .mdf y un archivo de log con extensión .ldf. Estos archivos pertenecen a un FILEGROUP

Un FILEGROUP se utiliza para facilitar el mantenimiento de la BD y mejorar el rendimiento. Mas adelante profundizaremos sobre estos

Para crear una BD de usuario se puede utilizar el asistente a través del SQL SERVER MANAGEMENT STUDIO (SSMS) o por medio de T-SQL.

La sintaxis para crearla por T-SQL es:

CREATE DATABASE database_name
[ ON
[ <> [ ,...n ] ]
[ , <> [ ,...n ] ]
]
[ LOG ON { <> [ ,...n ] } ]
[ COLLATE collation_name ]
[ FOR LOAD FOR ATTACH ]
<> ::=
[ PRIMARY ]
( [ NAME = logical_file_name , ]
FILENAME = 'os_file_name'
[ , SIZE = size ]
[ , MAXSIZE = { max_size UNLIMITED } ]
[ , FILEGROWTH = growth_increment ] ) [ ,...n ]
<> ::=
FILEGROUP filegroup_name <> [ ,...n ]


Expliquémoslo por medio de ejemplos:

Supongamos que queremos crear una BD de llamada prueba que comience con un tamaño inicial de 10 MB, que tenga un tamaño máximo de 50 MB y un crecimiento de 5 MB con un log de tamaño inicial 5 MB, tamaño máximo de 25 MB y crecimiento de 5 MB

USE master


GO


CREATE DATABASE PruebaON ( NAME = Prueba_dat, FILENAME = 'c:\BD\Prueba.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 )LOG ON( NAME = 'Prueba_log', FILENAME = 'c:\BD\Pruebalog.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB )


GO

Si quisiéramos créala con mas de un archivo de datos tendríamos que agrégale después del primer archivo de datos una coma y escribir lo siguiente

( NAME = Prueba_dat2, FILENAME = 'c:\BD\Prueba2.ndf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 )



Note que el nombre del archivo termina en ndf, que es la estexion por defecto de archivos de datos secundarios.

Por defecto en el ejemplo anterior la BD fue creada en el FileGroup configurado por defecto, si este no ha sido modificado desde la instalación, La BD fue creada en el FileGroup Primary.

Si quisieramos crealo en otro FileGroup deberiamos especificarlo despues de la palabra ON.

CREATE DATABASE Prueba ON Secundary

Por ejemplo aquí se crearía la BD en el FileGroup Secundary.

Si los archivos de Bd ya existen en el servidor, la BD se puede crear de la siguiente manera

CREATE DATABASE PruebaON PRIMARY (FILENAME = 'c:\BD\Prueba.mdf')FOR ATTACH

La opción FOR LOAD es incluida por compatibilidad con versiones de SQL SERVER 7.

Con la opción COLLATE se especifica la colación por defecto de la BD, si esta no es definida se tomara por defecto la del servidor, para mas información consulte http://msdn.microsoft.com/en-us/library/aa258237(SQL.80).aspx


Modificación de Base de Datos de Usuario

Después que se ha creado un BD, se pueden realizar muchas configuraciones, como agregar, modificar o quitar un archivo de datos o de Log de la BD o modificar las opciones de configuración de la BD

Primero vamos a explicar con ejemplo como se puede agregar, modificar o quitar archivos de datos siguiendo la siguiente sintaxis.

ALTER DATABASE database
{ ADD FILE <> [ ,...n ] [ TO FILEGROUP filegroup_name ]
ADD LOG FILE <> [ ,...n ]
REMOVE FILE logical_file_name
ADD FILEGROUP filegroup_name
REMOVE FILEGROUP filegroup_name
MODIFY FILE <>
MODIFY NAME = new_dbname
MODIFY FILEGROUP filegroup_name {filegroup_property NAME = new_filegroup_name }
SET <> [ ,...n ] [ WITH <> ]
COLLATE <>
}

Para agregar un tercer archivo de datos a la base de datos prueba debemos realizar lo siguiente

ALTER DATABASE Prueba ADD FILE ( NAME = Prueba_dat3, FILENAME = 'c:\BD\Prueba3.ndf', SIZE = 5MB, MAXSIZE = 100MB, FILEGROWTH = 5MB)



Para eliminarlo hacemos lo siguiente

ALTER DATABASE Prueba REMOVE FILE Prueba_data GO

Si queremos modificar el tamaño máximo de un archivo de datos o de log podemos hacer lo siguiente

ALTER DATABASE Prueba MODIFY FILE (NAME = Prueba_dat2, MAXSIZE = 200MB)

Ahora para modificar las opciones de configuración de la BD también utilizamos la sentencia Alter Database.

Para cambiar el FileGroup por defecto de un BD, debemos correr este script

ALTER DATABASE Prueba MODIFY FILEGROUP [Secondary] DEFAULT

Despues de ejecutar este script todas la bases de datos que se creen y no se les especifique el filegroup seran creadas en el FileGroup Secondary

Es recomendable que las BD de usuario sean creadas en un FileGroup diferente a Primary por organización, mejoras de rendimiento si el Filegroup esta en otro disco y también para evitar que en ciertos casos las base de datos del sistema se queden sin recursos cuando estan siendo utilizados por la BD de usuarios.


Si queremos cambiar el modelo de recuperación de la Bd por script, deberiamo correr el siguiente codigo T-SQL

ALTER DATABASE Prueba SET RECOVERY FULL

Las opciones son muchas, en la grafica se podrán visualizar algunas.


Opciones de configuración de BD


Collation : Cambia la colección de la BD

ALTER DATABASE PruebaCOLLATE {<>}

Recovery Model : Existen tres modo de recuperación:
*Simple: Utiliza muy poco el log de transacciones, es utilizado para ambientes de desarrollo en donde lno es tan importante recuperar información perdida cuando hay algún fallo en el sistema. En caso de un fallo se debe restaura el ultimo full backup realizado.
*Bulk-logged: Utiliza el log de transacciones, ignorando únicamente las inserciones masivas. Con este modelo es posible recuperar mas datos en caso de una falla, únicamente se perderían los datos insertados masivamente. Este modelo es utilizado en ciertos casos cuadno se quiere realizar inserciones masivas sin comprometer el rendimiento del Servidor
*Full: Registra todo en el Log de transacciones. Usando este modelo es posible restaurar la BD reduciendo la perdida de información en caso de un fallo.

ALTER DATABASE Prueba SET RECOVERY FULL


Compatibility Level : Especifica el nivel de compatibilidad de la BD, por defectos las bases de datos de SQL SERVER 2005 tiene el nivel de compatibilidad configurado con el valor 9, las de 2000 las tendría en 8 y así sucesivamente

Auto Close: Cierra la BD después de que el ultimo usuario se desconecta de la BD. Esta opción decremento la cantidad de recursos que necesita el servidor a para base de datos que se consulta muy poco.

Auto Create Statistics: Permite que se generen estadísticas automáticamente. El optimizador de consultas utiliza estas estadísticas para determinar la mejor manera de buscar los datos en la BD

Auto Shrink: Permite que la BD automáticamente libere espacio que no esta reservado para la BD pero no esta siendo utilizado. Esta acción es automáticamente realizada por el sistema cuando se realiza un backup de log de transacciones y debe realizarse manualmente cuando la cantidad de espacio libre reservado a la BD es superior al 25 %

Auto Update Statistics: Actualiza automáticamente las estadísticas

Auto Update Statistics Asynchronously: modo en que trabajara el Update Statistic

Close Cursor on Commit : Cierra automáticamente los cursores abierto cuando se realiza un commit

Default Cursor: Especifica el ámbito de cursor. Puede ser Global o Local

ANSI NULL Default: Cuando esta en ON cualquier comparación con nulo será igual a 0, en el caso contrario dará Nulo

ANSI NULLS Enabled: Especifica si el Ansi Null esta habilitado o no

ANSI Padding Enabled:Cuando esta en On los datos almacenados en un campo string que tengan longitud inferior al tamaño del campo serán rellenados con espacios en blanco, en el caso contrario será almacenado tal cual como fue insertado

ANSI Warnings Enabled : Genera alarmas cuando en una función agregada como SUM o AVG es encontrado un valor nulo

Arithmetic Abort Enabled: Cuando un error de división por cero se da la consulta es cancelada y el mensaje de error es ilustrado. Cuando es configurado en off la consulta continua

Concatenate Null Yields Null: Especifica que cualquier cosa que sea concatenado con nulo de nulo

Date Correlation Optimization Enabled: Cuando esta opción es configurada con ON, el servidor guarda estadísticas de la relación Foreingn Key que existe entre dos tablas

Numeric Round-Abort: Cuando es configurada en ON cualquier perdida de precisión generara u mensaje de error

Quoted Identifiers Enabled : Permite el uso de doble cuotaciones para especificar el nombre de un objeto en T-SQL

Recursive Triggers Enabled: Habilita los disparadores recursivos

Page Verify: Especifica como debe validar la información de las paginas de la BD. Checksum oTornPageDetection

Database Read-Only: Configura la BD como solo lectura

Restrict Access: Existen tres posible socnfiguraciones:
Multiple: todo ususrioa que tenga permiso accedera a la BD
Single Only: Solo un usaurio podra acceder ala BD al tiempo
Restricted: Unicamente los usuarios db_owner, dbcreator y sysadmin pueden acceder a la BD


Eliminación de una Base de datos de Usuario


Para eliminar una base de datos, usted puede hacerlo utilizando el siguiente código T-SQL

DROP DATABASE Prueba

Configuraciones de Servidor

Seguridad
Por medio de esta pantalla podemos realizar una de las configuración mas comunes cuando trabajamos en ambientes donde no solo se trabaja con equipo clientes Windows, y es configurar
el tipo de modo de autenticación.





















En la imagen podemos observar que esta habilitado el modo de autentificación mixto, donde el servidor aceptara login de tipo Windows y de SQL SERVER

Otra de las opciones importantes de esta pantallas es la habilitación de trazas C2, la cual configura al servidor para que registre intentos de acceso exitosos y fallidos.

Otras configuraciones puede realizarse por medio de sentencia T-SQL utilizando el procedimiento almacenado SP_Configure.

Por ejemplo el siguiente script modifica el valor predeterminado de relleno de índices.

select * from sys.configurations
where name = 'fill factor (%)'
go
sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
Sp_configure 'fill factor', 100
RECONFIGURE
select * from sys.configurations
where name = 'fill factor (%)'
go

El resultado de este script es:






El listado de opciones a nivel de servidor se encuentran en la tabal de sistema sys.configurations

Las opciones mas comunes son:

Show advanced option: Con esta opción en 1 puedes cambiar los valores de las opciones avanzadas del servidor
C2 Audit mode:configura al servidor para que registre intentos de acceso exitosos y fallidos.
Fill Factor: Factor de relleno por defecto de índices
Valor máximo y mínimo de memoria del servidor: Modifica la cantidad de memoria en MB usada por un instancia de SQL
Nested Triggers: Controla los Disparadores anidados
Query Governos Cost Limit: Tiempo en segundos en el cual una consulta puede correr
Query Wait: Tiempo de una consulta espera por los recursos

jueves, 25 de junio de 2009

Consideraciones para actualizar a SQL SERVER 2005

Versiones Soportadas

Se puede actualizar directamente a SQL SERVER 2005

*SQL SERVER 7.0 SP4 o superior
*SQL SERVER 2000 SP3 o superior

Para versiones compatibilidad con collation de versiones anteriores seleccionar la opción SQL Collation

Procedimiento

Antes de comenzar a actualizar debes correr el Upgrade Advisor o SCC (System Configuration Checks) quien genera un reporte de los cambios que deberás hacer antes y después de la migración.
Estos cambios pueden incluir recomendaciones de Software, Hardware, Seguridad y requerimientos de sistema

Sigues el asistente y seleccionas la instancia que deseas actualizar.

Después de terminar la actualización debe asegurarte de subir el nivel de compatibilidad de la BD para que puedes aprovechar la funcionalidad de la nueva versión

Otros procedimiento de migracion pueden consistir en "detach attach", Copy Database Wizard, backup and restore y Script de la BD


Cuentas de Servicio

Las cuentas de servicio que pueden utilizar los servicios de SQL SERVER son:

















































Tipo




Limitación




Ventajas




Built-in
system account




No
podrás comunicarte con otro SQL SERVER de la red




No
necesitas configurar ninguna cuenta de usuario




Local
user account




No
podrás comunicarte con otro SQL SERVER de la red




Permite
modificar los permisos del servicio sin tener acceso a la red




Domain
user account




Ninguna,
pero mas dificl de configurar, ya que el administrador de la red debe crearlo






Permite
comunicarte con otros servidores SQL SERVER y de correo de la red