Tuesday, December 11, 2007

Kerberos y MOSS 2007

Buen articulo explicando el proceso de activar kerberos en MOSS


Friday, November 30, 2007

Concerning the credentials double hop issue

Este articulo tomado de http://blogs.msdn.com/nunos/archive/2004/03/12/88468.aspx muestra posibles soluciones a el problema de paso credenciales a traves de multiples servidores

Being an ASP.NET enthusiast, I've soon came across this issue and had to deal with it. This happened very shortly after the release of the .NET Framework and, at the time, seemed like a major headache for developers. Well, actually it still does seem like a major headache but I've came to accept it as a "normal" thing :P.

Because I regularly post in ASP.NET newsgroups, I realized that every so often someone sends in an email stating that they lose the user credentials connecting to a SQL Server or accessing a file in a network share from within their ASP.NET application. And this is called the "double hop" issue.

The typical scenario follows: you're building an intranet application and using Integrated Security. You're also setting "" in your web.config file. During an ASP.NET request you can identify the current user but when accessing SQL Server in a trusted connection you get a logon failure stating that user Anonymous isn't allowed. So, basically, it seems that the credentials get lost somewhere in the middle.

Let's look at it step-by-step:

Integrated Security - What this means is that IIS doesn't explicitly ask the users for credentials. Instead the credentials used to log on to their workstation are used to authenticate against IIS. And here is the first hop: the user's credentials are passed from the workstation to the web server in a secure way.

Impersonate - This is a very cool feature. You can access resources in the context of the user currently using your application. This simplifies resource access control but it's only suited for resources hosted on the web server itself.

Double hop - For security reasons, NTLM credentials cannot hop between servers at will. So, accessing a SQL Server instance running on another machine other than the web server will result in a logon failure error. It would be the second hop: the web server would have to pass the user's credentials to the SQL Server machine. For security reasons this is not allowed. Imagine that you access a site through your browser, the site collects your credentials without your knowledge (Integrated security) and then starts doing whatever the developer desires with your identification. Clearly, this is not a good scenario.

Ok, and now that we identified the problem, how do we workaround it?

There are a lot of possible ways to workaround this issue, but I actually couldn't find one that completely satisfies me. Oh well, security is a process and one that should be between our major concerns when writing an application. Here you'll find possible solutions to this problem. Note that you should carefully analyze each of these options and choose whichever fits your security and design requirements.

Basic Authentication (consider HTTPS in this case)
Kerberos and Trust computer for delegation privilege in AD
Specify explicit credentials
1. When using basic authentication, users are asked to insert their credentials when accessing the site. In this case, they are authenticating against the web server and the machine can now use the credentials provided to access SQL Server. You can think of this as the user giving permission to the machine to use his/her identification. This doesn't change anything in your code, it's only an IIS setting. Careful though, because the credentials are sent in clear text between the client machine and the web browser, so you should think of getting a SSL certificate and using https to secure communications.

2. It's a lot more complex to handle authentication this way but Kerberos would allow you to hop the user's identification between servers. You'll also have to give the web server the "Trust machine for delegation" privilege in AD. You'll need to ask a domain admin to do this and normally they don't really like to accept this type of request. It's not a question of bad attitude but concerns for security. If your domain admin refuses your request feel happy that he knows what he's doing ;) Take a look here:


3. This is the solution more commonly used. Basically, you do not connect to SQL Server using a trusted connection, you specify a username and a password in the connection string or you specify this values in the impersonation settings and still use a trusted connection. The connection is still secure, and the only problem you have is where to store the these values so that it'll be safe. Of course, you could hard-code it, but that would leave you with no easy way to change it afterwards. One way is to store it in web.config and that would give you an easy way to change the parameters in runtime. Although the web.config file is not served by IIS (meaning that a client cannot view it in the browser) it's not the safest way to store this valuable piece of information. The recommendation is storing this values in the registry. This article although not specifically written for this issue, does show a way to accomplish this:


That's about it. This is not meant to be a complete article on ASP.NET security. It justs aims to give a few pointers on working around this common problem.

Hope it helps.

Saturday, November 17, 2007

Resumen de Caracteristicas de SQL Server 2008

Este es un resumen de caracteristicas de SQL 2008 creada por Don Schlichting

Transparent Data Encryption. The ability to encrypt an entire database.

Backup Encryption. Executed at backup time to prevent tampering.

External Key Management. Storing Keys separate from the data.

Auditing. Monitoring of data access.

Data Compression. Fact Table size reduction and improved performance.

Resource Governor. Restrict users or groups from consuming high levels or resources.

Hot Plug CPU. Add CPUs on the fly.

Performance Studio. Collection of performance monitoring tools.

Installation improvements. Disk images and service pack uninstall options.

Dynamic Development. New ADO and Visual Studio options as well as Dot Net 3.

Entity Data Services. Line Of Business (LOB) framework and Entity Query Language (eSQL)

LINQ. Development query language for access multiple types of data such as SQL and XML.

Data Synchronizing. Development of frequently disconnected applications.

Large UDT. No size restriction on UDT.

Dates and Times. New data types: Date, Time, Date Time Offset.

File Stream. New data type VarBinary(Max) FileStream for managing binary data.

Table Value Parameters. The ability to pass an entire table to a stored procedure.

Spatial Data. Data type for storing Latitude, Longitude, and GPS entries.

Full Text Search. Native Indexes, thesaurus as metadata, and backup ability.

Reporting Server. Improved memory management.

SQL Server Integration Service. Improved multiprocessor support and faster lookups.

MERGE. TSQL command combining Insert, Update, and Delete.

SQL Server Analysis Server. Stack improvements, faster block computations.

SQL Server Reporting Server. Improved memory management and better rendering.

Microsoft Office 2007. Use OFFICE as an SSRS template. SSRS to WORD.

