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 que se pueden proteger 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 que se pueden proteger 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 funciones y funciones 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 vistas de catálogo diseñadas para las versiones anteriores de SQL Server pueden producir resultados incorrectos. Esto incluye a sysobjects.
Vistas de catálogo nuevas
A partir de SQL Server 2005, los esquemas son entidades explícitas reflejadas en metadatos; como resultado, los esquemas solo pueden tener un propietario, pero cada 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 |
Con SQL Server 2005, se introdujeron 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 este ejemplo, 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
Advertencia |
---|
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 utiliza 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.
Vea también