Mostrando entradas con la etiqueta error usuario. Mostrar todas las entradas
Mostrando entradas con la etiqueta error usuario. Mostrar todas las entradas

martes, 11 de enero de 2011

Windows 2008 R2 y SQL Server 2008 R2: Error 18456 (2)

...al intentar  abrir una conexión con  Management Studio, de manera local,  utilizando una cuenta de dominio con privilegios de adminstrador en el servidor y sysadmin en  SQL Server  (BUILTIN\Administrator no había sido deshabilitado)

Lo curioso es que previamente no hubo problemas para conectar remotamente con esa misma cuenta.

 En el log aparecía el siguiente error:


XXXX-XX-XX 00:00:00.00 Logon       Error: 18456, Severity: 14, State: 11.
XXXX-XX-XX  00:00:00.00 Logon      Login failed for user MYDOMAIN\MYLOGIN'. Reason: Token-based server access validation failed with an infrastructure error. Check for previous errors. [CLIENT: ]

Con SA pude conectarme y añadir directamente  la mencionada cuenta de dominio como login de SQL server, lo cualo soluccionó el problema.



La razón de este problema es  UAC, el nuevo sistema que Microsoft introduce para controlar las cuentas de usuario, el cual deshabilita la opción de, automáticamente,  mapear un usuario adminstrador con un login sysadmin.


Otra solucción, por tanto, sería lanzar Management Studio encomo adminstrador o ejecutarlo  de manera remota.

(Esta otra entrada da más información sobrelas causas más "normales" para el  error 18456)

miércoles, 19 de marzo de 2008

Eliminar usuarios alias

Los alias en SQL sirven para mapear un usuario en una bbdd. A partir de la versión 7.0 se sustituyen por los ‘Roles’, pero se conservan por compatibilidad con versiones anteriores.
Si la bbdd se crea a partir de versiones anteriores (backups o sp_attach) os encontraréis que estos alias aparecen como usuarios huérfanos . Sin emabargo en el Enterprise Manager o Managment Studio no hay señal de ellos.
Un ejemplo de cómo aparecen en sysusers o sys.sysusers :

status 16
name \nombre
roles NULL
altuid 5
hasdbaccess 0
islogin 1
isntname 0
isntgroup 0
isntuser 0
issqluser 0
isaliased 1
issqlrole 0
isapprole 0

Si analizamos el procedimiento sp_addalias, vemos que status= 16 indica que el usuario es un alias.
-- INSERT SYSUSERS ROW --
insert into sysusers select
@newuid, @status | 16, @loginame, @sid, 0x00,
getdate(), getdate(), @targuid, NULL

La barra inclinada [\] es otro distintivo que SQL Server añade al crear un nuevo alias con el fin de evitar conflictos en names space :

- ALTER NAME TO AVOID CONFLICTS IN NAME SPACE --
select @loginame = '\' + @loginame


i se intenta elimiar el alias con sp_dropalias resulta el siguiente error:

Server: Msg 15401, Level 11, State 1, Procedure sp_dropalias, Line 49
Windows NT user or group '[\nombre]' not found. Check the name again.

Sp_helpuser ‘\nombre’ tambíen da error:

Server: Msg 15198, Level 16, State 1, Procedure sp_helpuser, Line 189
The name supplied ([\nombre ]) is not a user, role, or aliased login.

La causa es que el alias está huérfano; el/los usuario/s a los que estaba asociado no existen en la base de datos.
La solución es crear un nuevo usuario al que se le asignará el mismo sid :

sp_addlogin @loginame = 'test, @passwd = 'test', @sid = 0x sid del alias

Y ahora ya se puede eliminar el alias:

Sp_dropalias ‘\nombre’