SQL 200 Support Ends. Mainstream Support for SQL 2000 is coming to an end. Feature and benefits included in Mainstream Support include the ability to submit requests for product feature changes, Security Updates, Non Security Hotfixes, Complimentary support, and Paid Support. This Mainstream Support will expire on 4/8/2008 for SQL Server 2000 64-bit Edition, SQL Server 2000 Developer, SQL Server 2000 Enterprise, SQL Server 2000 Standard, SQL Server 2000 CE, and SQL Server 2000 Workgroup Edition. Extended Support, consisting of Security Updates and Paid Support will continue until 2013. A full description of support phases can be found at these Microsoft URLs: “Microsoft Support Lifecycle” and “Microsoft Support Lifecycle Policy FAQ”. Many resellers will discontinue selling SQL 2000 in December of 2007. Also, no version of SQL 2000 will be supported on Vista, including SQL 2000 Express.


Integration Services en SQL 2008

Dentro de los cambios en SQL Server 2008 se encuentran los siguientes: Integration Services ha sido mejorado para que pueda escalar a mas de dos procesadores, ademas existe un nuevo pipeline redisenado para obtener mayor rendimiento cuando se estan ejecutando paquetes grandes que contienen subarboles, ahora el motor de integration es mas estable y provoca menos deadlocks.

Monday, November 12, 2007

Mejoras en SQL 2008

Con la llegada de SQL Server 2008, algunos de los nuevos tipos de datos que ya son (o serán) novedades tenemos a los siguientes: HIERARCHY ID (para almacenar valores de nodos en un jerarquía), FILESTREAM (para almacenar data de tipo grande, documentos, imágenes), tipos para almacenar datos espaciales como GEOGRAPHY, GEOMETRY, así como los tipos de datos TIME (3 a 5 bytes de tamaño) y DATE (3bytes), DATETIME2 (6 a 8 bytes), DATETIMEOFFSET (8 a 10 bytes), entre otros más.

En este post vamos a hablar acerca de los tipos de datos para manejar fechas y tiempo, es decir, los 4 últimos arriba mencionados. Los otros tipos de datos serán motivos de otro post!.

DATETIME es un tipo de dato compuesto que almacena fecha y tiempo. La novedad es que en SQL Server 2008, el tipo de dato DATETIME se ha separado en dos: DATE y TIME, con esto no quiero decir que DATETIME se haya eliminado, este sigue siendo necesario para otros escenarios, pocos pero en fin. Esta noticia es muy buena ya que por ejemplo, siempre, casi siempre... sólo necesitabamos almacenar la fecha, más no el tiempo, y el único tipo de dato que podiamos usar era DATETIME, el cual "amablemente" guardaba algo más: el tiempo, aunque no lo necesitemos, pues no habia solución. DATETIME aparte de ser un tipo de dato cuyo tamaño es 8 bytes (realmente bastante), es pesado pudiendo originarse problemas de performance general.

Particularmente casi nunca uso DATETIME, prefieron usar con mucho criterio SMALLDATETIME, Porqué?, pues su tamaño es 4 bytes, y para lo que necesito está bien, puedo manejar fechas entre el rango de 1900 y 1979. Obviamente, SMALLDATETIME también almacena la hora, cosa que no se necesita en la mayoria de aplicaciones. De manera semejante sucedía cuando queriamos trabajar sólo con la hora, no había forma de separar la hora de la fecha. Ejemplo:

-- creando un tipo de datos DATE, y asignándole un valor DECLARE @FechaTiempo DATETIMESET @FechaTiempo= GETDATE()SELECT @FechaTiempo AS FechaTiempo
2007-11-03 16:25:53.653

(1 row(s) affected)

Con los tipos de datos DATE y TIME, este problema se soluciona. DATE para almacenar sólo fechas, y TIME para tiempo.

Para asignar valor a un tipo de dato DATETIME usábamos la función del sistema GETDATE(). GETDATE() devuelve un valor de tipo DATETIME. ¿Y cómo asignamos valor a estos nuevos tipos de datos DATE y TIME?, curiosamente la solución es usar GETDATE(). Asi es, pues fíjate que internamente el Database Engine de SQL Server 2008 al detectar que el valor devuelto por GETDATE() será asignado a un tipo DATE o TIME, este filtra sólo la fecha o sólo el tiempo. Veamos un ejemplo:

-- creando un tipo de datos TIEMPO, y asignándole un valor DECLARE @Tiempo TIMESET @Tiempo= GETDATE()SELECT @Tiempo AS Tiempo -- creando un tipo de datos DATE, y asignándole un valor DECLARE @Fecha DATESET @Fecha= GETDATE()SELECT @Fecha AS Fecha

(1 row(s) affected)


(1 row(s) affected)

Otro de los tipos para manejar fecha y tiempo son DATETIME2 y DATETIMEOFFSET, a los cuales yo me refiero como extensiones del tipo DATETIME. DATETIME2 es un DATETIME con más precisión y un mayor rangos de años, y con DATETIMEOFFSET se tendrá la posibilidad de manejar fecha y tiempo relacionados a una zona horaria en particular. Cool! :D.

-- creando un tipo de datos DATETIME2, y asignándole un valor DECLARE @FechaTiempo2 DATETIME2SET @FechaTiempo2= GETDATE()SELECT @FechaTiempo2 AS FechaTiempo2 -- creando un tipo de datos DATETIMEOFFSET, y asignándole un valor DECLARE @FechaTiempoOFFSET DATETIMEOFFSETSET @FechaTiempoOFFSET= GETDATE()SELECT @FechaTiempoOFFSET AS FechaTiempoOFFSET

2007-11-03 16:26:47.8270000

(1 row(s) affected)

2007-11-03 16:26:47.8270000 +00:00

(1 row(s) affected)

Finalmente puedo decir que la gente de SQL Server creo que está escuchando mis oraciones, hace tiempo que venía necesitando estos tipos de datos, rogando que existan tipos de datos separados para manejar fecha y tiempo.

Tomado de:


Que hay de nuevo en SQL 2008

En este articulo encontraran los aspectos nuevos incluidos en SQL Server 2008

Your Data, Any Place, Any Time
SQL Server 2008, the next release of Microsoft SQL Server, will provide a comprehensive data platform that is more secure, reliable, manageable and scalable for your mission critical applications, while enabling developers to create new applications that can store and consume any type of data on any device, and enabling all your users to make informed decisions with relevant insights.


Thursday, November 01, 2007

Conectividad de Analysis Services

