¿Qué significa una RED X en un usuario de la base de datos?

16

ingrese la descripción de la imagen aquí

Creé dos nuevos grupos de AD y los agregué como usuarios de una base de datos, pero se muestran con una X ROJA. ¿Qué significa esto? Gracias.

Michael Kirkpatrick
fuente

Respuestas:

21

No significa que el usuario esté deshabilitado (solo puede deshabilitar inicios de sesión ), significa que el usuario no tiene privilegios de conexión a la base de datos. No estoy seguro exactamente cómo se crearon sus usuarios, pero la forma más fácil de demostrar esto es:

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!

(Es posible que deba actualizar Object Explorer entre GOcomandos porque, bueno, el almacenamiento en caché)

Para solucionarlo (suponiendo que realmente desea que puedan conectarse a la base de datos):

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

Seguramente necesitarás aplicar más permisos dependiendo de lo que necesites para poder hacer en la base de datos.

Puede haber otras formas más oscuras de entrar en este estado (por ejemplo, agregar un grupo de dominio a un rol en una base de datos sin agregar realmente un usuario, como se describe en la respuesta de MichaelK ). Aunque seré honesto, cuando intenté hacer lo que hizo el OP, de la manera anterior o correcta, no pude agregar el grupo de dominio a un rol sin un usuario presente:

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

Mensaje 15410, Nivel 11, Estado 1, Procedimiento sp_addrolemember El
usuario o rol '[CAKE \ MyGroup]' no existe en esta base de datos.

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

Mensaje 15151, Nivel 16, Estado 1
No se puede agregar el principal 'CAKE \ MyGroup', porque no existe o no tiene permiso.

Por supuesto, con este resultado no vi a ningún usuario de este tipo sysusers( en desuso; deje de usarlo) o sys.database_principals. Sin embargo, si hice esto (gracias a la respuesta de Sepupic ):

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

Luego, el usuario apareció en esas vistas y apareció como usuario en Object Explorer con la x roja debido a HAS_DBACCESS() = 0. Lo que aún equivale aproximadamente a lo mismo: "no se puede acceder a la base de datos". Entonces, si lo anterior GRANT CONNECTno funciona (en mi caso, eso eliminó la x roja, pero no intenté realmente consultar la base de datos como esa cuenta), también intente lo siguiente, sabiendo que podría fallar:

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

En mi caso, cuando concedí conectarme con este usuario, me impidió ejecutar el CREATE USERcomando:

El mensaje 15023, Nivel 16, Estado 1, Línea 16
Usuario, grupo o rol 'CAKE \ MyGroup' ya existe en la base de datos actual.

Este estado siempre será verdadero para guest/ INFORMATION_SCHEMA/ sys- con la excepción de la cuenta de invitado en ciertas bases de datos del sistema. Ignora eso y déjalos en paz.


Desde el sp_addrolemembertema :

ingrese la descripción de la imagen aquí

Desde el sys.sysuserstema :

ingrese la descripción de la imagen aquí

Aaron Bertrand
fuente
Esto me lo arregló. Pero debe haber algún otro problema subyacente: mis usuarios se crean a través de scripts y tienen acceso a múltiples bases de datos. Solo un usuario en una base de datos necesitaba el permiso explícito "CONECTAR" para ser otorgado.
Morvael
5

Solo quiero hacer una adición a la respuesta de Aaron Bertrand con respecto a esta:

Significa que el usuario no tiene privilegios de conexión a la base de datos (no puede deshabilitar usuarios, solo inicios de sesión). No estoy seguro exactamente cómo se crearon sus usuarios ...

Esto puede suceder con los Windowsprincipales solo de la siguiente manera:

Windowsel inicio de sesión existe en el nivel del servidor pero no está asignado a la base de datos en cuestión, alguien decide grant/ denyalgún permiso para este principal de Windows en el nivel de la base de datos. En este caso, el usuario / esquema correspondiente se creará en la base de datos y se escribirá en la fila con este grant/ . Esto no dará ningún acceso a esta base de datos porque el usuario recién creado aún pierde el permiso, y lo verá en el entorno operativo con la flecha roja.denysys.database_permissionsconnect

sepupic
fuente
Gracias, pero estamos hablando de una 'x' ROJA, no de una flecha.
Michael Kirkpatrick
Es una cuestión de visualización de Studio, pero es lo mismo
sepupic
0

Creo que descubrí por qué sucedió.

Guión:

Domain \ BI360Users es un grupo de AD

El dominio \ BI360Users se agrega como inicio de sesión en el servidor (tiene permisos de conexión)

El dominio \ BI360Users NO existe como usuario de una base de datos

Hago lo siguiente:

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

Completa con éxito.

Actualizar: aparece la 'x' ROJA.

ingrese la descripción de la imagen aquí

El usuario NO está asignado a la base de datos: ingrese la descripción de la imagen aquí

Si ahora creo el usuario:

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

La 'x' ROJA desaparece: ingrese la descripción de la imagen aquí

Entonces, parece que no hubo ningún usuario a pesar de que la pantalla lo mostró claramente arriba.

Aquí está la información de sysusers: ingrese la descripción de la imagen aquí

Michael Kirkpatrick
fuente
De esto es de lo que estaba hablando, pero te equivocas al pensar que "El usuario NO está asignado a la base de datos" después de que agregaste con éxito el grupo Win a un rol de base de datos. En este mismo momento, se crean el usuario y el esquema correspondientes.
sepupic
1
Debe haber hecho algo más que agregar el grupo de dominio a un rol de base de datos, porque eso no funciona (a menos que esté en alguna versión antigua de SQL Server). Y también en este escenario GRANT CONNECT, como sugirió mi respuesta original, debería haber resuelto el problema.
Aaron Bertrand
0

Yo tuve el mismo problema. Lo arreglé cambiando el estado 'Iniciar sesión' a 'Activado' en la sección Estado de la propiedad del usuario en la sección 'Seguridad / Inicio de sesión' de mi base de datos del servidor SQL ingrese la descripción de la imagen aquí

la marca roja desapareció después de cambiar este estado.

Manouchehr Chalabi
fuente
-3

La X roja significa que los inicios de sesión están deshabilitados con SQL Server

Goforebroke
fuente
Gracias. Pero están habilitados.
Michael Kirkpatrick
Los usuarios no pueden ser deshabilitados.
Aaron Bertrand
¿Existe la cuenta en la carpeta Logins en el nivel de instancia? si ejecuta el comando "Crear usuario [YourLogin] para Iniciar sesión [YourLogin]" con la base de datos en cuestión. La X roja debería desaparecer.
Goforebroke