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
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)