1. Permisos de:
C:\Program Files\Microsoft SQL Server\90\Shared
C:\Program Files\Microsoft SQL Server\90\Shared\ASConfig

2. Reg Key
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90\SQL Browser
El key AnalysisServiceListener valor de 1

3. Borrar archivos msmdredir.ini y .bak
C:\Program Files\Microsoft SQL Server\90\Shared\ASConfig

Reinicie SQLBrowser y la instancia nombrada.

Friday, October 12, 2007

Establecer tamaño de los buzones en Exchange

Para establecer el tamaño de los buzones en exchange se puede hacer mediante los siguientes comandos de PowerShell

Set-Mailbox -Identity John -DeliverToMailboxAndForward $true -ForwardingAddress jose@contoso.com
Get-Mailbox -OrganizationalUnit "Marketing" | Set-Mailbox -IssueWarningQuota 209715200 -ProhibitSendQuota 262144000 -ProhibitSendReceiveQuota 293601280 -UseDatabaseQuotaDefaults $false
Get-User -Filter "Department -eq 'Customer Service'" | Set-Mailbox –MaxSendSize 2097152

Monday, October 08, 2007

Problemas con el OAB Offline Address Book en Exchange 2007

Cuando se presenta el error OX8004010F con el OAB algunas pasos para solucionar este problema pueden ser los siguientes

Utilice la herramienta oabinteg:

Otro método más directo es:
En el ADSIEDit, busque el contenedor LostandFoundConfig para el objeto Exchange Addressing.

- Borre cualquier objeto Exchange antiguo. Haga una replicación forzada con el DC.
- Haga un Force Rebuild en el OAB
- Ahora se deben Reconstruir y generar adecuadamente el OAB.
- Reinicie el DC/GC de su red.

Tuesday, October 02, 2007

Sufijos UPN Alternativos

Para configurar los UPN Alternativos para su dominio levante la herramienta Active Directory Domain and Trust, en la raíz del árbol utilice el botón derecho y vea las propiedades, aparecerá una pantalla como la siguiente en la cual se pueden configurar los UPN alternativos.

Friday, September 28, 2007

Limpiar log de bd con mirroring

Estos comandos permiten limpar el log de una bd que tiene mirroring configurado


Vea que se hace shink sobre el log no sobre la BD.

Wednesday, September 26, 2007

Error en IIS Could not create a Disk Cache Sub-directory

Cuando se presenta este error en IIS:

Error: The Template Persistent Cache initialization failed for Application Pool ‘DefaultAppPool’ because of the following error: Could not create a Disk Cache Sub-directory for the Application Pool. The data may have additional error codes..

Este error se presenta en Windows Server 2003 por falta de configuración de seguridad en Windows. Se tiene que dar permisos de full access a las cuentas IIS_WPG y Network Services, en seguridad de los siguientes directorios,

%systemroot%\System32\Inetsrv\ASP Compiled Templates
%systemroot%\IIS Temporary Compressed Files

Tuesday, September 18, 2007

Problemas de Virtual PC

This can happen if changes on one virtual computer are saved while changed on a different virtual computer are not saved, which causes the system account password to become unsynchronized. To disable system account password changes on London, add the RefusePasswordChange D_Word value of 1 in the Registry at HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters. To prevent system account password change requests on Miami and Acapulco, set the DisablePasswordChange value to 1 at HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters.

Wednesday, September 12, 2007

Microsoft IAG

IAG es una solución de seguridad de Microsoft para proveer acceso remoto basado en SSL, para más información ingresen a


Microsoft's Intelligent Application Gateway (IAG) 2007 is the comprehensive, secure remote access gateway that provides secure socket layer (SSL)-based application access and protection with endpoint security management. Read the resources listed below to learn how IAG 2007 enables granular access control, authorization, and deep content inspection from a broad range of devices and locations to a wide variety of line-of-business, intranet, and client/server resources.

• Control Access
Secure, browser-based access to corporate applications and data from more locations and more devices.

• Protect Assets
Ensure the integrity and safety of network and application infrastructure by blocking malicious traffic and attacks.

• Safeguard Information
Comprehensive policy enforcement helps drive compliance with legal and business guidelines for using sensitive data.

Tuesday, September 04, 2007

Fecha de expiracion desde VB.NET

Imports System.DirectoryServices
Imports System.Reflection

Public Shared Function PasswordExpiration() As DateTime

Dim user As DirectoryEntry
Dim root As DirectoryEntry
Dim rootDSE As DirectoryEntry

Dim defaultContext As String

Dim maxPwdVal As Object
Dim pwdLastSetVal As Object

Dim pwdLastSet As Int64
Dim pwdLastSetDate As DateTime
Dim pwdExpirationDate As DateTime
Dim maxPwd As TimeSpan

rootDSE = New DirectoryEntry("LDAP://RootDSE")

defaultContext = DirectCast(rootDSE.Properties("defaultNamingContext").Value, System.String)

'change this to point to the user you wish to check
user = New DirectoryEntry("LDAP://cn=pruebas,cn=Users," + defaultContext)
root = New DirectoryEntry("LDAP://" + defaultContext)

pwdLastSetVal = user.Properties("pwdLastSet").Value
maxPwdVal = root.Properties("maxPwdAge").Value

pwdLastSet = GetInt64FromLargeInteger(pwdLastSetVal)

If pwdLastSet <= 0L Then
Throw New InvalidOperationException("User's password either doesn() 't expire or has already expired.")
pwdLastSetDate = DateTime.FromFileTime(pwdLastSet)
maxPwd = New TimeSpan(GetInt64FromLargeInteger(maxPwdVal))

'these seem to be stored as negative numbers in AD, so I use Subtract instead of Add here...
pwdExpirationDate = pwdLastSetDate.Subtract(maxPwd)
End If

Return pwdExpirationDate

End Function

'Imports System.Reflection is implied here...

Public Shared Function GetInt64FromLargeInteger(ByVal largeInteger As Object) As Long
Dim lowPart As Integer
Dim lBytes() As Byte
Dim highPart As Integer
Dim hBytes() As Byte
Dim valBytes(7) As Byte

Dim longVal As Long
Dim largeIntType As Type

largeIntType = largeInteger.GetType()

