답변:
사용자가 비활성화 된 것은 아니며 ( 로그인 만 비활성화 할 수 있음 ) 사용자에게 데이터베이스에 대한 연결 권한이 없음을 의미합니다. 사용자가 어떻게 만들어 졌는지 확실하지 않지만이를 가장 쉽게 보여주는 방법은 다음과 같습니다.
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!
GO
캐싱 때문에 명령 간에 개체 탐색기를 새로 고쳐야 할 수도 있습니다 .
수정하려면 (실제로 데이터베이스에 연결할 수 있기를 원한다고 가정) :
GRANT CONNECT TO [DomainName\BI360Consultants];
GRANT CONNECT TO [DomainName\BI360Users];
데이터베이스에서 수행 할 수있는 작업에 따라 더 많은 권한을 적용해야합니다.
이 상태에 들어가는 더 모호한 다른 방법이있을 수도 있습니다 (예 : MichaelK의 답변에 설명 된대로 실제로 사용자를 추가하지 않고 데이터베이스의 역할에 도메인 그룹 추가 ). 솔직히 말하지만 OP가 한 일, 오래된 방법 또는 올바른 방법을 시도했을 때 사용자가없는 도메인 그룹을 역할에 추가 할 수 없었습니다.
-- the old way
EXEC sys.sp_addrolemember N'db_datareader', N'[CAKE\MyGroup]';
메시지 15410, 수준 11, 상태 1, 프로 시저 sp_addrolemember
사용자 또는 역할 '[CAKE \ MyGroup]'이이 데이터베이스에 없습니다.
-- the right way
ALTER ROLE db_datareader ADD MEMBER [CAKE\MyGroup];
메시지 15151, 수준 16, 상태 1
'CAKE \ MyGroup'보안 주체가 없거나 권한이 없기 때문에 주체를 추가 할 수 없습니다.
물론이 결과로 나는 그런 사용자를 보지 못 sysusers
했거나 (더 이상 사용하지 않습니다.) 사용 하지 않았습니다 sys.database_principals
. 그러나 내가 이것을했다면 ( sepupic의 답변 덕분에 ) :
GRANT SELECT ON dbo.SomeTable TO [CAKE\MyGroup];
그런 다음 사용자가 해당보기에 표시되었고으로 인해 Object Explorer에 빨간색 x가있는 사용자로 표시되었습니다 HAS_DBACCESS() = 0
. "데이터베이스에 액세스 할 수 없습니다." 따라서 위의 방법으로 GRANT CONNECT
작동하지 않는 경우 (내 경우에는 빨간색 x를 제거했지만 실제로 데이터베이스를 해당 계정으로 쿼리하려고 시도하지 않았습니다) 실패하면 다음을 시도하십시오.
CREATE USER [DOMAIN\Group] FROM LOGIN [DOMAIN\Group];
필자의 경우이 사용자에게 연결 권한을 부여하면 CREATE USER
명령 을 실행하지 못했습니다 .
메시지 15023, 수준 16, 상태 1, 줄 16
사용자, 그룹 또는 'CAKE \ MyGroup'역할이 현재 데이터베이스에 이미 있습니다.
이 상태는 특정 시스템 데이터베이스의 게스트 계정을 제외하고 항상 guest
/ INFORMATION_SCHEMA
/ sys
-에 해당됩니다. 이를 무시하고 그대로 두십시오.
에서 주제 :sp_addrolemember
에서 주제 :sys.sysusers
나는 이것을 지키는 Aaron Bertrand의 대답에 덧붙여서하고 싶다.
이는 사용자에게 데이터베이스에 대한 연결 권한이 없음을 의미합니다 (사용자를 비활성화 할 수없고 로그인 만 가능함). 사용자가 어떻게 생성 되었는지 정확히 모르겠습니다 ...
이는 Windows
다음과 같은 방식으로 만 주체에서 발생할 수 있습니다 .
Windows
로그인 서버 수준에서 존재하지만 해당 데이터베이스에 매핑되지 않은, 사람에 결정 grant
/ deny
데이터베이스 수준에서이 윈도우 교장 일부 허가. 이 경우 해당 사용자 / 스키마가 데이터베이스에 작성되고이 grant
/ deny
가있는 행이에 기록됩니다 sys.database_permissions
. 새로 만든 사용자가 여전히 connect
권한을 놓치므로이 데이터베이스에 액세스 할 수 없으며 빨간색 화살표와 함께 OE에 표시됩니다.
왜 그런 일이 일어 났는지 알았습니다.
대본:
Domain \ BI360Users는 AD 그룹입니다.
Domain \ BI360Users가 서버에 대한 로그인으로 추가되었습니다 (연결 권한이 있음)
Domain \ BI360Users가 데이터베이스 사용자로 존재하지 않습니다
나는 다음을한다 :
USE TEMPDB
GO
EXEC sp_addrolemember N'db_datareader', N'Doamin\BI360users'
GO
성공적으로 완료됩니다.
새로 고침 : 빨간색 'x'가 나타납니다.
이제 사용자를 생성하면 :
USE TempDB
GO
CREATE USER [Domain\BI360Users] FOR LOGIN [DOMAIN\BI360Users]
GO
따라서 화면에 위의 내용이 명확하게 표시되어 있어도 사용자가없는 것 같습니다.
GRANT CONNECT
원래의 대답에서 제안했듯이 문제를 해결했을 것입니다.
빨간색 X는 SQL Server에서 로그인이 비활성화되었음을 의미합니다.