Cosa significa una X ROSSA su un utente del database?


16

inserisci qui la descrizione dell'immagine

Ho creato due nuovi gruppi di annunci pubblicitari e li ho aggiunti come utenti di un database, ma vengono visualizzati con una X ROSSA. Cosa significa? Grazie.

Risposte:


21

Non significa che l'utente è disabilitato (è possibile disabilitare solo gli accessi ), significa che l'utente non ha i privilegi di connessione al database. Non sono sicuro di come siano stati creati i tuoi utenti, ma il modo più semplice per dimostrarlo è:

CREATE LOGIN u1 WITH PASSWORD = 'x', CHECK_POLICY = OFF;
GO
USE tempdb;
GO
CREATE USER u1 FROM LOGIN u1;
GO
ALTER LOGIN u1 DISABLE;
GO
-- u1 has no red x even though the login has been disabled

CREATE USER u2 WITHOUT LOGIN;
GO
-- check Object Explorer, u2 has no red x

DENY CONNECT TO u2;
GO
-- check Object Explorer, u2 now has a red x!

CREATE USER u3 WITHOUT LOGIN;
GO
-- check Object Explorer, u3 has no red x

REVOKE CONNECT FROM u3;
GO
-- check Object Explorer, u3 now has a red x!

(Potrebbe essere necessario aggiornare Esplora oggetti tra i GOcomandi perché, beh, la memorizzazione nella cache.)

Per risolverlo (supponendo che tu voglia davvero che siano in grado di connettersi al database):

GRANT CONNECT TO [DomainName\BI360Consultants];
GRANT CONNECT TO [DomainName\BI360Users];

Sicuramente dovrai applicare più autorizzazioni a seconda di ciò che ti serve per essere in grado di fare nel database.

Potrebbero esserci altri modi più oscuri per entrare in questo stato (ad esempio aggiungendo un gruppo di domini a un ruolo in un database senza effettivamente aggiungere un utente, come descritto nella risposta di MichaelK ). Anche se sarò onesto, quando ho provato a fare ciò che l'OP ha fatto, alla vecchia maniera o nel modo giusto, non sono stato in grado di aggiungere il gruppo di dominio a un ruolo senza un utente presente:

-- the old way
EXEC sys.sp_addrolemember N'db_datareader', N'[CAKE\MyGroup]';

Messaggio 15410, livello 11, stato 1, procedura sp_addrolemember L'
utente o il ruolo '[CAKE \ MyGroup]' non esiste in questo database.

-- the right way
ALTER ROLE db_datareader ADD MEMBER [CAKE\MyGroup];

Messaggio 15151, livello 16, stato 1
Impossibile aggiungere il principale 'CAKE \ MyGroup', perché non esiste o non si dispone dell'autorizzazione.

Naturalmente con questo risultato non ho visto nessuno di questi utenti sysusers(deprecato; smettere di usarlo) o sys.database_principals. Tuttavia, se lo facessi (grazie alla risposta di sepupic ):

GRANT SELECT ON dbo.SomeTable TO [CAKE\MyGroup];

