Usando ASP.NET membership en SQL Azure

SQLAzure

El problema

En ocasiones nos olvidamos de que SQL Azure no es lo mismo que SQL Server.

Hoy mismo me he encontrado con una situación de aquellas que te hacen exclamar D’OH!!!, y que afortunadamente he podido solucionar, porque si no ahora mismo no estaría escribiendo este post 🙂

Nota: Antes de seguir, aviso que no voy a entrar en opiniones acerca del sistema de membresía de ASP.NET, todos sabemos que los requerimientos mandan, y si te toca utilizar una herramienta -aunque esté tan mal diseñada como ésta- la usas y punto.

Volviendo al tema, en el proyecto que me ocupa actualmente necesitábamos utilizar ASP.NET membership en una base de datos de SQL Azure. En principio, a nadie se le había ocurrido que no puede hacerse. Al menos no directamente, vaya… Así que cuando he querido utilizar nuestro querido y odiado aspnet_regsql, me he quedado con cara de bobo al fallar el proceso estrepitosamente y mostrarse este error:

An error occurred during the execution of the SQL file ‘InstallCommon.sql’. The SQL error number is 208 and the SqlException message is: Invalid object name ‘master.dbo.sysdatabases’.

Si lo pensamos detenidamente tampoco no es nada extraño. Es normal que no podamos acceder a sysdatabases, de hecho, si lanzamos una consulta como esta en SQL Azure:

SELECT * FROM master.dbo.sysdatabases

Recibiremos un mensaje muy clarito al respecto:

Reference to database and/or server name in ‘master.dbo.sysdatabases’ is not supported in this version of SQL Server.

La solución

Está bien documentada en MSDN archive, y contiene un juego nuevo de scripts para la creación de la base de datos de membresía, adaptado a las particularidades de SQL Azure. Lo podéis encontrar y descargar en esta url:

http://archive.msdn.microsoft.com/KB2006191

Existen dos ficheros a descargar, aunque nos basta con InstallAspSchema.zip, el cual contiene los scripts separados por temas (membresía, roles, etc.) lo cual me parece genial, ya que así vamos a instalar sólo las partes que nos interesan.

aspnet_scripts

Es importante instalarlos en el orden correcto, así que el primero debe ser InstallCommon.sql, y luego ya podemos instalar el resto (en mi caso con InstallMemberShip y InstallRoles tengo más que suficiente).

Nota: En mi caso he tenido que pasar 2 veces el script de membresía ya que la primera vez se había dejado por crear algunas tablas, entre ellas la de aspnet_MemberShip (que guarda entre otros datos el password cifrado). Si alguno de vosotros lo prueba por favor, darme feedback para ver si es un problema común o ha sido algo particular.

Saludos y nos vemos!

More info.

General Guidelines and Limitations (SQL Azure Database)

http://msdn.microsoft.com/en-us/library/ee336245.aspx

Leave a Reply

Your email address will not be published. Required fields are marked *