Friday, August 22, 2008

SQL 2005 y los esquemas.

Para los que hicieron su migración de bases de datos de SQL 2000 a SQL 2005, usando el tradicional método de backup/restore, tienen que tomar en cuenta que al hacer la migración se crearon esquemas por cada rol y usuario en cada base de datos.

Esto podría estar bien para aquellos entornos en que manejen así la seguridad, pero podría crear ciertos "problemas" para los que no. Uno de ellos es que cada user al migrarse es el owner de su esquema y no se puede eliminar por lo mismo.

El error que marca es el siguiente: Msg 15138, Level 16, State 1, Line 1
The database principal owns a schema in the database, and cannot be dropped.

Por lo que es necesario que antes de querer eliminar el user, se cambie el owner del esquema o bien se elimine el esquema.

Cambiar el owner de un esquema es muy sencillo, solamente hay que ejecutar esto:
ALTER AUTHORIZATION ON SCHEMA::[nombre_del_esquema] TO DBO;

Es recomendable hacerlo, para evitar en una futura migración, en la que se borran y vuelven a crear los usuarios.

Un script que se puede utilizar para generar scripts que hagan el cambio de owner de todos los esquemas es el siguiente:

select 'ALTER AUTHORIZATION ON SCHEMA::['+ name + '] TO DBO;'
from sys.schemas where name not in ('dbo','sys','guest','INFORMATION_SCHEMA','db_accessadmin','db_backupoperator','db_datareader','db_datawriter','db_ddladmin','db_denydatareader','db_denydatawriter','db_owner','db_securityadmin')
and principal_id<>1 order by schema_id

Solamente hay que estar en cada una de las bases de datos y correr el script. Una vez que se haya hecho el cambio de owner en los esquemas, los esquemas se pueden eliminar o bien dejarlos en la base de datos.