it-swarm-eu.dev

Přihlášení již má účet pod jiným uživatelským jménem

Když spustím tento SQL:

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

Zobrazila se následující chyba:

Přihlášení již má účet pod jiným uživatelským jménem.

Jak zjistím, co to jiné uživatelské jméno je pro můj přihlašovací účet?

30
Jack

To znamená, že přihlašovací jméno [R2Server\AAOUser] je již mapováno na uživatele v této databázi. Nebo jinými slovy, jiný uživatel databáze používá toto přihlášení. Pomocí následujícího dotazu můžete zjistit, jaký uživatel databáze používá vaše přihlašovací údaje:

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

PS: verze skriptu, která nepoužívá zobrazení kompatibility:

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
32
Marian

Je to „metadata“ ...

Někdy se uživatel databáze „poškodí“ v průběhu toho, co se v této databázi děje. (Viděl jsem podobné chování, pokud se obnoví databáze a role v obnovené kopii se liší od toho, které jste překrývali. Proto jsem se pokusil níže, což problém vyřešilo.)

  1. Otevřete vlastnosti přihlašování v SSMS -> (Zabezpečení | Přihlášení | selhávající UserID | Vlastnosti | Mapování uživatelů). Pravděpodobně uvidíte DB již zkontrolované a přiřazené role (jako naprosto normální).

  2. Všimněte si oprávnění v databázi, která chybu dají, pouze pro informaci.

  3. Zrušte zaškrtnutí této DB a uložte přihlašovací údaje.
  4. Nyní znovu spusťte dotaz a přidejte přihlašovací/roli do cílové databáze. Mělo by to fungovat dobře.
4
CK in CLE