Sembra stupido, ma trovo davvero confuso: in MSDN la definizione è l'entità che può richiedere risorse di SQL Server. E fondamentalmente ci sono tre tipi di principal: principal a livello di Windows, principal a livello di SQL Server e principal a livello di database. Finora va bene. Solo che mi dà l'impressione che l'identificatore di un preside debba essere diverso da altri, indipendentemente dal tipo di principio (se tutti i principali di questi tre tipi potrebbero essere disposti in un'unica tabella, avrebbero identificatori univoci)Come comprendere i principali in SQL Server?
La parte confusa deriva da queste tre domande qui sotto:
1)
Select name,principal_id from sys.database_principals
(Nota: ho eseguito su un database)
2)
Ora so che il primo restituisce i principal degli utenti del database mentre il secondo restituisce i principal degli utenti del server (correggimi se ho torto). Ma perché una riga della prima query può avere lo stesso principal_id di uno dalla seconda query? Ad esempio, una riga dalle entità di database sarebbe:
nome: INFORMATION_SCHEMA, principal_id: 3
mentre una riga dalla seconda query è
nome: sysadmin, principal_id: 3
Quali sono questi due principal_id? Come ho detto, pensavo che gli identificativi di due principal sarebbero stati diversi, anche se uno è un utente di DB e l'altro è un utente di server (e dal nome presumo che principal_id è l'identificatore).
Bene, se il principal_id non è univoco per tutti i principal, ma solo univoco per ciascun intervallo di query (il principal_id dalla prima query sono solo identificativi per gli utenti del database, quindi può essere uguale a uno degli utenti del server), ho poi una terza query e non capisco che cosa vuol dire:
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
Se i due principal_id sono unici solo all'interno delle loro gamme, che cosa vuol dire fare un interno unisciti a principal_id? Un join interno significa che questa colonna è congiuntamente unica, giusto?
Ci deve essere qualcosa di molto elementare che non capisco. Grazie per l'aiuto in proposito!
Da dove hai ottenuto la terza query? –
@Damien_The_Unbeliever molti articoli hanno simili. Ti piace questo link: http://www.sql-server-performance.com/2009/analyzing-sql-server-permissions/ – tete
e hai letto l'unico commento presente in quell'articolo - sottolineando che l'iscrizione a principal_id non è corretta, e che i SID dovrebbero invece essere usati? –