highPart = CType(largeIntType.InvokeMember("HighPart", BindingFlags.GetProperty Or BindingFlags.Public, Nothing, largeInteger, Nothing), Integer)
lowPart = CType(largeIntType.InvokeMember("LowPart", BindingFlags.GetProperty Or BindingFlags.Public, Nothing, largeInteger, Nothing), Integer)

lBytes = BitConverter.GetBytes(lowPart)
hBytes = BitConverter.GetBytes(highPart)

lBytes.CopyTo(valBytes, 0)
hBytes.CopyTo(valBytes, 4)

longVal = BitConverter.ToInt64(valBytes, 0)

Return longVal

Catch e As MissingMethodException
Throw New ArgumentException("Invalid COM object passed as parameter. Object must be IADsLargeInteger.", e)
End Try
End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
End Sub

Obtener la fecha de expiracion de los passwords

Para obtener la fecha de expiracion de los password del usuario se puede utilizar el siguiente codigo.

' First, get the domain policy.
Dim oDomain As IADsContainer
Dim oUser As IADsUser
Dim maxPwdAge As LargeInteger

' Declaring numDays as Currency, due to a
' large number calculation.
Dim numDays As Currency

strDomainDN = "YOURDOMAIN"
strUserDN = strDomainDN & "/CN=John Doe,CN=Users,DC=YOURDOMAIN,DC=COM"

Set oDomain = GetObject("LDAP://" & strDomainDN)
Set maxPwdAge = oDomain.Get("maxPwdAge")

' Calculate the number of days that are
' held in this value.
numDays = ((maxPwdAge.HighPart * 2 ^ 32) + _
maxPwdAge.LowPart) / -864000000000@
Debug.Print "Maximum Password Age: " & numDays

' Determine the last time that the user
' changed his or her password.
Set oUser = GetObject("LDAP://" & strUserDN)

' Add the number of days to the last time
' the password was set.
whenPasswordExpires = DateAdd("d", numDays, oUser.PasswordLastChanged)

Debug.Print "Password Last Changed: " & oUser.PasswordLastChanged
Debug.Print "Password Expires On: " & whenPasswordExpires

' Clean up.
Set oUser = Nothing
Set maxPwdAge = Nothing
Set oDomain = Nothing


Friday, August 24, 2007

Dual authentication para MOSS

Si necesita configurar Dual Authentication Providers para MOSS 2007 puede consultar una guia detallada en esta dirección


Habilitar acceso anónimo en MOSS 2007

Las instrucciones para habilitar acceso anónimo son las siguientes:

- Enable anonymous access for a web application from the Central Admin.
- Central Admin Home Page > Application Management > Authentication Providers > select the Membership Provider (authentication.aspx) and enable anonymous access from the next page.
- You don't have to do anything on the IIS Manager ... enabling it from the Central Admin page will also enable it on IIS.
- Explicitly turn it on for the sites you want to be accessed anonymously.
- Browse to the site, click Site Settings > Advanced Permissions > Settings >Anonymous Access (setanon.aspx) and turn on anonymous access for the site.

Monday, August 13, 2007

Cambiar el owner de un sitio en SharePoint

Algunas veces es necesario cambiar el owner de un sitio en Sharepoint para hacerlo utilice la herramienta stsadmin disponible en c:\program files\common files\microsoft shared\web server extensions\12\bin con el siguiente formato:

stsadmin -o siteowner -url http:\\servidor\sitio -ownerlogin dominio\cuenta -secondarylogin dominio\cuenta

Tambien puede utilizar esta otra sintaxis para agregar un usuario

stsadm.exe -o adduser
-url http://server/site
-userlogin DOMAIN\name
-useremail someone@example.com
-role reader
-username "Your Name"

Friday, August 10, 2007

Age of Empires - Halo - Shadowrun - Fable - Concurso de Fin de Semana!

Así es como está la cosa: la semana siguiente es la votación en varios países de la región sobre si OpenXML es aceptado como un estándar ISO o no. Si no estás al tanto de esto puedes ver mi IMtrevista con Dough Mahugh que publiqué hace un par de meses acá en mi blog.

Recientemente me encontré en un blog un comentario sobre que "era muy difícil implementar dicho estándar". Mi teoría es que seguro para esa persona era muy difícil, pero no para los developers de nuestra región. Y entonces, para demostrarlo, se me ocurrió hacer este concurso donde lo bueno es que todos los que logren realizar la tarea tendrán un premio, no es por rifa.

Lo que tienes que hacer es crear un documento Word, Excel o Powerpoint pero sin usar Office, de la siguiente manera:

