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’
No hay comentarios:
Publicar un comentario