web-dev-qa-db-ja.com

ログインにはすでに別のユーザー名のアカウントがあります

このSQLを実行すると:

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

次のエラーが発生します。

ログインには、すでに別のユーザー名のアカウントがあります。

これは別のユーザー名が私のログインアカウントにとって何であるかをどのようにして知るのですか?

30
Jack

これは、ログイン[R2Server\AAOUser]がそのデータベースのユーザーにすでにマップされていることを意味します。または、言い換えると、別のデータベースユーザーがこのログインを使用しています。次のクエリを使用して、ログインを使用しているデータベースユーザーを確認できます。

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:互換ビューを使用しないスクリプトのバージョン:

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

それは「メタデータのこと」です...

時々、データベースユーザーは、そのDBで起こっていることのすべての過程で「破損」します。 (DBが復元され、復元されたコピーの役割が、オーバーレイしたものとは異なる場合も、同様の動作が見られます。そのため、以下で試して、問題を解決しました。)

  1. SSMSでログインプロパティを開きます->(セキュリティ|ログイン| failing UserID |プロパティ|ユーザーマッピング)。おそらく、DBは既にチェックされており、役割が割り当てられています(完全に通常のように)。

  2. 参考までに、エラーが発生したDBの権限に注意してください。

  3. そのDBのチェックを外し、ログインを保存します。
  4. 次に、クエリを再実行して、ログイン/ロールをターゲットDBに追加します。正常に動作するはずです。
4
CK in CLE