Construye una aplicación (C#, VB, Java, PHP, no importa ya que OpenXML lo puedes usar desde donde sea) que produzca un archivo OpenXML. Como tú sabes OpenXML es un formato XML para hacer 3 tipos de archivos: un documento, una hoja de excel, o una presentación. En el caso de tu programa tú eliges cuál hacer (fíjate en los premios que habrá para cada tipo).
La aplicación debe ser un EXE que cuando yo lo ejecute en mi PC, creará el archivo en el mismo directorio. No necesita tener intefaz gráfica ni nada, puede ser todo línea de comando.
Ahora, cuando yo abra ese archivo desde Office (o como es OpenXML lo puedo abrir desde WordPerfect Office, Open Office, etc), el archivo debe contener tu nombre, email, dirección física, compañía para la que trabajas, tu puesto y un pequeño texto sobre qué te pareció programar con OpenXML. Si elegiste hacer un documento Word, solo necesitas poner esta info en la primer página del documento; si elegiste una hoja de cálculo Excel, los datos pueden ir en celdas separadas o como tu quieras; si elegiste una presentación Powerpoint tus datos pueden estar en el primer slide.
La unica restricción es que no puedes usar los objetos COM de Office para hacer esto, ya que así sería un simple comando. Debes usar el formato OpenXML como tal desde .NET.
Tienes de tiempo este fin de semana para hacerlo y deberás enviar tu archivo EXE junto con el código fuente compilable en un archivo ZIP a la dirección ccadevs@microsoft.com antes de las 8am (hora Costa Rica) del Lunes 13 de Agosto del 2007. No se aceptarán más admisiones luego de esa hora.

Lo mejor de todo es que puedes participar hasta 3 veces!! Puedes enviarnos tres programas, uno que haga un archivo Word, otro que haga una Hoja de Excel y otra que haga una presentación de PowerPoint!!!

Así serán los premios para cada participante (recuerda que no es rifa):

Por un programa que construya exitosamente un archivo Word, un Age of Empires III
Por un programa que construya exitosamente un archivo Excel, un Halo 2 para Windows
Por un programa que construya exitosamente un archivo PowerPoint, un Shadowrun para Windows
Si mandaste los 3 programas (Word, Excel y PowerPoint) te daremos un premio adicional de un Fable: The Lost Chapters

Qué no sabes cómo usar el formato OpenXML? No te preocupes, hemos creado un kit de entrenamiento online para ti con toda la información del caso que puedes acceder en: http://www.dotnetfitnesscenter.com/kits/openxml

Si tienes alguna duda escríbela acá como comentario en el blog, yo trataré de responderla durante el fin de semana.

Un par de cosas legales: el concurso es válido solo en Caribe y Centroamérica, solo programas que funcionen y con el código fuente podrán participar. Los premios serán entregados en los próximos 2 meses ya que los estamos enviando a traer acá para distribuirlos entre los participantes. Además nos reservamos el derecho de descalificar a alguien que creamos haya copiado su programa de otro participante.

Suerte a todos!!!


Friday, August 03, 2007

Encriptación en SQL Server 2005

Si desean utilizar encriptación en SQL Server 2005 pueden consultar este artículo http://www.sqlservercentral.com/columnists/mgood/3058.asp

Thursday, July 26, 2007

Reiniciar el LockBox de RMS

Algunas veces es necesario reiniciar el LockBox de RMS porque se despliega un mensaje como el siguiente:

The RMS lockbox can move between hierarchies without becoming invalidated. However, if you obtain an RMS account certificate from the wrong hierarchy, the User's RMS license store is invalid.

El lugar de almacenamiento de la licencia de RMs esta en:

%USERPROFILE%\Local Settings\Application Data\Microsoft\DRM

Para solucionar ese problema:

1. Elimine todos los archivos que están en la carpeta \DRM
2. Baje y active el nuevo certificado RMS
3. Reactive cualquier licencia que haya utilizado anteriormente.

Tuesday, July 24, 2007

Monday, July 16, 2007

Revelada fecha de lanzamiento de VS 2008 y SQL Server 2008

En la conferencia mundial de partners Microsoft anunció la fecha de lanzamiento de Windows 2008, SQL Server 2008 y Visual Studio 2008 que será el 27 de febrero del 2008 en Los Angeles

Inicia un nuevo concurso de diseño digital!

Con motivo de la celebración del lanzamiento de los nuevos productos Expression de Microsoft, te invitamos a participar en un concurso que premiará lo mejor del diseño en 3 Categorías:

Diseño Web
Diseño Interactivo
Diseño Gráfico
Lo mejor de todo es que no hay restricción de herramienta de diseño para participar, puedes usar tu favorita aún cuando no sea de Microsoft.

Regístrate y obtén toda la información del concurso aquí! La fecha límite para enviar tus trabajos es el 15 de Septiembre!

Entre los premios podrás obtener el nuevo Microsoft Expression Studio, Visual Studio 2005, Windows Vista Ultimate, Monitores Widescreen de 24 pulgadas, cámaras fotográficas Lomo, tableros de dibujo Wacom y muchos premios más.


Wednesday, June 27, 2007

Lecciones aprendidas sobre vistas particionadas

En este link http://blogs.msdn.com/sqlcat/archive/2007/06/20/distributed-partitioned-views-federated-databases-lessons-learned.aspx podrán encontrar un artículo sobre buenas prácticas cuando se utilizan vistas particionadas.

Thursday, June 21, 2007

Oferta para upgrade a Windows 2008

Restrate en esta página http://www.microsoft.com/learning/mcp/upgrade/ws2003/offer/default.mspx#LONGHORN para recibir un 40% de descuento en el examen de actualización a Windows Server 2008.

Wednesday, June 20, 2007

Error instalando el SQL Server Express Edition SP1

Cuando se está instalando el SP1 de SQL Server Express se puede presentar el siguiente error:

SQL Server Setup did not have the administrator permissions required to rename a file: c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Template Data\mssqlsystemresource1.ldf. To continue, verify that the file exists, and either grant administrator permissions to the account currently running Setup or log in with an administrator account. Then run SQL Server Setup again.

Para solucionarlo siga el siguiente procedimiento:

1. Utilice Sqlcmd Sqlcmd.exe) y conectese a la instancia de SQL Server Express Edition.

2. Desabilite las instancias de usuario :EXEC sp_configure ‘user instances enabled’,0GORECONFIGUREGO

3. Determine las instancias activas :SELECT owning_prinicipal_name, instance_pipe_name FROM sys.dm_os_child_instances WHERE heart_beat = ‘alive’GO

4. Conectese a cada instancia y ejecute:sqlcmd -S np:GOSHUTDOWN WITH NOWAIT;GO
es el nombre del pipe que identificó en el paso 3.

5. Reinstale el SQL Server 2005 Express Edition SP1 o SQL Server 2005 Express Edition con Servicios Avanzados.

6. Conectese a la instancia padre de SQL Server Express Edition por medio de Sqlcmd.

7. Rehabilite las instancias con el siguiente comando:EXEC sp_configure ‘user instances enabled’,1GORECONFIGUREGO

Tuesday, June 19, 2007

CLEI 2007

La Conferencia Latinoamericana de Informática reunirá en su trigésimo tercera edición cuatro eventos diferentes:

Conferencia Latinoamericana de Informática(CLEI) 2007
XV Congreso Iberoamericano de Educación Superior en Computación (CIESC) 2007
Latin American Networking Conference (LANC) 2007
Taller Latinoamericano de Informática para la Biodiversidad (INBI) 2007
Este evento que se realizará entre el 9 y el 12 de octubre del presente año en San José, Costa Rica bajo la organización de varias de las universidades más importantes del país.

