Co oznacza RED X dla użytkownika bazy danych?

16

wprowadź opis zdjęcia tutaj

Utworzyłem dwie nowe grupy AD i dodałem je jako użytkowników bazy danych, ale są one oznaczone symbolem RED X. Co to oznacza? Dzięki.

Michael Kirkpatrick
źródło

Odpowiedzi:

21

Nie oznacza to, że użytkownik jest wyłączony (możesz tylko wyłączyć logowanie ), oznacza to, że użytkownik nie ma uprawnień do łączenia się z bazą danych. Nie jestem pewien, jak dokładnie utworzono użytkowników, ale najłatwiejszym sposobem na wykazanie tego jest:

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!

(Może być konieczne odświeżenie Eksploratora obiektów między GOpoleceniami, ponieważ, cóż, buforowanie).

Aby to naprawić (zakładając, że faktycznie chcesz, aby mogły łączyć się z bazą danych):

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

Z pewnością będziesz musiał zastosować więcej uprawnień w zależności od tego, czego potrzebujesz, aby móc to zrobić w bazie danych.

Mogą istnieć inne, bardziej niejasne sposoby wejścia w ten stan (np. Dodanie grupy domen do roli w bazie danych bez dodawania użytkownika, jak opisano w odpowiedzi Michaela ). Chociaż będę szczery, kiedy próbowałem zrobić to, co zrobił OP, stary lub właściwy sposób, nie byłem w stanie dodać grupy domen do roli bez obecności użytkownika:

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

Msg 15410, poziom 11, stan 1, procedura sp_addrolemember
Użytkownik lub rola „[CAKE \ MyGroup]” nie istnieje w tej bazie danych.

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

Msg 15151, poziom 16, stan 1
Nie można dodać głównej „CAKE \ MyGroup”, ponieważ nie istnieje lub nie masz uprawnień.

Oczywiście z tym wynikiem nie widziałem żadnego takiego użytkownika w sysusers(przestarzałe; przestań go używać) lub sys.database_principals. Gdybym jednak to zrobił (dzięki odpowiedzi sepupika ):

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

Następnie użytkownik pojawił się w tych widokach i pojawił się jako użytkownik w Eksploratorze obiektów z powodu czerwonego x z powodu HAS_DBACCESS() = 0. Co wciąż oznacza mniej więcej to samo: „nie można uzyskać dostępu do bazy danych”. Więc jeśli powyższe GRANT CONNECTnie działa (w moim przypadku pozbyłem się czerwonego x, ale nie próbowałem faktycznie zapytać bazy danych jako tego konta), spróbuj również wykonać następujące czynności, wiedząc, że może się nie powieść:

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

W moim przypadku udzielenie połączenia z tym użytkownikiem uniemożliwiło mi uruchomienie CREATE USERpolecenia:

Msg 15023, poziom 16, stan 1, wiersz 16
Użytkownik, grupa lub rola „CAKE \ MyGroup” już istnieje w bieżącej bazie danych.

Ten stan zawsze będzie prawdziwy dla guest/ INFORMATION_SCHEMA/ sys- z wyjątkiem konta gościa w niektórych systemowych bazach danych. Zignoruj ​​to i zostaw ich w spokoju.


Z tym sp_addrolemembertemacie :

wprowadź opis zdjęcia tutaj

Z tym sys.sysuserstemacie :

wprowadź opis zdjęcia tutaj

Aaron Bertrand
źródło
Naprawiłem to dla mnie. Ale musi być jeszcze jeden podstawowy problem - moi użytkownicy są tworzeni za pomocą skryptów i mają dostęp do wielu baz danych. Tylko jeden użytkownik na jednym DB potrzebował wyraźnego uprawnienia „CONNECT”.
Morvael,
5

Chcę jedynie uzupełnić odpowiedź Aarona Bertranda dotyczącą tego:

Oznacza to, że użytkownik nie ma uprawnień do łączenia się z bazą danych (nie można wyłączyć użytkowników, tylko logowanie). Nie jestem pewien, jak dokładnie utworzono twoich użytkowników ...

Może się to zdarzyć w przypadku Windowszleceniodawców tylko w następujący sposób:

Windowslogin istnieje na poziomie serwera, ale nie jest mapowany na bazę danych, o której mowa, ktoś decyduje o grant/ denypozwoleniu na tę nazwę systemu Windows na poziomie bazy danych. W takim przypadku odpowiedni użytkownik / schemat zostanie utworzony w bazie danych, a wiersz z tym grant/ denyzostanie zapisany w sys.database_permissions. Nie da to żadnego dostępu do tej bazy danych, ponieważ nowo utworzony użytkownik nadal traci connectuprawnienia, a zobaczysz go w OE z czerwoną strzałką.

sepupiczny
źródło
Dzięki, ale mówimy o CZERWONYM „x”, a nie strzale.
Michael Kirkpatrick
To kwestia wizualizacji Studio, ale to samo
sepupiczny
0

Chyba zrozumiałem, dlaczego tak się stało.

Scenariusz:

Domena \ BI360Users to grupa AD

Domena \ BI360Users jest dodawana jako login do serwera (ma uprawnienia do łączenia)

Domena \ BI360Users NIE istnieje jako użytkownik bazy danych

Wykonuję następujące czynności:

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

Ukończony pomyślnie.

Odśwież: Pojawia się CZERWONA litera „x”.

wprowadź opis zdjęcia tutaj

Użytkownik NIE jest mapowany do bazy danych: wprowadź opis zdjęcia tutaj

Jeśli teraz utworzę użytkownika:

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

Znika czerwony „x”: wprowadź opis zdjęcia tutaj

Wygląda więc na to, że nie było użytkownika, mimo że ekran wyraźnie pokazał go powyżej.

Oto informacje od sysusers: wprowadź opis zdjęcia tutaj

Michael Kirkpatrick
źródło
O tym mówiłem, ale mylisz się, myśląc, że „Użytkownik NIE jest mapowany do bazy danych” po pomyślnym dodaniu grupy Win do roli bazy danych. W tym samym momencie tworzony jest odpowiedni użytkownik i schemat.
sepupiczny
1
Musiałeś zrobić coś innego niż dodanie grupy domen do roli bazy danych, ponieważ to nie działa (chyba że korzystasz z jakiejś starożytnej wersji SQL Server). I nawet w tym scenariuszu GRANT CONNECT, jak sugerowała moja pierwotna odpowiedź, powinien był rozwiązać problem.
Aaron Bertrand
0

Miałem ten sam problem. Naprawiłem to, zmieniając status „Login” na „Enabled” w sekcji Status właściwości użytkownika w sekcji „Bezpieczeństwo / Logowanie” mojej bazy danych serwera SQL wprowadź opis zdjęcia tutaj

czerwony znak zniknął po zmianie tego statusu.

Manouchehr Chalabi
źródło
-3

Czerwony X oznacza, że ​​logowania są wyłączone w / w SQL Server

Goforebroke
źródło
Dzięki. Ale są włączone.
Michael Kirkpatrick
Nie można wyłączyć użytkowników.
Aaron Bertrand
Czy konto istnieje w folderze Logins na poziomie instancji? jeśli uruchomi polecenie „Utwórz użytkownika [YourLogin] do logowania [YourLogin]” w / w danej bazie danych. Czerwony X powinien zniknąć.
Goforebroke