SIDs und IDs
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
Einem Datenbankbenutzer wird bei seiner Erstellung 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 ist die maximale Anzahl von Benutzer-IDs in SQL Server 2000 215 = 32.768. In SQL Server 2005 und höheren Versionen wird die Benutzer-ID als ein 32 Bit großer int-Wert (einschließlich Vorzeichen) 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 veranschaulicht, in fest zugewiesene Bereiche eingeteilt.
SQL Server 2000 ID |
SQL Server 2005 ID |
Zuordnung |
---|---|---|
0 |
0 |
public |
1 |
1 |
dbo (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 |
Die Größe von Benutzer-IDs wurde von smallint (16 Bits) auf int (32 Bits) erhöht. APIs, die eine 16-Bit-Benutzer-ID erfordern, geben falsche Ergebnisse zurück, wenn ihnen eine 32-Bit-Benutzer-ID übergeben wird. Bei der Migration von Daten und Anwendungen, die für SQL Server 2000 oder frühere Versionen erstellt wurden, sollten Sie den Code auf Verweise auf die folgenden, als veraltet markierten 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.