sábado, 30 de abril de 2016

Access y SQL Server

´Migración de los datos desde Access a SQL Server utilizando el SQL Server Migration Assistant for Access (SSMA).

´Usar Access en la parte de usuario y SQL Server en la parte de los datos.
Esta es la charla de conexión de Acces y SQLServer  del grupo http://accessusergroups.org/espana/



Este grupo imparte charlas mensuales, gratuitas y online, relacionadas con Microsoft Access. Suelen ser siempre muy interesantes.

La presentación la podéis descargar también del grupo AccessSQLServer.zip

http://accessusergroups.org/espana/sql-server-express-access-video-y-material-disponibles/

Un saludo.

lunes, 18 de abril de 2016

Conexión de Access a SQL Server

El jueves 18 de abril de 2016 voy a dar esta charla online sobre Access/SQL Server

http://accessusergroups.org/espana/conexion-de-access-con-sql-server-express/

El acceso es gratuito.

Espero veros por allí.

Un saludo.

sábado, 5 de marzo de 2016

Asegurar un sitio web en Ubuntu con un certificado PFX solicitado en una PKI Windows

Hay veces que las empresas tienen su PKI para asegurar todos los servicios windows.
Como suele ser de Directorio Activo, todos los equipos de la empresa confían automáticamente en esa CA. 
Pero que pasa si quiero asegurar un sitio apache/linux. Pues se suele hacer un certificado autofirmado en el que nadie confía.

Pues esto se soluciona en el siguiente video:


Los pasos son los siguientes:


Certificados

Obtener el certificado en la PKI Windows

  • Certificado de autenticación del servidor
  • Marcar la clave como exportable
  • Nombre descriptivo igual al que vas a poner en la URL del navegador




Llevar el certificado al ubuntu y:

Clave pública  del sitio

openssl pkcs12   -in apacheXX.domi.com.pfx   -clcerts -nokeys  -out apacheXX.domi.com.cer

Clave privada  del sitio

openssl pkcs12   -in apacheXX.domi.com.pfx   -nocerts -nodes  -out apacheXX.domi.com.key

Clave de la CA (Autoridad Certificadora)

openssl pkcs12   -in apacheXX.domi.com.pfx -nodes -nokeys -cacerts  -out  WS2012XX-CA-1.crt    

Explicación de valores

-nocerts               don't output certificates.
-clcerts                only output client certificates.
-cacerts               only output CA certificates.
-nokeys               don't output private keys.

Habilitar módulo SSL en Apache

Se debe habilitar el módulo SSL en el servidor para poder asegurar sitios web
a2enmod ssl

Configuración de Apache.

Configuración a añadir al sitio web que quiero asegurar. Dentro de la directiva virtualhost:443

 SSLEngine on
 SSLCertificateFile          /etc/ssl/private/apacheXX.domi.com.cer
 SSLCertificateKeyFile     /etc/ssl/private/apacheXX.domi.com.key
 SSLCACertificateFile      /etc/ssl/certs/WS2012XX-CA.crt
 ...


Los certificados los puedes crear en ubuntu donde quieras. pero debería acabar en las carpetas /etc/ssl.


Espero que os haya servido.
Un saludo

sábado, 27 de febrero de 2016

Aplicacion Access en Office 365. Access Web. 2. Conexión con el SQL Server Management Studio (SSMS) o a través de ODBC.

La base de datos de la aplicación Access Web se crea en una Base de Datos Azure 

Se puede ver la creación de la aplicación Access Web en Office 365 en el siguiente enlace:
Aplicacion Access en Office 365. Access Web. 1. Creación, consejos iniciales.

En este video veremos como conectar a la base de datos de una aplicación ACCESS WEB en Office 365 utilizando el Sql Server Management Studio y Excel con ODBC.



Aplicacion Access en Office 365. Access Web. 1. Creación, consejos iniciales.

Consejos:

1. Todas las tablas deben tener un ID autonumérico.
Si no se creará uno en la migración y descuadrará los datos.

 2. Crear relaciones entre las tablas para exigir integridad referencial.

3. No poner campos de búsqueda.
Automáticamente generará en la aplicación los campos de búsqueda y sus subformularios. Si pones campos de búsqueda, NO LO HARA!!!

4. Poner título en todos los campos para que aparezca correctamente en la aplicación final.




Para ver la segunda parte:
Aplicacion Access en Office 365. Access Web. 2. Conexión con el SQL Server Management Studio (SSMS) o a través de ODBC.

