O que significa um RED X em um usuário de banco de dados?

14

insira a descrição da imagem aqui

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.

Michael Kirkpatrick
fonte

Respostas:

20

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 GOcomandos, 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 CONNECTnã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 USERcomando:

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_addrolemembertema :

insira a descrição da imagem aqui

A partir do sys.sysuserstema :

insira a descrição da imagem aqui

Aaron Bertrand
fonte
Isso consertou para mim. Mas deve haver algum outro problema subjacente - meus usuários são criados por meio de scripts e têm acesso a vários bancos de dados. Somente um usuário em um banco de dados precisava da permissão explícita "CONNECT" para ser concedida.
Morvael 6/12/19
5

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 Windowsprincipais apenas da seguinte maneira:

WindowsComo 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/ denyalguma 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/ denyserá gravada sys.database_permissions. Isso não dará acesso a esse banco de dados porque o usuário recém-criado ainda perde a connectpermissão, e você o verá no OE com a seta vermelha.

sepupico
fonte
Obrigado, mas estamos falando de um 'x' vermelho, não de uma flecha.
Michael Kirkpatrick
É uma questão de visualização Studio, mas é a mesma coisa
sepupic
0

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.

insira a descrição da imagem aqui

O usuário NÃO é mapeado para o banco de dados: insira a descrição da imagem aqui

Se agora eu criar o usuário:

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

O 'x' VERMELHO desaparece: insira a descrição da imagem aqui

Portanto, parece que não havia usuário, mesmo que a tela mostrasse claramente acima.

Aqui estão as informações dos sysusers: insira a descrição da imagem aqui

Michael Kirkpatrick
fonte
Era sobre isso que eu estava falando, mas você está errado ao pensar que "O usuário NÃO está mapeado para o banco de dados" depois de adicionar com êxito o grupo Win a uma função de banco de dados. Nesse mesmo momento, usuário e esquema correspondentes são criados.
Sepupic 24/07/19
1
Você deve ter feito algo diferente de adicionar o grupo de domínio a uma função de banco de dados, porque isso não funciona (a menos que você esteja em uma versão antiga do SQL Server). E também nesse cenário GRANT CONNECT, como sugeriu minha resposta original, deveria ter resolvido o problema.
Aaron Bertrand
0

Eu tive o mesmo problema. Corrigi-o alterando o status 'Login' para 'Ativado' na seção Status da propriedade user em 'Security / Login'section of my SQL server database insira a descrição da imagem aqui

a marca vermelha desapareceu depois de alterar esse status.

Manouchehr Chalabi
fonte
-3

X vermelho significa que os logins estão desabilitados com o SQL Server

Goforebroke
fonte
Obrigado. Mas eles estão habilitados.
Michael Kirkpatrick
Os usuários não podem ser desativados.
Aaron Bertrand
A conta existe na pasta Logins no nível da instância? se executar o comando "Criar usuário [YourLogin] para logon [YourLogin]" com o banco de dados em questão. O X vermelho deve desaparecer.
Goforebroke