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.
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:
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 GO
comandi 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 CONNECT
non 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 USER
comando:
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.
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 Windows
direttori solo nel modo seguente:
Windows
l'accesso esiste a livello di server ma non è mappato al database in questione, qualcuno decide di grant
/ deny
alcune 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.deny
sys.database_permissions
connect
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.
L'utente NON è mappato al database:
Se ora creo l'utente:
USE TempDB
GO
CREATE USER [Domain\BI360Users] FOR LOGIN [DOMAIN\BI360Users]
GO
Quindi, sembra che non ci fosse nessun utente, anche se lo schermo mostrava chiaramente sopra.
GRANT CONNECT
, come suggerito dalla mia risposta originale, avrebbe dovuto risolvere il problema.
La X rossa indica che gli accessi sono disabilitati con SQL Server