miércoles, 17 de febrero de 2016

Azure RM (ARM). Crear Máquina Virtual en Azure con Powershell .Crear Grupo de Recursos, Almacen, RED, Grupo de Seguridad, IP pública, IP privada y Tarjeta de Red

Hay veces que tengo que generar varias máquinas en mis suscripciones de Azure.
O utilizo Azure con mis alumnos y quiero que todos tengan las máquinas configuradas de la misma manera.

Esto se podría hacer por la web http://portal.azure.com. Pero hay demasiados pasos y posibilidades de error. Es por eso que me he decidido a crear un powershell utilizando Azure RM que cree TODO desde cero con la configuración que quiero.



Creo todas las variables que voy a usar posteriormente:

#Con ARM.... la nueva versión de máquinas virtuales
$MiNN = "32" #Número a cambiar para crear varias máquinas virtuales
$MiDNS = "40.127.177.225" #Dirección IP del servidor DNS de la organización que quieres que utilicen las máquinas
#=============================================
$Migr = "gr$MiNN" #Grupo de recursos
$MiRed = "red$MiNN" #Nombre de red
$MiSubred = "misubred$MiNN" #Nombre de la subred
$MiRangoIP = "10.4.1$MiNN.0/24" #Rango de direcciones subrede
$MiLoc = "North Europe" #Localización de todos los recursos. Podría ser también "East US" o ....
$MiAlmacen = "almacensri$MiNN" #Nombre del almacenamiento
$MiVMSize = "Basic_A1" #Tamaño de la máquina virtual
#=============================================
$MiMVws = "ws2015$MiNN" #WINDOWS. Nombre de la máquina virtual
$MiIpPrivws = "10.4.1$MiNN.101" #WINDOWS. Dirección IP privada estática
$MiIPws = "IPws$MiNN" #WINDOWS. Nombre de la Dirección IP pública estática
$MiNICws = "NICws$MiNN" #WINDOWS. Tarjeta de red
$MiGSws = "GS_ws$MiNN" #WINDOWS. Grupo de seguridad. Se definirar las reglas de entrada y salida del tráfico
#=============================================
$MiMVus = "us2015$MiNN" #UBUNTU. Nombre de la máquina virtual
$MiIpPrivus = "10.4.1$MiNN.100" #UBUNTU. Dirección IP privada estática
$MiIPus = "IPus$MiNN" #UBUNTU. Nombre de la Dirección IP pública estática
$MiNICus = "NICus$MiNN" #UBUNTU. Tarjeta de red
$MiGSus = "GS_us$MiNN" #UBUNTU. Grupo de seguridad. Se definiran las reglas de entrada y salida del tráfico
#=============================================
Hay que crear:

GRUPO DE RECURSOS en la ubicación que quieras. En nuestro caso será el "Norte de Europa".
New-AzureRmResourceGroup
#Añadir Grupo de Recursos
$GrupoRecursos = New-AzureRmResourceGroup -Location $MiLoc -Name $Migr
#$GrupoRecursos = Get-AzureRmResourceGroup -Name $Migr

GRUPO DE ALMACENAMIENTO
ew-AzureRmStorageAccount
#Añadir Cuenta de almacenamiento
$CuentaAlmacen = New-AzureRmStorageAccount -Location $MiLoc -Name $MiAlmacen -Type Standard_LRS -ResourceGroupName $Migr

RED Y SUBRED. New-AzureRmVirtualNetworkSubnetConfig
New-AzureRmVirtualNetwork

#Añadir Red y Subred
$SubRed = New-AzureRmVirtualNetworkSubnetConfig -Name $MiSubred -AddressPrefix $MiRangoIP
$RedVirtual = New-AzureRmVirtualNetwork -Location $MiLoc -Name $MiRed -AddressPrefix "10.0.0.0/8" -DnsServer $MiDNS -Subnet $SubRed -ResourceGroupName $Migr

