Criei dois novos grupos do AD e os adicionei como usuários de um banco de dados, mas eles são exibidos com um RED X. O que isso significa? Obrigado.
Criei dois novos grupos do AD e os adicionei como usuários de um banco de dados, mas eles são exibidos com um RED X. O que isso significa? Obrigado.
Respostas:
Isso não significa que o usuário está desabilitado (você pode desativar apenas os logins ), significa que o usuário não tem privilégios de conexão com o banco de dados. Não sei exatamente como seus usuários foram criados, mas a maneira mais fácil de demonstrar isso é:
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!
(Pode ser necessário atualizar o Pesquisador de Objetos entre os GO
comandos, porque, bem, o armazenamento em cache.)
Para corrigi-lo (assumindo que você realmente deseja que eles possam se conectar ao banco de dados):
GRANT CONNECT TO [DomainName\BI360Consultants];
GRANT CONNECT TO [DomainName\BI360Users];
Certamente, você precisará aplicar mais permissões, dependendo do que você precisa delas para poder fazer no banco de dados.
Pode haver outras maneiras mais obscuras de entrar nesse estado (por exemplo, adicionar um grupo de domínio a uma função em um banco de dados sem realmente adicionar um usuário, conforme descrito na resposta de MichaelK ). Embora seja sincero, quando tentei fazer o que o OP fazia, da maneira antiga ou da maneira correta, não consegui adicionar o grupo de domínio a uma função sem a presença de um usuário:
-- the old way
EXEC sys.sp_addrolemember N'db_datareader', N'[CAKE\MyGroup]';
Msg 15410, nível 11, estado 1, procedimento sp_addrolemember O
usuário ou a função '[CAKE \ MyGroup]' não existe neste banco de dados.
-- the right way
ALTER ROLE db_datareader ADD MEMBER [CAKE\MyGroup];
Msg 15151, Nível 16, Estado 1
Não é possível adicionar o principal 'CAKE \ MyGroup', porque ele não existe ou você não tem permissão.
Obviamente, com esse resultado, eu não vi nenhum usuário em sysusers
(descontinuado; pare de usá-lo) ou sys.database_principals
. No entanto, se eu fiz isso (graças à resposta do sepupic ):
GRANT SELECT ON dbo.SomeTable TO [CAKE\MyGroup];
Em seguida, o usuário apareceu nessas visualizações e apareceu como um usuário no Pesquisador de Objetos com o x vermelho devido a HAS_DBACCESS() = 0
. O que ainda equivale aproximadamente à mesma coisa: "não é possível acessar o banco de dados". Portanto, se o acima GRANT CONNECT
não funcionar (no meu caso, isso eliminou o x vermelho, mas eu não tentei realmente consultar o banco de dados como essa conta), tente também o seguinte, sabendo que pode falhar:
CREATE USER [DOMAIN\Group] FROM LOGIN [DOMAIN\Group];
No meu caso, quando concedi a conexão com esse usuário, ele me impediu de executar o CREATE USER
comando:
A mensagem 15023, nível 16, estado 1, linha 16
Usuário, grupo ou função 'CAKE \ MyGroup' já existe no banco de dados atual.
Esse estado sempre será verdadeiro para guest
/ INFORMATION_SCHEMA
/ sys
- com exceção da conta de convidado em determinados bancos de dados do sistema. Ignore isso e deixe-os em paz.
A partir do sp_addrolemember
tema :
A partir do sys.sysusers
tema :
Quero apenas acrescentar a resposta de Aaron Bertrand sobre esta:
Isso significa que o usuário não possui privilégios de conexão com o banco de dados (não é possível desativar os usuários, apenas os logins). Não sei exatamente como seus usuários foram criados ...
Isso pode acontecer com os Windows
principais apenas da seguinte maneira:
Windows
Como o logon existe no nível do servidor, mas não está mapeado para o banco de dados em questão, alguém decide grant
/ deny
alguma permissão para este principal do Windows no nível do banco de dados. Nesse caso, o usuário / esquema correspondente será criado no banco de dados e a linha com este grant
/ deny
será gravada sys.database_permissions
. Isso não dará acesso a esse banco de dados porque o usuário recém-criado ainda perde a connect
permissão, e você o verá no OE com a seta vermelha.
Eu acho que descobri por que isso aconteceu.
Cenário:
Domain \ BI360Users é um grupo do AD
O domínio \ BI360Users é adicionado como um login ao servidor (possui permissões de conexão)
O domínio \ BI360Users NÃO existe como usuário de um banco de dados
Eu faço o seguinte:
USE TEMPDB
GO
EXEC sp_addrolemember N'db_datareader', N'Doamin\BI360users'
GO
Conclui com sucesso.
Atualizar: O VERMELHO 'x' aparece.
O usuário NÃO é mapeado para o banco de dados:
Se agora eu criar o usuário:
USE TempDB
GO
CREATE USER [Domain\BI360Users] FOR LOGIN [DOMAIN\BI360Users]
GO
Portanto, parece que não havia usuário, mesmo que a tela mostrasse claramente acima.
GRANT CONNECT
, como sugeriu minha resposta original, deveria ter resolvido o problema.
X vermelho significa que os logins estão desabilitados com o SQL Server