IDs und SIDs

Neu: 14. April 2006

Beim Schreiben von Code für die Interaktion mit dem SQL Server-Modul sollten Sie auf zwei Nummern achten, die intern zur Darstellung von Prinzipalen verwendet werden. Jeder Prinzipal hat eine ID und eine Sicherheits-ID (SID). Die Bedeutung und Quelle dieser Nummern hängt davon ab, wie der Prinzipal erstellt wurde und ob es sich um einen Serverprinzipal oder um einen Datenbankprinzipal handelt.

ID auf Serverebene

Einem SQL Server-Anmeldenamen wird bei seiner Erstellung eine ID und eine SID zugewiesen. Diese werden in der sys.server_principals-Katalogsicht als principal_id und SID angezeigt. Durch die ID (principal_id) wird der Anmeldename als sicherungsfähiges Element innerhalb des Servers gekennzeichnet. Die ID wird von SQL Server beim Erstellen des Anmeldenamens zugewiesen. Wird ein Anmeldename gelöscht, wird die zugehörige ID-Nummer anschließend wiederverwendet. Durch die SID, die innerhalb der Serverinstanz eindeutig ist, wird der Sicherheitskontext des Anmeldenamens identifiziert. Die Quelle der SID hängt davon ab, wie der Anmeldename erstellt wird. Wenn der Anmeldename aus einem Windows-Benutzer oder einer Windows-Gruppe erstellt wird, erhält er die Windows-SID des Quellprinzipals; die Windows-SID ist innerhalb der Domäne eindeutig. Wird der SQL Server-Anmeldename aus einem Zertifikat oder einem asymmetrischen Schlüssel erstellt, wird ihm eine aus dem SHA-1-Hash des öffentlichen Schlüssels abgeleitete SID zugewiesen. Wenn der Anmeldename als herkömmlicher SQL Server-Anmeldename erstellt wird, für den ein Kennwort erforderlich ist, wird vom Server eine SID generiert.

ID auf Datenbankebene

Wenn eine Datenbankbenutzerrolle erstellt wird, wird dieser eine ID und eine Sicherheits-ID (SID) zugewiesen. Diese Nummern werden in der sys.server_principals-Katalogsicht als principal_id und SID angezeigt. Anhand der ID wird der Benutzer als sicherungsfähiges Element innerhalb der Datenbank identifiziert. Wird ein Datenbankbenutzer gelöscht, wird die zugehörige ID anschließend wiederverwendet. Die einem Datenbankbenutzer zugewiesene SID ist innerhalb der Datenbank eindeutig. Die Quelle der SID hängt davon ab, wie der Datenbankbenutzer erstellt wird. Wenn der Benutzer aus einem SQL Server-Anmeldenamen erstellt wird, wird ihm die SID des Anmeldenamens zugewiesen. Wird der Benutzer aus einem Zertifikat oder einem asymmetrischen Schlüssel erstellt, wird die SID aus dem SHA-1-Hash des öffentlichen Schlüssels abgeleitet.

Maximale Anzahl von Datenbankbenutzern

Die maximale Anzahl von Datenbankbenutzern wird durch die Größe des Benutzer-ID-Felds bestimmt. Der Wert einer Benutzer-ID muss null oder eine positive ganze Zahl sein. In SQL Server 2000 wird die Benutzer-ID als ein aus 16 Bits (einschließlich Vorzeichen) bestehender smallint-Wert gespeichert. Aus diesem Grund entspricht die maximale Anzahl von Benutzer-IDs in SQL Server 2000 dem Wert 215 = 32.768. In SQL Server 2005 wird die Benutzer-ID als ein aus 32 Bits (einschließlich Vorzeichen) bestehender int-Wert gespeichert. Durch diese zusätzlichen Bits können 231 = 2.147.483.648 ID-Nummern zugewiesen werden.

Datenbankbenutzer-IDs werden, wie in der folgenden Tabelle gezeigt, in fest zugewiesene Bereiche eingeteilt.

ID für SQL Server 2000 ID für SQL Server 2005 Zuordnung

0

0

public

1

1

dbo

2

2

Gast (guest)

3

3

INFORMATION_SCHEMA

4

4

SYSTEM_FUNCTION_SCHEMA

5 - 16383

5 - 16383

Benutzer, Aliase, Anwendungsrollen

16384

16384

db_owner

16385

16385

db_accessadmin

16386

16386

db_securityadmin

16387

16387

db_ddladmin

16389

16389

db_backupoperator

16390

16390

db_datareader

16391

16391

db_datawriter

16392

16392

db_denydatareader

16393

16393

db_denydatawriter

16394 - 16399

16394 - 16399

Reserviert

16400 - 32767

Rollen

16400 - 2,147,483,647

Benutzer, Rollen, Anwendungsrollen, Aliase

In SQL Server 2005 wurde die Größe von Benutzer-IDs von smallint (16 Bits) auf int (32 Bits) angehoben. APIs, für die eine 16-Bit-Benutzer-ID erforderlich ist, geben falsche Ergebnisse zurück, wenn ihnen eine 32-Bit-Benutzer-ID übergeben wird. Beim Migrieren von Daten und Anwendungen, die für eine frühere Version von SQL Server erstellt wurden, sollten Sie den Code auf Verweise auf die folgenden veralteten Schnittstellen überprüfen.

  • sysusers
  • syscacheobjects
  • sysmembers
  • sysobjects
  • syspermissions
  • sysprocesses
  • sysprotects
  • systypes
  • USER_ID

Diese Schnittstellen erfordern 16-Bit-Benutzer-IDs. Die Schnittstellen geben keine richtigen Ergebnisse zurück, wenn sie mit 32-Bit-Benutzer-IDs verwendet werden.

Siehe auch

Konzepte

Prinzipale

Andere Ressourcen

sys.server_principals (Transact-SQL)
sys.database_principals (Transact-SQL)
USER_ID (Transact-SQL)
SUSER_SID (Transact-SQL)
CREATE LOGIN (Transact-SQL)
CREATE USER (Transact-SQL)

Hilfe und Informationen

Informationsquellen für SQL Server 2005