El objetivo principal de esta conferencia es continuar siendo el foro latinoamericano más importante en el que científicos, investigadores, profesionales y estudiantes intercambian ideas y comparten resultados de investigaciones en Computación e Informática.

El congreso comprenderá diversas actividades incluyendo sesiones técnicas de presentación de trabajos, foros y paneles de discusión, así como charlas magistrales de personalidades destacadas en el campo.


Monday, June 11, 2007


NDepend es una herramienta que ayuda en el desarrollo de aplicaciones .NET que permite controlar la complejidad, calidad y evolución del código en .NET. NDepende analiza el código fuente y los assemblies con lo cual genera un reporte. Para más información consulta

is a tool for .NET developers that allows controlling the complexity, the quality and the evolution of .NET code. NDepend analyses source code and assemblies and generates a report. A GUI allows to visualize, zoom and control any part of the code. http://www.ndepend.com/Default.aspx

Sunday, June 03, 2007

Error instalando IIS en Windows XP con SP2

Cuando se intenta instalar el IIS en una máquina que tiene instalado Windows XP con SP2 el instalador pregunta por los archivos de origen, sin embargo a pesar de que se inserta el CD correcto el instalador no puede copiar los archivos. Esto se debe a que la BD de componentes puede estar corrupta, para resolverlo ejecuta lo siguiente:

esentutl /g Disco:\WinDir\security\database\secedit.sdb


esentutl /p Disco:\WinDir\security\database\secedit.sdb

Mas información en http://support.microsoft.com/kb/894351

Error ejecutando un instalador de gran tamaño

Cuando se intenta ejecutar un instalador de más de 250MB se podría desplegar el siguiente error:

Error 1718. File FileName was rejected by digital signature policy

Para solucionarlo hay que instalar el siguiente service pack:


FIX: Error message when you try to install a large Windows Installer package or a large Windows Installer patch package in Windows Server 2003 or in Windows XP: "Error 1718. File was rejected by digital signature policy"

Tuesday, May 29, 2007

Procesos de larga duración en VS 2005

Cuando se está depurando una aplicación en VS 2005 y se ejecuta un proceso de larga duración sin procesar los mensajes puede que se despliegue el siguiente error:

ContextSwitchDeadlock was detected
Message: The CLR has been unable to transition from COM context 0x1b3f78 to COM context 0x1b40e8 for 60 seconds. The thread that owns the destination context/apartment is most likely either doing a non pumping wait or processing a very long running operation without pumping Windows messages. This situation generally has a negative performance impact and may even lead to the application becoming non responsive or memory usage accumulating continually over time. To avoid this problem, all single threaded apartment (STA) threads should use pumping wait primitives (such as CoWaitForMultipleHandles) and routinely pump messages during long running operations.

Para evitar que se muestre este error existen dos formas:

1. En Visual Studio vaya a “Debug” -> “Exceptions…”
Managed Debugging Assistants, deseleccione ContextSwitchDeadlock

2. Haga el siguiente cambio en el registry


Tuesday, May 15, 2007

Error compilando en VS 2005

Algunas veces hay problemas cuando compila una aplication y se despliega el error GenericResource error, ese es un problema con la compilación de los archivos de recursos, para evitar eso incluya la siguiente entrada en el archivo de proyecto, abralo con NotePad

< GenerateResourceNeverLockTypeAssemblies> true < / GenerateResourceNeverLockTypeAssemblies >

Esto tiene que ir después del grupo < PropertyGroup >

Tuesday, May 08, 2007

Donde se guardar los archivos de Automatic Updates

Los archivos del automatic updates se guardan en la siguiente ruta C:\WINDOWS\SoftwareDistribution\Download\

Monday, May 07, 2007

Configurar Forms Authentication en Project Server 2007

Para habilitar Forms Authentication en Project Server 2007 se debe seguir los siguientes pasos:

1. Primero crear la base de datos en donde se va a guardar la configuración de los usuarios. Para hacerlo ejecute el siguiente comando
\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe -A m -E

2. Verifique que el usuario con el cual va a ejecutar el Application Pool del sitio de Project Server con Forms Authentication tiene los derechos apropiados dentro de la base de datos aspnetdb que se creó con el script anterior.

3. Se debe extender el sitio actual de PWA con un nuevo WebSite en el cual se brindara el servicio de Forms Authentication

a. Abrir SharePoint 3.0 Central Administration.

b. En Application Management tab, seleccione Create or extend Web application.

c. Despues Extend an existing Web Application.

d. Elija la aplicacion que desea extender, por ejemplo Default Web Site, de click en OK.

e. Seleccione Create a new IIS web site.

f. Cambie el numero de puerto por que desea.

g. El Balance URL es la direccion con la cual ingresan los usuarios de Form Authentication, puede incluir un Header si lo desea.

h. Click OK.

4. Configure el web site para utilice Forms Autentication

a. Application Management page, click Authentication providers.

b. EnIntranet Zone, click Windows link.

c. En Authentication Type, seleccione Forms.

d. En Membership provider digite: AspNetSqlMembershipProvider

e. Click en Save.

5. Modifique el web.config del sitio de PWA con Forms Authentication y de Windows Autentication para incluir la siguiente entrada, despues de ConfigSections

< connectionStrings >

< remove name="LocalSqlServer" />

< add name="LocalSqlServer" connectionString="data source=;Integrated Security=SSPI;Initial Catalog=aspnetdb" />

< /connectionStrings>

6. Ahora esta configurado en nuevo provider, falta crear usuarios de ASP.net lo puede hacer este procedimiento almacenado, en la BD creada anteriormente

declare @now datetime
set @now= GETDATE()
exec aspnet_Membership_CreateUser '/', 'usuario','password','','email@project.com','','',1,@now, @now, 0,0,null

7. Tambien puede crear un XML y utiliza el utilitario
PjFormsAuthUpgrade.exe para incluirlos, la default location es Program Files\Microsoft Office Servers\12.0\Bin).

PjFormsAuthUpgrade.exe -log forms.log –url http://localhost/pwa -usersfile users.xml

El archivo XML puede ser

< ?xml version="1.0"? >

< Users xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/Project/Users.xsd" >
< CreateUser >

< DisplayName > Eduardo Castro < / DisplayName >

