Separación de esquemas de usuario

El comportamiento de los esquemas cambió en SQL Server 2005. Los esquemas ya no son equivalentes a los usuarios de la base de datos; cada esquema ahora es un espacio de nombres distinto que existe de forma independientemente del usuario de base de datos que lo creó. Es decir, un esquema simplemente es un contenedor de objetos. Cualquier usuario puede ser propietario de un esquema, y esta propiedad es transferible.

Comportamiento nuevo

La separación de propiedad de los esquemas tiene consecuencias importantes:

  • La propiedad de los esquemas y de los elementos protegibles con ámbito de esquema es transferible. Para obtener más información, vea ALTER AUTHORIZATION (Transact-SQL).

  • Es posible mover objetos entre esquemas. Para obtener más información, vea ALTER SCHEMA (Transact-SQL).

  • Un mismo esquema puede contener objetos que sean propiedad de varios usuarios de base de datos.

  • Varios usuarios de base de datos pueden compartir un mismo esquema predeterminado.

  • Se pueden administrar los permisos sobre esquemas y sobre elementos protegibles con mayor precisión que en las versiones anteriores. Para obtener más información, vea GRANT (permisos de esquema de Transact-SQL) y GRANT (permisos de objeto de Transact-SQL).

  • Cualquier entidad de seguridad de base de datos puede ser propietaria de un esquema. Esto incluye roles y roles de aplicación.

  • Es posible eliminar un usuario de base de datos sin necesidad de eliminar objetos en un esquema correspondiente.

  • El código escrito para las versiones anteriores de SQL Server puede producir resultados incorrectos si el código considera que los esquemas son equivalentes a los usuarios de base de datos.

  • Las visas de catálogo diseñadas para versiones anteriores de SQL Server pueden devolver resultados incorrectos, incluidos sysobjects.

  • Cuando se crea un objeto de base de datos, si especifica una entidad de seguridad de dominio válida (usuario o grupo) como la propietaria del objeto, la entidad de seguridad de dominio se agregará a la base de datos como esquema. Esa entidad de seguridad de dominio será la propietaria del nuevo esquema.

A partir de SQL Server 2005, los esquemas son entidades explícitas reflejadas en los metadatos y, como resultado, los esquemas solo pueden tener un propietario. Sin embargo, un único usuario puede poseer muchos esquemas. Esta compleja relación no se refleja en las tablas del sistema de SQL Server 2000, por lo que SQL Server 2005 introdujo nuevas vistas de catálogo que reflejan los nuevos metadatos con precisión.

En la tabla siguiente se muestra la asignación entre las tablas del sistema de SQL Server 2000 y las vistas de catálogo de SQL Server 2005 equivalentes.

Tabla del sistema de SQL Server 2000

Vista de catálogo de SQL Server 2005 y versiones posteriores

sysusers

sys.database_principals

sys.schemas

syslogins

sys.server_principals

En SQL Server 2005 se presentaron más de 250 nuevas vistas de catálogo. Se recomienda que utilice las nuevas vistas de catálogo para tener acceso a los metadatos. Para obtener más información, vea Vistas de catálogo (Transact-SQL).

Las nuevas instrucciones DDL pueden introducir complejidades en los metadatos del sistema que no se reflejan con precisión en las vistas de catálogo antiguas, como sysobjects. En el ejemplo siguiente, el identificador de usuario y el nombre del esquema devueltos por sysobjects no están sincronizados y no reflejan la distinción entre el usuario y el esquema que se introdujo en SQL Server 2005.

USE tempdb
GO
CREATE LOGIN u1 WITH PASSWORD = 'Mdfjd$sakj943857l7sdfh##30'
CREATE USER u1 WITH DEFAULT_SCHEMA = u1
GO
GRANT CREATE TABLE to u1 
GO
CREATE SCHEMA sch1
GO
CREATE SCHEMA u1 AUTHORIZATION u1
GO
EXECUTE AS user = 'u1'
GO
CREATE TABLE t1(c1 int)
GO
revert
GO
SELECT user_name(uid) , * FROM sysobjects WHERE name = 't1'
GO
Nota de advertenciaAdvertencia

Es necesario utilizar las nuevas vistas de catálogo en cualquier base de datos en la que se hayan utilizado alguna vez alguna de las instrucciones DDL siguientes: CREATE/ALTER/DROP SCHEMA; CREATE/ALTER/DROP USER; CREATE/ALTER/DROP ROLE; CREATE/ALTER/DROP APPROLE; ALTER AUTHORIZATION.

Esquemas predeterminados

Para resolver los nombres no completos de elementos protegibles, SQL Server 2000 usa la resolución de nombres para comprobar el esquema propiedad del usuario de base de datos que realiza la llamada, seguido del esquema propiedad de dbo.

A partir de SQL Server 2005, cada usuario tiene un esquema predeterminado. Se puede establecer y cambiar el esquema predeterminado mediante la opción DEFAULT_SCHEMA de CREATE USER o ALTER USER. Si se deja sin definir DEFAULT_SCHEMA, el usuario de base de datos tendrá dbo como esquema predeterminado.