Trennung von Benutzer und Schema

Das Verhalten der Schemas wurde in SQL Server 2005 geändert. Schemas entsprechen nicht mehr Datenbankbenutzern. Jedes Schema ist jetzt ein eindeutiger Namespace, der unabhängig von dem Benutzer vorhanden ist, der ihn erstellt hat. Mit anderen Worten: ein Schema ist einfach ein Container von Objekten. Ein Schema kann im Besitz eines beliebigen Benutzers sein, und dieser Besitz ist übertragbar.

Neues Verhalten

Die Trennung des Besitzes von Schemas hat wichtige Auswirkungen:

  • Der Besitz von Schemas und sicherungsfähigen Elementen mit Schemabereich kann übertragen werden. Weitere Informationen finden Sie unter ALTER AUTHORIZATION (Transact-SQL).

  • Objekte können zwischen Schemas verschoben werden. Weitere Informationen finden Sie unter ALTER SCHEMA (Transact-SQL).

  • In einem einzelnen Schema können Objekte enthalten sein, die im Besitz mehrerer Datenbankbenutzer sind.

  • Mehrere Datenbankbenutzer können ein einzelnes Standardschema gemeinsam nutzen.

  • Berechtigungen für Schemas und in Schemas enthaltene sicherungsfähige Elemente können mit größerer Genauigkeit verwaltet werden, als dies in früheren Versionen der Fall war. Weitere Informationen finden Sie unter GRANT-Schemaberechtigungen (Transact-SQL) und GRANT (Objektberechtigungen) (Transact-SQL).

  • Jedes Schema kann im Besitz eines beliebigen Datenbankprinzipals sein. Dies schließt auch Rollen und Anwendungsrollen ein.

  • Ein Datenbankbenutzer kann gelöscht werden, ohne dass Objekte im entsprechenden Schema gelöscht werden müssen.

  • Mit Code, der für frühere Versionen von SQL Server geschrieben wurde, werden möglicherweise falsche Ergebnisse zurückgegeben, wenn im Code angenommen wird, dass Schemas und Datenbankbenutzer äquivalent sind.

  • Für Katalogsichten, die in früheren Versionen von SQL Server erstellt wurden, werden möglicherweise falsche Ergebnisse zurückgegeben. Dazu zählt beispielsweise sysobjects.

Neue Katalogsichten

Seit SQL Server 2005 stellen Schemas explizite Entitäten dar, die in den Metadaten widergespiegelt werden. Daraus folgt, dass Schemas nur einen Besitzer haben können, ein einzelner Benutzer jedoch viele Schemas besitzen kann. Diese komplexe Beziehung spiegelt sich in den SQL Server 2000-Systemtabellen nicht wider. In SQL Server 2005 wurden neue Katalogsichten eingeführt, die die neuen Metadaten genau wiedergeben.

In der folgenden Tabelle werden die Zuordnungen zwischen den SQL Server 2000-Systemtabellen und den entsprechenden späteren SQL Server 2005-Katalogsichten veranschaulicht:

SQL Server 2000-Systemtabelle

Katalogsicht ab SQL Server 2005

sysusers

sys.database_principals

sys.schemas

syslogins

sys.server_principals

In SQL Server 2005 wurden mehr als 250 neue Katalogsichten eingeführt. Es empfiehlt sich, mit den neuen Katalogsichten auf Metadaten zuzugreifen. Weitere Informationen finden Sie unter Katalogsichten (Transact-SQL).

Mithilfe von neuen DDL-Anweisungen können Komplexitäten für Systemmetadaten eingeführt werden, die in den alten Katalogsichten wie sysobjects nicht genau wiedergegeben werden. In diesem Beispiel sind die durch sysobjects zurückgegebene Benutzer-ID und der zurückgegebene Schemaname nicht synchron und spiegeln den Unterschied zwischen Benutzer und Schema, der in SQL Server 2005 eingeführt wurde, nicht wider.

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
VorsichtshinweisVorsicht

Sie müssen die neuen Katalogsichten in allen Datenbanken verwenden, in denen eine der folgenden DDL-Anweisungen verwendet wurde: CREATE/ALTER/DROP SCHEMA; CREATE/ALTER/DROP USER; CREATE/ALTER/DROP ROLE; CREATE/ALTER/DROP APPROLE; ALTER AUTHORIZATION.

Standardschemas

Zum Auflösen der Namen von sicherungsfähigen Elementen, die nicht vollqualifiziert sind, wird in SQL Server 2000 die Namensauflösung verwendet, um das Schema zu überprüfen, das sich im Besitz des aufrufenden Datenbankbenutzers befindet, sowie das Schema, das sich im Besitz von dbo befindet.

Seit SQL Server 2005 besitzt jeder Benutzer ein Standardschema. Das Standardschema kann mithilfe der Option DEFAULT_SCHEMA von CREATE USER oder ALTER USER festgelegt und geändert werden. Wird DEFAULT_SCHEMA nicht definiert, verwendet der Datenbankbenutzer dbo als Standardschema.