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


16

権限の問題があるテストデータベースがあります。
レポートデータベースにアクセスできず、アプリケーションのヘルプドキュメントに次のことが記載されています。

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を再度選択してユーザーロールをマップしようとしましたが、上記と同じエラーメッセージが表示されます。

考え?

回答:


12

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

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

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


参照してください support.microsoft.com/en-us/kb/918992 SQL Serverのインスタンス間でログインおよびパスワードを転送する方法
ジェームズ・ジェンキンス

3

このような問題を修正するために、私の開発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. 修正:エラー15023:現在のデータベースにユーザーが既に存在します
  3. SQLはログインを既存のユーザーにマップします

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

正しいアプローチです。

それ以外の場合:

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

ここに画像の説明を入力してください

そのユーザーを目的のデータベースに再マップします。

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.