Was bedeutet ein RED X für einen Datenbankbenutzer?

14

Bildbeschreibung hier eingeben

Ich habe zwei neue AD-Gruppen erstellt und sie als Benutzer einer Datenbank hinzugefügt, aber sie werden mit einem ROTEN X angezeigt. Was bedeutet das? Vielen Dank.

Michael Kirkpatrick
quelle

Antworten:

20

Dies bedeutet nicht, dass der Benutzer deaktiviert ist (Sie können nur Anmeldungen deaktivieren ), sondern, dass der Benutzer keine Verbindungsberechtigungen für die Datenbank besitzt. Ich bin nicht sicher, wie genau Ihre Benutzer erstellt wurden, aber der einfachste Weg, dies zu demonstrieren, ist:

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!

(Möglicherweise müssen Sie den Objekt-Explorer zwischen den GOBefehlen aktualisieren, da es sich um eine Zwischenspeicherung handelt.)

So beheben Sie das Problem (vorausgesetzt, Sie möchten, dass die Benutzer tatsächlich eine Verbindung zur Datenbank herstellen können):

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

Sicherlich müssen Sie mehr Berechtigungen anwenden, je nachdem, was Sie für die Ausführung in der Datenbank benötigen.

Es gibt möglicherweise andere, undurchsichtigere Möglichkeiten, in diesen Status zu gelangen (z. B. Hinzufügen einer Domänengruppe zu einer Rolle in einer Datenbank, ohne tatsächlich einen Benutzer hinzuzufügen, wie in der Antwort von MichaelK beschrieben ). Obwohl ich ehrlich bin, war es mir nicht möglich, die Domänengruppe einer Rolle hinzuzufügen, ohne dass ein Benutzer anwesend war, als ich versuchte, das zu tun, was der OP tat, auf die alte oder die richtige Weise:

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

Nachricht 15410, Ebene 11, Status 1, Prozedur sp_addrolemember
Benutzer oder Rolle "[CAKE \ MyGroup]" sind in dieser Datenbank nicht vorhanden.

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

Meldung 15151, Ebene 16, Status 1
Der Principal "CAKE \ MyGroup" kann nicht hinzugefügt werden, da er nicht vorhanden ist oder Sie keine Berechtigung haben.

Natürlich habe ich mit diesem Ergebnis keinen solchen Benutzer in sysusers(veraltet; benutze ihn nicht mehr) oder gesehen sys.database_principals. Wenn ich dies jedoch tat (dank der Antwort von Sepupic ):

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

Dann wurde der Benutzer in diesen Ansichten angezeigt und als Benutzer im Objekt-Explorer mit dem roten x aufgrund von angezeigt HAS_DBACCESS() = 0. Was immer noch ungefähr dasselbe ist: "Ich kann nicht auf die Datenbank zugreifen." Wenn GRANT CONNECTdies nicht funktioniert (in meinem Fall wurde das rote x entfernt, aber ich habe nicht versucht, die Datenbank tatsächlich als dieses Konto abzufragen), versuchen Sie Folgendes, da Sie wissen, dass dies möglicherweise fehlschlägt:

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

In meinem Fall hat es mich daran gehindert, den CREATE USERBefehl auszuführen, als ich die Verbindung zu diesem Benutzer gewährt habe :

Nachricht 15023, Ebene 16, Status 1, Zeile 16
Benutzer, Gruppe oder Rolle "CAKE \ MyGroup" ist bereits in der aktuellen Datenbank vorhanden.

Dieser Zustand wird immer wahr sein , guest/ INFORMATION_SCHEMA/ sys- mit Ausnahme des Gastkontos auf bestimmte Systemdatenbanken. Ignoriere das und lass sie in Ruhe.


Aus dem sp_addrolememberThema :

Bildbeschreibung hier eingeben

Aus dem sys.sysusersThema :

Bildbeschreibung hier eingeben

Aaron Bertrand
quelle
Das hat es für mich behoben. Es muss jedoch ein anderes Problem geben: Meine Benutzer werden über Skripts erstellt und haben Zugriff auf mehrere Datenbanken. Nur ein Benutzer in einem DB benötigte die explizite Berechtigung "CONNECT", um erteilt zu werden.
Morvael
5

