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.
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.
Odpowiedzi:
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 GO
poleceniami, 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 CONNECT
nie 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 USER
polecenia:
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.
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 Windows
zleceniodawców tylko w następujący sposób:
Windows
login istnieje na poziomie serwera, ale nie jest mapowany na bazę danych, o której mowa, ktoś decyduje o grant
/ deny
pozwoleniu 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
/ deny
zostanie zapisany w sys.database_permissions
. Nie da to żadnego dostępu do tej bazy danych, ponieważ nowo utworzony użytkownik nadal traci connect
uprawnienia, a zobaczysz go w OE z czerwoną strzałką.
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”.
Użytkownik NIE jest mapowany do bazy danych:
Jeśli teraz utworzę użytkownika:
USE TempDB
GO
CREATE USER [Domain\BI360Users] FOR LOGIN [DOMAIN\BI360Users]
GO
Wygląda więc na to, że nie było użytkownika, mimo że ekran wyraźnie pokazał go powyżej.
GRANT CONNECT
, jak sugerowała moja pierwotna odpowiedź, powinien był rozwiązać problem.
Czerwony X oznacza, że logowania są wyłączone w / w SQL Server