< EmailAddr > edocastro@correo.com < / EmailAddr >

< LogonName > ecastro < / LogonName >

< Password > p@ssword1 < / Password >

< Guid > ab3ad5fe-6b56-41e8-a9d8-44af71b91dc4 < / Guid >

< PasswordQuestion > Pregunta password< / PasswordQuestion >

< PasswordAnswer > Respuesta < / PasswordAnswer >

< / CreateUser >

< / Users >

Recuerde que puede agregar más usuarios en el XML lo único que tiene que hacer es asegurarse que el GUID sea distinto. Puede usar este utilitario para crear GUIDs http://msdn2.microsoft.com/en-us/library/ms241442(VS.80).aspx

8. Ahora que ya tiene un usuario lo puede agregar desde PWA como un usuario de Project Server y darle los derechos necesarios, recuerde que el nombre del usuario tiene que ser en formato AspNetSqlMembershipProvider:ecastro y el tipo de autenticacion es Forms Authenticaion

9. Ahora pruebe su aplicacion.

Thursday, May 03, 2007

You receive an HTTP Error 401.1 - Unauthorized: Access is denied due to invalid credentials

Si se recibe este error, es un problema con el envio de tiquetes de kerberos, y es debido a que el application pool esta corriendo bajo una credencial de usuario de dominio. Para arreglar ejecute los siguientes comandos.

setspn.exe -a http/IIS_computer's_NetBIOS_name DomainName\UserName

setspn.exe -a http/IIS_computer's_FQDN DomainName\UserName

Friday, April 13, 2007

Ver bitacora del MSTDC

Para ver las bitacoras del MSTDC tiene que ir a C:\WINDOWS\system32\MsDtc\Trace y ejecutar el siguiente comando msdtcvtr -tracelog archivodelog

Para que les funcione tiene que copiar los archivos tracefmt.exe y traceprt.dll los cuales estan disponible en Resource Kit de Windows XP o Windows 2003.

Diagnostico de Coordinador de Transacciones

Cuando se tiene que diagnosticar los problemas con MSDTC es necesario habilitar el Tracing para hacer eso pueden consultar el siguiente articulo. Esto creara un archivo MsDtcCMErr*.txt en el directorio temporal de la maquina.


MSDTC Connection Manager
NOTE: Make sure that the process has access to the registry keys. By default, our setup does not create this key, and it does not flow permissions to this key. You can use Registry Editor to configure tracing functionality. The registry values that determine tracing functionality are located in the following registry key:
To create tracing functionality registry entries, follow these steps:
• Type: DWORD
• Default value: 0
• Function: The TraceCMErr registry entry specifies whether CM errors are to be traced.

Dar permisos para escribir en el EventViewer

Algunas veces es necesario permitir que ciertos usuarios puedan escribir en el Event Viewer para hacer esto sigue los siguientes pasos:

1. Abrir Registry Editor
2. Ir a la llave HKEY_LOCAL_MACHINE/System/CurrentControlSet/Application
3. Localiza la entrada CustomSD
4. Agrega al final del valor de esta entrada lo siguiente (A;;0x0002;;;AU)

Con eso los usuarios autenticados podran escribir en el Event Viewer

Mostrar los detalles de errores en SharePoint 2007

En algunas ocasiones cuando hay un error en SharePoint 2007 se despliega el error "An unexpected error has ocurred" pero eso no nos ayuda a encontrar el error especifico. Para desplegar correctamente el error cambia el web.config del SharePoint.


SafeMode MaxControls=“200“ CallStack=“false“…


SafeMode MaxControls=“200“ CallStack=“true“…

Ademas modifica para que se muestren los custom errors asi:

customerrors mode="“Off“/"

Wednesday, February 14, 2007

Problema de instalacion de Office 2007

En algun momento durante la instalacion de Office 2007 puede que te de el error "The Windows Installer service cannot update one or more protected windows files", esto se debe a que hace falta el archivo Fpencode.dll en el directorio C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\40\Bin obtiene una copia del mismo del CD de Windows e copialo, y de esa forma podras instalar Office 2007. Si deseas mas informacion entra en http://support.microsoft.com/default.aspx?scid=kb;EN-US;324500

Friday, January 05, 2007

Alias con SQL 2005

Si configurar un Alias con SQL 2005 debes utilizar el nombre del servidor y no la IP. De lo contrario dara timeouts.

Como configurar un alias para conectarse a una instancia en puerto no default

Configure a SQL client alias
If you block UDP port 1434 or TCP port 1433 on the SQL Server computer, you must create a SQL client alias on all other computers in the server farm. You can use SQL Server client components to create a SQL client alias for computers that connect to SQL Server 2000 or SQL Server 2005.

Run Setup for SQL Server 2005 on the target computer and select the following client components to install:

Connectivity Components

Management Tools

Open SQL Server Configuration Manager.

In the left pane, click SQL Native Client Configuration.

In the right pane, right-click Aliases, and select New Alias.

In the Alias dialog box, enter a name for the alias and then enter the port number for the database instance. For example, enter SharePoint_alias.

In the Port No field, enter the port number for the database instance. For example, enter 40000. Ensure that the protocol is set to TCP/IP.

In the Server field, enter the name of the SQL Server computer.

Click Apply, and then click OK.

Test the SQL client alias
Test connectivity to the SQL Server computer by using Microsoft SQL Server Management Studio, which is available by installing SQL Server client components.

Open SQL Server Management Studio.

When you are prompted to enter a server name, enter the name of the alias that you created, and then click Connect. If the connection is successful, SQL Server Management Studio is populated with objects that correspond to the remote database.


Como cambiar el puerto por default en una instancia de SQL Server 2005

Configure a SQL Server 2005 instance to listen on a nondefault port
Use SQL Server Configuration Manager to change the TCP port that is used by an instance of SQL Server 2005.

Use SQL Server Configuration Manager to change the TCP port that is used by an instance of SQL Server 2005.

On the SQL Server computer, open SQL Server Configuration Manager.

In the left pane, expand SQL Server 2005 Network Configuration.

Under SQL Server 2005 Network Configuration, click the corresponding entry for the instance that you are configuring. The default instance is listed as Protocols for MSSQLSERVER. Named instances will appear as Protocols for named_instance.

