El inicio de sesión ya tiene una cuenta con un nombre de usuario diferente


29

Cuando ejecuto este SQL:

USE ASPState
GO
IF NOT EXISTS(SELECT * FROM sys.sysusers WHERE NAME = 'R2Server\AAOUser')
CREATE USER [R2Server\AAOUser] FOR LOGIN [R2Server\AAOUser];
GO

Obtuve el siguiente error:

El inicio de sesión ya tiene una cuenta con un nombre de usuario diferente.

¿Cómo sé cuál es este nombre de usuario diferente para mi cuenta de inicio de sesión?

Respuestas:


31

Esto significa que el inicio de sesión [R2Server \ AAOUser] ya está asignado a un usuario en esa base de datos. O, en otras palabras, otro usuario de la base de datos está utilizando este inicio de sesión. Puede ver qué usuario de la base de datos está usando su inicio de sesión con la siguiente consulta:

use YourDB
go
SELECT su.name as DatabaseUser
FROM sys.sysusers su
join sys.syslogins sl on sl.sid = su.sid
where sl.name = 'test' -- login

PD: una versión del script que no usa las vistas de compatibilidad:

Select sp.name as LoginName, sp.type_desc as LoginType,
    dp.name as DBUser, dp.type_desc as UserType
from sys.server_principals sp
join sys.database_principals dp on dp.sid = sp.sid
where sp.name = 'test' -- your login

Ok, veo el valor que dbose muestra. Extraño, no recuerdo que haya usado el dbopara mi cuenta R2Server\AAOUser. Preguntándome qué debería hacer a continuación.
Jack

44
¿Ha creado la base de datos utilizando ese inicio de sesión para conectarse al servidor? En caso afirmativo, entonces usted es el propietario de db y no necesita crear otro usuario. Ya estás listo.
Marian

En realidad, usé el comando aspnet_regsql -E -S .\MSSQLSERVER_R2 -ssaddpara crear la ASPStatebase de datos. Creo que probablemente ya estoy listo, aunque, en primer lugar, ni siquiera me doy cuenta.
Jack

Adivina qué: "-E -> Autenticar con las credenciales actuales de Windows". :-)
Marian

44
Yo usaría sys.server_principalsy sys.database_principals. sysusersy sysloginssolo están ahí para la compatibilidad con versiones anteriores.
Aaron Bertrand

4

Es una 'cosa de metadatos' ...

A veces, el usuario de la base de datos se "corrompe" en el transcurso de lo que esté sucediendo en ese DB. (He visto un comportamiento similar si la base de datos se restaura, y los roles en la copia restaurada difieren de los que contenía la superposición. Por eso lo intenté a continuación, lo que solucionó el problema para mí).

  1. Abra las propiedades de inicio de sesión en SSMS -> (Seguridad | Inicios de sesión | ID de usuario que falla | Propiedades | Asignación de usuario). Probablemente verá que la base de datos ya está marcada y tiene roles asignados (como perfectamente normal).

  2. Tenga en cuenta los permisos en la base de datos que dan el error, solo como referencia.

  3. Desmarca esa base de datos y guarda el inicio de sesión.
  4. Ahora vuelva a ejecutar su consulta para agregar el inicio de sesión / rol en la base de datos de destino. debería funcionar bien.

2
cuando llego al paso 3, obtengo:Cannot drop the user 'dbo'. (Microsoft SQL Server, Error: 15150)
bkwdesign

También recibí el Cannot drop the user 'dbo'.mensaje de error. Me encontré con este script, lo que elimina la correlación de usuarios problemáticos y se fija el tema: USE DATABASE_NAME; ALTER AUTHORIZATION ON DATABASE::DATABASE_NAME TO [sa]. Para obtener más información, esta es la fuente que utilicé: blog.sql-assistance.com/index.php/cannot-drop-the-user-dbo
SherlockSpreadsheets
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.