Séparation du schéma et de l'utilisateur

Le comportement des schémas a changé dans SQL Server 2005. Les schémas ne sont plus équivalents aux utilisateurs de base de données; chaque schéma est à présent un espace de noms distinct qui existe indépendamment de l'utilisateur de base de données qui l'a créé. En d'autres termes, un schéma est simplement un conteneur d'objets. Un schéma peut appartenir à tout utilisateur, et son appartenance est transférable.

Nouveau comportement

La séparation des propriétaires et des schémas présente des implications importantes :

  • La propriété des schémas et des éléments sécurisables sur l'étendue d'un schéma est transférable. Pour plus d'informations, consultez ALTER AUTHORIZATION (Transact-SQL).

  • Les objets peuvent être déplacés parmi les schémas. Pour plus d'informations, consultez ALTER SCHEMA (Transact-SQL).

  • Un même schéma peut contenir des objets appartenant à plusieurs utilisateurs de base de données.

  • Plusieurs utilisateurs de base de données peuvent partager un même schéma par défaut.

  • Les autorisations sur les schémas et les sécurisables contenus dans les schémas peuvent être gérées de manière plus précise que dans les versions antérieures. Pour plus d'informations, consultez GRANT - Autorisations sur un schéma (Transact-SQL) et GRANT – octroi d'autorisations d'objet (Transact-SQL).

  • Un schéma peut appartenir à n'importe quelle entité de sécurité de base de données. Cela comprend les rôles et les rôles d'application.

  • Il est possible de supprimer un utilisateur de base de données sans supprimer les objets dans un schéma correspondant.

  • Le code écrit pour les versions antérieures de SQL Server peut retourner des résultats incorrects si le code suppose que les schémas sont équivalents aux utilisateurs de base de données.

  • Les affichages catalogue conçus pour des versions antérieures de SQL Server peuvent retourner des résultats incorrects. Cela comprend sysobjects.

Nouveaux affichages catalogue

À partir de SQL Server 2005, les schémas sont des entités explicites reflétées dans les métadonnées ; par conséquent, les schémas peuvent avoir un seul propriétaire, mais un utilisateur unique peut posséder plusieurs schémas. Cette relation complexe ne se reflète pas dans les tables système de SQL Server 2000, si bien que SQL Server 2005 a introduit de nouveaux affichages catalogue qui reflètent fidèlement les nouvelles métadonnées.

Le tableau ci-dessous montre la correspondance entre les tables système dans SQL Server 2000 et les affichages catalogue équivalents dans SQL Server 2005 et les versions ultérieures.

Table système SQL Server 2000

Affichage catalogue dans SQL Server 2005 et les versions ultérieures

sysusers

sys.database_principals

sys.schemas

syslogins

sys.server_principals

SQL Server 2005 a introduit plus de 250 nouveaux affichages catalogue. Il est vivement conseillé d'utiliser ces affichages pour accéder aux métadonnées. Pour plus d'informations, consultez Affichages catalogue (Transact-SQL).

Les nouvelles instructions DDL peuvent introduire des éléments de complexité dans les métadonnées système qui ne sont pas reflétés avec exactitude dans les affichages catalogue antérieurs tels que sysobjects. Dans cet exemple, l'ID d'utilisateur et le nom du schéma retournés par sysobjects ne sont pas synchronisés et ne reflètent pas la distinction entre utilisateur et schéma introduite dans 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
AttentionAttention

Vous devez utiliser les nouveaux affichages catalogue dans les bases de données dans lesquelles les instructions DDL suivantes ont été utilisées : CREATE/ALTER/DROP SCHEMA ; CREATE/ALTER/DROP USER ; CREATE/ALTER/DROP ROLE ; CREATE/ALTER/DROP APPROLE ; ALTER AUTHORIZATION.

Schémas par défaut

Afin de résoudre les noms des éléments sécurisables qui ne sont pas des noms complets, SQL Server 2000 utilise la résolution de noms pour vérifier le schéma dont le propriétaire est l'utilisateur de base de données appelant et le schéma dont dbo est le propriétaire.

À partir de SQL Server 2005, chaque utilisateur a un schéma par défaut. Ce schéma par défaut peut être défini et modifié à l'aide de l'option DEFAULT_SCHEMA des instructions CREATE USER ou ALTER USER. Si DEFAULT_SCHEMA n'est pas défini, l'utilisateur de la base de données aura dbo comme schéma par défaut.