SQL Server 2008 con autenticazione di Windows: l'accesso di Windows viene mappato a più utenti DB contemporaneamente?
-
29-10-2019 - |
Domanda
Ho configurato due utenti all'interno di un database Express SQL Server 2008: red
e round
.
red
mappe a un gruppo di Windows localeMACHINE\Red
.
red
è un membro dei ruoli di database predefinitidb_datawriter
.round
mappe a un gruppo di Windows locale chiamatoMACHINE\Round
.
round
è un membro dei ruoli di database predefinitidb_denydatawriter
.
Entrambi i gruppi Windows locali contengono un utente di Windows locale MACHINE\tomato
.
Dalla mia applicazione .NET, ora sto provando a INSERT
dati in qualche tabella di database durante l'accesso come MACHINE\tomato
(e collegandosi al database utilizzando l'autenticazione di Windows). Questo non funziona, presumibilmente a causa dell'appartenenza all'utente SQL round
nel db_denydatawriter
ruolo.
Così, Come può essere l'accesso a Windows mappato a due utenti SQL Server contemporaneamente?
-- MACHINE\Red ---------- red ------- db_datawriter
-- /
-- MACHINE\tomato
-- \
-- MACHINE\Round ------- round ------ db_denydatawriter
E come mai quando recupero l'accesso corrente tramite
SELECT CURRENT_USER -- I could also use SYSTEM_USER or ORIGINAL_LOGIN()
-- with exactly the same result, it seems
torno MYMACHINE\tomato
, e non red
o round
?
Soluzione
Tutto funziona esattamente come dovrebbe. Inizierò dal fondo. Quando si accede a una cartella che fornisce autorizzazioni al gruppo "Domain Programmers", sei ancora in modo univoco come "Domain User". Quindi, sebbene ci vuole tutti i tuoi ruoli, mappano gli utenti ecc. someone-from-"Domain\Programmers"
. SQL Server sta solo segnalando esattamente chi sei.
Per quanto riguarda gli accessi mappati, poiché è possibile mappato su più gruppi di Windows, SQL Server tiene conto di ognuno. Deve, altrimenti 2 ruoli SQL mappati su "Domain Programmers" e "Domain Sysadmin", ognuno con accesso a diversi database. Ti aspetteresti di avere accesso a tutti i database dalla combinazione dei due gruppi Windows. A seguito di ciò, l'intera matrice di accesso è costruita da tutti i
- autorizzazioni specifiche per l'utente di Windows
- autorizzazioni specifiche per utenti Windows diretto (per ruolo)
- autorizzazioni specifiche del gruppo di Windows
- autorizzazioni specifiche per il ruolo di Windows-Group (per ruolo)
In linea con il "Negare Trumps permettete" Meccanismo comune sia a Windows che a SQL Server, un singolo negazione bloccerà tutto l'accesso, altrimenti un unico consumo da qualsiasi ramo consentirà l'accesso.