web-dev-qa-db-ja.com

SQL Server 2008 R2エラー:15023、ユーザー、グループ、またはロールは既に存在します

権限の問題が発生しているテストデータベースがあります。
レポートデータベースにアクセスできません。アプリケーションのヘルプドキュメントに次のように書かれています。

Resolution: 

1. Launch the SQL Server Management Studio and connect to the database server(s) hosting   the Vision and Reporting Server databases. 
2. Expand the security folder. 
3. Select logins and right click on the <username> user and choose properties. 
4. Click the User Mapping tab 
5.Make sure the following databases are selected in the Users mapped to this Login:

    ReportServer
    ReportServerTempDB
    Your Vision databases
    This maps the login/user to the respective databases.
6. As you select each database (including your Vision database), select the db_owner role in the Database role membership for: section. You must select this option for each database.

これを行うと、次のエラーが発生します。

"Create failed for user '<servername>\<username>'.  User, group, or role '<servername>\<username>' already exists in the current database. (Microsoft SQL Server, Error: 15023)"

私はこのエラーをググって、各データベースで次のコマンドを試しました:

 ALTER USER [<username>] WITH LOGIN = [<username>] 

メッセージはコマンドが正常に完了したことを示しましたが、上記のように各データベースをマップしようとすると、依然として上記のエラーが発生します。

何が欠けていますか?

Kin氏のコメント(ありがとう)について、私はこれを試してみました:-ユーザーを右クリックして、次のように選択しました。 -結果のクエリを実行し、他の2つのデータベースとdb_ownerを再度選択してユーザーロールをマップしようとしましたが、上記と同じエラーメッセージが引き続き表示されます。

考え?

16
brl8

試すことができることはたくさんありますが、それぞれの成功は、おそらくサーバーの役割によって異なります。

まず、正直なところ、ユーザーが1〜2人の場合、最も簡単な方法は、復元されたデータベースからデータベースユーザーを削除し、既存のサーバーログインがある場合は、SSMSを使用してデータベースユーザーをサーバーログインに再マッピングすることです。サーバーログインが存在しない場合は、作成して、ユーザーをマップし、プレストしてください。さようなら。

次のオプション:多数のユーザーを移行する場合は、sp_help_revloginを使用します。 sp_help_revloginは、Microsoftが提供するストアドプロシージャであり、パスワードやSIDを含む、あるサーバーから別のサーバーへのログインの移行に役立ちます。これについての良い記事があります SP_HELP_REVLOGIN

12
Cougar9000

私は開発環境でsp_change_users_loginとともに Auto_Fix を使用して、このような問題を修正しています(エラー15023)。セキュリティ上重要な状況ではAuto_Fixを使用しないでください。

Auto_Fix:現在のデータベースのsys.database_principalsシステムカタログビューのユーザーエントリを、同じ名前のSQL Serverログインにリンクします。同じ名前のログインが存在しない場合は、作成されます。 Auto_Fixステートメントの結果を調べて、実際に正しいリンクが作成されていることを確認します。セキュリティ上重要な状況ではAuto_Fixを使用しないでください。

sp_change_users_login 'AUTO_FIX', 'myuser'

また、この機能はMicrosoft SQL Serverの将来のバージョンで削除される可能性があることに注意してください。

その他の参考資料:

  1. SQL Server 2008のユーザー、グループ、またはロールは現在のデータベースに既に存在します
  2. FIX:エラー15023:ユーザーは既に現在のデータベースに存在しています
  3. SQLは既存のユーザーにログインをマップします
3
LCJ
ALTER USER [<username>] WITH LOGIN=[<username>]

正しいアプローチです。

そうでなければ:

セキュリティ>ログイン>(ユーザー名)>プロパティ>ユーザーマッピング

enter image description here

そのユーザーを必要なデータベースに再マップします。

データベースのコンテキストで次のクエリを使用して、孤立ファイルを確認できます。

select
    dp.name [user_name]
    ,dp.type_desc [user_type]
    ,isnull(sp.name,'Orhphaned!') [login_name]
    ,sp.type_desc [login_type]
from   
    sys.database_principals dp
    left join sys.server_principals sp on (dp.sid = sp.sid)
where
    dp.type in ('S','U','G')
    and dp.principal_id >4
order by sp.name
0