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.
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.
Antworten:
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 GO
Befehlen 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 CONNECT
dies 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 USER
Befehl 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_addrolemember
Thema :
Aus dem sys.sysusers
Thema :
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 Windows
Principals nur folgendermaßen geschehen :
Windows
Login auf Server - Ebene vorhanden ist, aber nicht auf die betreffende Datenbank abgebildet, entscheidet jemand grant
/ deny
etwas 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
/ deny
geschrieben sys.database_permissions
. Dadurch wird kein Zugriff auf diese Datenbank gewährt, da der neu erstellte Benutzer die connect
Berechtigung immer noch nicht besitzt und sie in der Betriebsumgebung mit dem roten Pfeil angezeigt wird.
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.
Der Benutzer ist NICHT der Datenbank zugeordnet:
Wenn ich jetzt den Benutzer erstelle:
USE TempDB
GO
CREATE USER [Domain\BI360Users] FOR LOGIN [DOMAIN\BI360Users]
GO
Es sieht also so aus, als gäbe es keinen Benutzer, obwohl die Bildschirmanzeige dies oben deutlich gezeigt hat.
GRANT CONNECT
, wie meine ursprüngliche Antwort andeutete, das Problem gelöst sein müssen.
Rotes X bedeutet, dass die Anmeldungen in SQL Server deaktiviert sind