Quindi l'utente si è mostrato in quelle viste e si è mostrato come utente in Esplora oggetti con la x rossa a causa di HAS_DBACCESS() = 0. Il che equivale ancora all'incirca alla stessa cosa: "impossibile accedere al database". Quindi, se quanto sopra GRANT CONNECTnon funziona (nel mio caso, quello ha eliminato la x rossa, ma non ho provato a interrogare effettivamente il database come quell'account), prova anche quanto segue, sapendo che potrebbe non riuscire:

CREATE USER [DOMAIN\Group] FROM LOGIN [DOMAIN\Group];

Nel mio caso, quando ho concesso la connessione a questo utente, mi ha impedito di eseguire il CREATE USERcomando:

Messaggio 15023, livello 16, stato 1, riga 16
Utente, gruppo o ruolo "CAKE \ MyGroup" esiste già nel database corrente.

Questo stato sarà sempre vero per guest/ INFORMATION_SCHEMA/ sys- ad eccezione dell'account guest su alcuni database di sistema. Ignoralo e lasciali soli.


Da l' sp_addrolememberargomento :

inserisci qui la descrizione dell'immagine

Da l' sys.sysusersargomento :

inserisci qui la descrizione dell'immagine


Questo mi ha risolto. Ma ci deve essere qualche altro problema di fondo: i miei utenti vengono creati tramite script e hanno accesso a più database. Solo un utente su un DB aveva bisogno dell'autorizzazione esplicita "CONNECT" per essere concesso.
Morvael,

5

Voglio solo fare un'aggiunta alla risposta di Aaron Bertrand registrando questo:

Significa che l'utente non ha i privilegi di connessione al database (non è possibile disabilitare gli utenti, ma solo gli accessi). Non sono sicuro di come siano stati creati i tuoi utenti ...

Questo può accadere con i Windowsdirettori solo nel modo seguente:

Windowsl'accesso esiste a livello di server ma non è mappato al database in questione, qualcuno decide di grant/ denyalcune autorizzazioni per questa entità di Windows a livello di database. In questo caso, l'utente / schema corrispondente verrà creato nel database e verrà scritta la riga con questo grant/ . Questo non darà alcun accesso a questo database perché l'utente appena creato non ha ancora il permesso e lo vedrai in OE con la freccia rossa.denysys.database_permissionsconnect


Grazie, ma stiamo parlando di una "x" ROSSA, non di una freccia.
Michael Kirkpatrick,

È una questione di visualizzazione di Studio, ma è la stessa cosa
sepupico

0

Penso di aver capito perché è successo.

Scenario:

Domain \ BI360Users è un gruppo AD

Domain \ BI360Users viene aggiunto come accesso al server (ha autorizzazioni di connessione)

Domain \ BI360Users NON esiste come utente di un database

Faccio quanto segue:

USE TEMPDB
GO
EXEC sp_addrolemember N'db_datareader', N'Doamin\BI360users'
GO

Completato con successo.

Aggiorna: appare la 'x' ROSSA.

inserisci qui la descrizione dell'immagine

L'utente NON è mappato al database: inserisci qui la descrizione dell'immagine

Se ora creo l'utente:

USE TempDB
GO
CREATE USER [Domain\BI360Users] FOR LOGIN [DOMAIN\BI360Users]
GO

La "x" ROSSA scompare: inserisci qui la descrizione dell'immagine

Quindi, sembra che non ci fosse nessun utente, anche se lo schermo mostrava chiaramente sopra.

Ecco le informazioni di sysusers: inserisci qui la descrizione dell'immagine


Questo è ciò di cui stavo parlando, ma ti sbagli pensando che "L'utente NON è mappato al database" dopo aver aggiunto correttamente il gruppo Win a un ruolo di database. Nello stesso momento vengono creati utente e schema corrispondenti.
sepupic

1
È necessario aver fatto qualcosa di diverso dall'aggiunta del gruppo di dominio a un ruolo del database, perché non funziona (a meno che non ci si trovi in ​​una versione antica di SQL Server). E anche in questo scenario GRANT CONNECT, come suggerito dalla mia risposta originale, avrebbe dovuto risolvere il problema.
Aaron Bertrand

0

Ho avuto lo stesso problema. L'ho risolto cambiando lo stato 'Accesso' in 'Abilitato' nella sezione Stato della proprietà utente in 'Sicurezza / Accesso'section del mio database del server SQL inserisci qui la descrizione dell'immagine

il segno rosso è scomparso dopo aver modificato questo stato.


-3

La X rossa indica che gli accessi sono disabilitati con SQL Server


Grazie. Ma sono abilitati.
Michael Kirkpatrick,

Gli utenti non possono essere disabilitati.
Aaron Bertrand

L'account esiste nella cartella Login a livello di istanza? se esegue il comando "Crea utente [YourLogin] per l'accesso [YourLogin]" con il database in questione. La X rossa dovrebbe scomparire.
Goforebroke,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.