GRUPO DE SEGURIDAD (Sólo muestro la regla del RDP, las otras serían similares con distinta prioridad). New-AzureRmNetworkSecurityGroup
#WINDOWS. Añadir Grupo de seguridad
New-AzureRmNetworkSecurityGroup -Location $MiLoc -Name $MiGSws -ResourceGroupName $Migr
Get-AzureRMNetworkSecurityGroup -Name $MiGSws -ResourceGroupName $Migr | Add-AzurermNetworkSecurityRuleConfig -Name "allow-rdp-in" -Direction Inbound -Priority 100 -Access Allow -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 3389 -Protocol TCP | Set-AzureRmNetworkSecurityGroup
Get-AzureRMNetworkSecurityGroup -Name $MiGSws -ResourceGroupName $Migr | Add-AzureRmNetworkSecurityRuleConfig -Name "allow-rdp-out" -Direction Outbound -Priority 100 -Access Allow -SourceAddressPrefix * -SourcePortRange 3389 -DestinationAddressPrefix * -DestinationPortRange * -Protocol TCP | Set-AzureRmNetworkSecurityGroup
$GrupoSeg_ws = Get-AzureRmNetworkSecurityGroup -Name $MiGSws -ResourceGroupName $Migr

CREACIÓN DE IP PÚBLICA ESTÁTICA Y DE LA TARJETA DE RED New-AzureRmPublicIpAddress
New-AzureRmNetworkInterface

$pipws = New-AzureRmPublicIpAddress -Location $MiLoc -Name $MiIPws -AllocationMethod static -ResourceGroupName $Migr -DomainNameLabel $MiMVws
$nicws = New-AzureRmNetworkInterface -Location $MiLoc -Name $MiNICws -SubnetId $RedVirtual.Subnets[0].Id -PublicIpAddressId $pipws.Id -PrivateIpAddress $MiIpPrivws -ResourceGroupName $Migr -NetworkSecurityGroupId $GrupoSeg_ws.Id

CREACIÓN DE LA MÁQUINA VIRTUAL New-AzureRmVM
#=========================== #WINDOWS. Creación de la máquina virtual
$imagePublisher = "MicrosoftWindowsServer"
$imageOffer = "WindowsServer"
$VersionOSSku = "2012-R2-Datacenter"
$pipws = New-AzureRmPublicIpAddress -Location $MiLoc -Name $MiIPws -AllocationMethod static -ResourceGroupName $Migr -DomainNameLabel $MiMVws
$nicws = New-AzureRmNetworkInterface -Location $MiLoc -Name $MiNICws -SubnetId $RedVirtual.Subnets[0].Id -PublicIpAddressId $pipws.Id -PrivateIpAddress $MiIpPrivws -ResourceGroupName $Migr -NetworkSecurityGroupId $GrupoSeg_ws.Id

$cred = Get-Credential -Message "Introduce el nombre del usuario y la contraseña"
$vm = New-AzureRmVMConfig -VMName $MiMVws -VMSize $MiVMSize
$vm = Set-AzureRmVMOperatingSystem -VM $vm -Windows -ComputerName $MiMVws -Credential $cred -ProvisionVMAgent -EnableAutoUpdate
$vm = Set-AzureRmVMSourceImage -VM $vm -PublisherName $imagePublisher -Offer $imageOffer -Skus $VersionOSSku -Version "latest"
$vm = Add-AzureRmVMNetworkInterface -VM $vm -Id $nicws.Id
$osDiskUri = $CuentaAlmacen.PrimaryEndpoints.Blob.ToString() + "vhds/$MiMVws.vhd"
$vm = Set-AzureRmVMOSDisk -VM $vm -Name $MiMVws -VhdUri $osDiskUri -CreateOption fromImage

New-AzureRmVM -ResourceGroupName $Migr -Location $MiLoc -VM $vm


De la misma forma se podría hacer con una máquina virtual Ubuntu.

Si queréis descargar el código podéis hacerlo de:
https://github.com/javiteran/powershellAzureRM
Espero que os sirva.



Para hacer esto hay que primero conectarse a la suscripción de Azure mediante powershell. Login-AzureRmAccount
$subscriptionId =
( Get-AzurermSubscription |
Out-GridView `
-Title "Selecciona cuenta ..." `
-PassThru
).SubscriptionId
Select-AzurermSubscription -SubscriptionId $subscriptionId

#Comprobación
Get-AzurermSubscription

viernes, 16 de octubre de 2015

Creación de Zona DNS con Powershell

Hay momentos en los que necesito crear múltiples zonas y crearlas correctamente.
Siempre necesito crear registros de tipo A, AAAA, CNAME, MX y además configurar correctamente los registro NS y el registro SOA.

He estado investiganco como crearlo automáticamente por powershell y parece que se peude hacer todo lo que quieras.

Utilizando el Powershell ISE y su ayuda con intellisense se puede hacer bastante fácil.

Aconsejo utilizar el parámetro "update-help dnsserver" en el powershell para que funcione el intellisense.