Ich möchte nur die Antwort von Aaron Bertrand ergänzen, die diesen Punkt betrifft:

Dies bedeutet, dass der Benutzer keine Verbindungsrechte zur Datenbank hat (Sie können keine Benutzer deaktivieren, nur Anmeldungen). Ich bin nicht sicher, wie genau Ihre Benutzer erstellt wurden ...

Dies kann bei WindowsPrincipals nur folgendermaßen geschehen :

WindowsLogin auf Server - Ebene vorhanden ist, aber nicht auf die betreffende Datenbank abgebildet, entscheidet jemand grant/ denyetwas Erlaubnis zu diesem Windows - Haupt auf Datenbankebene. In diesem Fall wird der entsprechende Benutzer / das entsprechende Schema in der Datenbank erstellt und in die Zeile mit diesem grant/ denygeschrieben sys.database_permissions. Dadurch wird kein Zugriff auf diese Datenbank gewährt, da der neu erstellte Benutzer die connectBerechtigung immer noch nicht besitzt und sie in der Betriebsumgebung mit dem roten Pfeil angezeigt wird.

Sepupic
quelle
Danke, aber wir sprechen von einem ROTEN 'x', nicht von einem Pfeil.
Michael Kirkpatrick
Es ist eine Frage der Studio-Visualisierung, aber es ist das gleiche
Sepupic
0

Ich glaube, ich habe herausgefunden, warum es passiert ist.

Szenario:

Domain \ BI360Users ist eine AD-Gruppe

Domain \ BI360Users wird als Login zum Server hinzugefügt (hat Verbindungsberechtigungen)

Domain \ BI360Users existiert NICHT als Benutzer einer Datenbank

Ich mache folgendes:

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

Wird erfolgreich abgeschlossen.

Aktualisieren: Das ROTE 'x' erscheint.

Bildbeschreibung hier eingeben

Der Benutzer ist NICHT der Datenbank zugeordnet: Bildbeschreibung hier eingeben

Wenn ich jetzt den Benutzer erstelle:

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

Das ROTE 'x' verschwindet: Bildbeschreibung hier eingeben

Es sieht also so aus, als gäbe es keinen Benutzer, obwohl die Bildschirmanzeige dies oben deutlich gezeigt hat.

Hier ist die Info von Sysusers: Bildbeschreibung hier eingeben

Michael Kirkpatrick
quelle
Dies ist, worüber ich gesprochen habe, aber Sie denken fälschlicherweise, dass "der Benutzer NICHT der Datenbank zugeordnet ist", nachdem Sie einer Datenbankrolle erfolgreich die Win-Gruppe hinzugefügt haben. In diesem Moment werden der entsprechende Benutzer und das entsprechende Schema erstellt.
Sepupic
1
Sie müssen etwas anderes getan haben, als die Domänengruppe einer Datenbankrolle hinzuzufügen, da dies nicht funktioniert (es sei denn, Sie verwenden eine ältere Version von SQL Server). Und auch in diesem Szenario hätte GRANT CONNECT, wie meine ursprüngliche Antwort andeutete, das Problem gelöst sein müssen.
Aaron Bertrand
0

Ich hatte das gleiche problem Ich habe das Problem behoben, indem ich den Anmeldestatus im Abschnitt "Status" der Benutzereigenschaft im Abschnitt "Sicherheit / Anmeldung" meiner SQL Server-Datenbank auf "Aktiviert" geändert habe Bildbeschreibung hier eingeben

Die rote Markierung verschwand, nachdem dieser Status geändert wurde.

Manouchehr Chalabi
quelle
-3

Rotes X bedeutet, dass die Anmeldungen in SQL Server deaktiviert sind

Goforebroke
quelle
Vielen Dank. Aber sie sind aktiviert.
Michael Kirkpatrick
Benutzer können nicht deaktiviert werden.
Aaron Bertrand
Ist das Konto auf Instanzebene im Ordner "Logins" vorhanden? Wenn dies der Fall ist, führen Sie den Befehl "Create User [YourLogin] for Login [YourLogin]" in der betreffenden Datenbank aus. Das rote X sollte verschwinden.
Goforebroke