Das klingt dumm, aber ich finde es wirklich verwirrend: in MSDN ist die Definition die Entität, die SQL Server-Ressourcen anfordern kann. Grundsätzlich gibt es drei Arten von Prinzipalen: Principals auf Windows-Ebene, Principals auf SQL Server-Ebene und Principals auf Datenbankebene. Bis jetzt ist es in Ordnung. Nur, dass es mir den Eindruck vermittelt, dass der Bezeichner eines Principals anders sein sollte als der anderer, unabhängig davon, um welchen Typ es sich handelt (wenn alle Principals dieser drei Typen in einer Tabelle angeordnet werden könnten, hätten sie eindeutige Bezeichner)So verstehen Sie Prinzipale in SQL Server?
Der verwirrende Teil stammt aus diesen drei Anfragen unter:
1)
Select name,principal_id from sys.database_principals
(Anmerkung: ich laufe es auf einer Datenbank)
2)
Select name,principal_id from sys.server_principals
Jetzt weiß ich, die erste Datenbank Benutzerprinzipal zurückgibt, während die zweite Server-Benutzer-Prinzipale zurückgibt (korrigieren Sie mich, wenn ich falsch liege). Aber warum kann eine Zeile aus der ersten Abfrage die gleiche Prinzipal-ID haben wie eine aus der zweiten Abfrage? Zum Beispiel würde eine Zeile aus der Datenbank Principals sein:
Name: INFORMATION_SCHEMA, principal_id: 3
während einer Zeile aus der zweiten Abfrage ist
Name: Sysadmin, principal_id: 3
Was sind diese beiden Prinzipal_ID? Wie ich bereits erwähnt habe, dachte ich, dass die Bezeichner von zwei Principals unterschiedlich sein würden, selbst wenn der eine DB-Benutzer und der andere Serverbenutzer ist (und von dem Namen, den ich annehme, ist PrincipalID der Bezeichner).
Nun, wenn die Prinzipal_id nicht für alle Principals eindeutig ist, sondern nur für jeden Abfragebereich eindeutig ist (die Prinzipal_ID aus der ersten Abfrage sind nur Bezeichner für Datenbankbenutzer, also kann es sich auch um eine von Serverbenutzern handeln), habe ich dann eine dritte Abfrage haben und nicht verstehen, was es bedeutet:
3)
SELECT
SDP.PRINCIPAL_ID AS [Principal ID],
SDP.NAME AS [Database UserName],
SDP.TYPE_DESC AS [Datebase UserType],
SSP.NAME AS [Server LoginName],
SSP.TYPE_DESC AS [Server LoginType]
FROM sys.database_principals SDP
INNER JOIN sys.server_principals SSP
ON SDP.PRINCIPAL_ID = SSP.PRINCIPAL_ID
Wenn die beiden principal_id in ihren Bereichen nur einzigartig sind, was bedeutet es, einen inneren zu machen beitreten auf beide Prinzipal_id? Eine innere Verbindung bedeutet, dass diese Spalte gemeinsam einzigartig ist, oder?
Es muss etwas sehr elementares geben, dass ich falsch verstehe. Danke für jede Hilfe!
Woher haben Sie die 3. Abfrage erhalten? –
@Damien_The_Unbeliever viele Artikel haben ähnliche. Wie dieser Link: http://www.sql-server-performance.com/2009/analyzing-sql-server-permissions/ – tete
und haben Sie den einen Kommentar gelesen, der zu diesem Artikel ist - darauf hinweist, dass Beitritt zu Principal_id ist falsch, und dass SIDs stattdessen verwendet werden sollten? –