Los cmdlets que he utilizado son:

  • Remove-DnsServerZone
  • Add-DnsServerPrimaryZone
  • Remove-DnsServerResourceRecord
  • Add-DnsServerResourceRecordAAAA
  • Add-DnsServerResourceRecordA
  • Add-DnsServerResourceRecordCName
  • Add-DnsServerResourceRecordMX
  • Add-DnsServerResourceRecord
  • Set-DnsServerResourceRecord

Aunque hay muchos mas.

Al final he hecho el script de powershell utilizando una variable para automatizarlo lo máximo posible. Lo pongo a continuación:

#Descarga la ayuda del dnsserver para que funcione el intellisense
update-help dnsserver


#Introducir el nombre de la zona en la siguiente variable
$QueZona ='prueba.es'
#Como es un ejemplo. BORRA la zona si está creada
Remove-DnsServerZone -Name $QueZona -force 
#Crea una zona primaria con un archivo de zona llamadao zona.dns
Add-DnsServerPrimaryZone -Name $QueZona -ZoneFile "$QueZona.dns"
#Elimina TODOS los registros NS de la zona recien creada. El registro inicial suele ser erroneo.
Remove-DnsServerResourceRecord -Name "@" -RRType Ns -ZoneName $QueZona -Force
#Crea registros de tipo AAAA, A, CNAME, MX
Add-DnsServerResourceRecordAAAA -IPv6Address 2001::115 -Name ns1 -ZoneName $QueZona
Add-DnsServerResourceRecordAAAA -IPv6Address 2001::115 -Name www -ZoneName $QueZona
Add-DnsServerResourceRecordA -IPv4Address 172.20.140.254 -Name ns2 -ZoneName $QueZona
Add-DnsServerResourceRecordAAAA -IPv6Address 2001::115 -Name mail -ZoneName $QueZona

Add-DnsServerResourceRecordCName -HostNameAlias "www.$QueZona" -Name ftp -ZoneName $QueZona
Add-DnsServerResourceRecordCName -HostNameAlias "www.google.es" -Name google -ZoneName $QueZona

Add-DnsServerResourceRecordMX -MailExchange "mail.$QueZona" -Name "@" -Preference 10 -ZoneName $QueZona

#Crea dos registros NS
Add-DnsServerResourceRecord -Name "@" -NameServer ns1.$QueZona -NS -ZoneName $QueZona
Add-DnsServerResourceRecord -Name "@" -NameServer ns2.$QueZona -NS -ZoneName $QueZona

#Modifica los parámetros de "Servidor primario" y "Número de serie" del registro SOA de la zona
$OSOA = Get-DnsServerResourceRecord -ZoneName $QueZona -RRType SOA
$NSOA = Get-DnsServerResourceRecord -ZoneName $QueZona -RRType SOA
$NSOA.RecordData.PrimaryServer = "ns1.$QueZona"
$NSOA.RecordData.SerialNumber = "2015101301"

Set-DnsServerResourceRecord -NewInputObject $NSOA -OldInputObject $OSOA -ZoneName $QueZona
 
Puedes descargar este y otros ejemplos de:

https://github.com/javiteran/Powershell.git

Espero que sea de vuestro interés.

Un saludo.

miércoles, 9 de enero de 2013

Configurar un FTP implicito/explicito con SSL/TLS en Windows Server 2008 R2

Instalar en Windows Server 2008 R2 un sitio FTP seguro tanto implícito (puerto 990) como explícito (puerto 21) obteniendo el certificado de una PKI instalada en el Server 2008 R2.
La configuración de las máquinas que he usado en el ejemplo es la siguiente:

===========================================
Parte 1 en la que se configura el ROL de la PKI/CA (Infraestructura de clave publica o Autoridad Certificadora) con el que vamos a obtener los certificados para poder asegurar en el siguiente vídeo nuestro sitio FTP.

Parte dos en la que realmente se configura el servicio FTP.

En la siguiente imagen se demuestra que tengo las dos conexiónes ftp realizadas:

  1. ftps   --> Conexión FTP IMPLICITA a través del puerto 990
  2. ftpes --> Conexión FTP EXPLICITA a través del puerto 21

Ambas son conexiones cifradas.
La primera realiza primero la negociación de los certificados y luego la conexión al FTP y las transferencias.
La segunda realiza primero la conexión al servidor FTP y después negocia con los certificados como se ve en la imagen también.


Espero que sea de utilidad.