In the right pane, right-click TCP/IP and click Properties.

Click the IP Addresses tab. For every IP address assigned to the SQL Server computer, there is a corresponding entry on this tab. By default, SQL Server is listening on all IP addresses assigned to the computer.

To globally change the port that the default instance is listening on, perform the following:

For each IP except IPAll, clear all values for both TCP dynamic ports and TCP Port.

For IPAll, clear the value for TCP dynamic ports. In the TCP Port field, enter the port that you want the instance of SQL Server to listen on. For example, enter 40000.

To globally change the port that a named instance is listening on, perform the following:

For each IP including IPAll, clear all values for TCP dynamic ports. A value of 0 for this field indicates that SQL Server uses a dynamic TCP port for the IP address. A blank entry for this value means that SQL Server 2005 will not use a dynamic TCP port for the IP address.

For each IP except IPAll, clear all values for TCP Port.

For IPAll, clear the value for TCP dynamic ports. In the TCP Port field, enter the port that you want the instance of SQL Server to listen on. For example, enter 40000.

Click OK. You will receive a message indicating that the change will not take effect until the SQL Server service is restarted. Click OK.

Close SQL Server Configuration Manager.

Restart the SQL Server service and confirm that the SQL Server computer is listening on the port you selected. You can confirm this by looking in the event viewer log after restarting the SQL Server service. Look for an information event similar to the following event:

Event Type:Information


Event Category:(2)

Event ID:26022


Time:1:46:11 PM




Server is listening on [ 'any' 50000]


Thursday, January 04, 2007

Transferir los roles del un Domain Controller a otro


FSMO Roles
In a forest, there are at least five FSMO roles that are assigned to one or more domain controllers. The five FSMO roles are: • Schema Master: The schema master domain controller controls all updates and modifications to the schema. To update the schema of a forest, you must have access to the schema master. There can be only one schema master in the whole forest.
• Domain naming master: The domain naming master domain controller controls the addition or removal of domains in the forest. There can be only one domain naming master in the whole forest.
• Infrastructure Master: The infrastructure is responsible for updating references from objects in its domain to objects in other domains. At any one time, there can be only one domain controller acting as the infrastructure master in each domain.
• Relative ID (RID) Master: The RID master is responsible for processing RID pool requests from all domain controllers in a particular domain. At any one time, there can be only one domain controller acting as the RID master in the domain.
• PDC Emulator: The PDC emulator is a domain controller that advertises itself as the primary domain controller (PDC) to workstations, member servers, and domain controllers that are running earlier versions of Windows. For example, if the domain contains computers that are not running Microsoft Windows XP Professional or Microsoft Windows 2000 client software, or if it contains Microsoft Windows NT backup domain controllers, the PDC emulator master acts as a Windows NT PDC. It is also the Domain Master Browser, and it handles password discrepancies. At any one time, there can be only one domain controller acting as the PDC emulator master in each domain in the forest.
You can transfer FSMO roles by using the Ntdsutil.exe command-line utility or by using an MMC snap-in tool. Depending on the FSMO role that you want to transfer, you can use one of the following three MMC snap-in tools:
Active Directory Schema snap-in
Active Directory Domains and Trusts snap-in
Active Directory Users and Computers snap-in
If a computer no longer exists, the role must be seized. To seize a role, use the Ntdsutil.exe utility.
Back to the top

Transfer the Schema Master Role
Use the Active Directory Schema Master snap-in to transfer the schema master role. Before you can use this snap-in, you must register the Schmmgmt.dll file.

Register Schmmgmt.dll
1. Click Start, and then click Run.
2. Type regsvr32 schmmgmt.dll in the Open box, and then click OK.
3. Click OK when you receive the message that the operation succeeded.

Transfer the Schema Master Role
1. Click Start, click Run, type mmc in the Open box, and then click OK.
2. On the File, menu click Add/Remove Snap-in.
3. Click Add.
4. Click Active Directory Schema, click Add, click Close, and then click OK.
5. In the console tree, right-click Active Directory Schema, and then click Change Domain Controller.
6. Click Specify Name, type the name of the domain controller that will be the new role holder, and then click OK.
7. In the console tree, right-click Active Directory Schema, and then click Operations Master.
8. Click Change.
9. Click OK to confirm that you want to transfer the role, and then click Close.

Back to the top

Transfer the Domain Naming Master Role
1. Click Start, point to Administrative Tools, and then click Active Directory Domains and Trusts.
2. Right-click Active Directory Domains and Trusts, and then click Connect to Domain Controller.

NOTE: You must perform this step if you are not on the domain controller to which you want to transfer the role. You do not have to perform this step if you are already connected to the domain controller whose role you want to transfer.
3. Do one of the following: • In the Enter the name of another domain controller box, type the name of the domain controller that will be the new role holder, and then click OK.

• In the Or, select an available domain controller list, click the domain controller that will be the new role holder, and then click OK.

4. In the console tree, right-click Active Directory Domains and Trusts, and then click Operations Master.
5. Click Change.
6. Click OK to confirm that you want to transfer the role, and then click Close.

Back to the top

Transfer the RID Master, PDC Emulator, and Infrastructure Master Roles
1. Click Start, point to Administrative Tools, and then click Active Directory Users and Computers.
2. Right-click Active Directory Users and Computers, and then click Connect to Domain Controller.

NOTE: You must perform this step if you are not on the domain controller to which you want to transfer the role. You do not have to perform this step if you are already connected to the domain controller whose role you want to transfer.
3. Do one of the following: • In the Enter the name of another domain controller box, type the name of the domain controller that will be the new role holder, and then click OK.

• In the Or, select an available domain controller list, click the domain controller that will be the new role holder, and then click OK.

4. In the console tree, right-click Active Directory Users and Computers, point to All Tasks, and then click Operations Master.
5. Click the appropriate tab for the role that you want to transfer (RID, PDC, or Infrastructure), and then click Change.
6. Click OK to confirm that you want to transfer the role, and then click Close.

SQL Server 2016 Stretch Databases

El SQL Server Stretch Database permite que los datos históricos o de bitácoras puedan ser movidos hacia Azure, específicamente permite mover...