権限の問題が発生しているテストデータベースがあります。
レポートデータベースにアクセスできません。アプリケーションのヘルプドキュメントに次のように書かれています。
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を再度選択してユーザーロールをマップしようとしましたが、上記と同じエラーメッセージが引き続き表示されます。
考え?
試すことができることはたくさんありますが、それぞれの成功は、おそらくサーバーの役割によって異なります。
まず、正直なところ、ユーザーが1〜2人の場合、最も簡単な方法は、復元されたデータベースからデータベースユーザーを削除し、既存のサーバーログインがある場合は、SSMSを使用してデータベースユーザーをサーバーログインに再マッピングすることです。サーバーログインが存在しない場合は、作成して、ユーザーをマップし、プレストしてください。さようなら。
次のオプション:多数のユーザーを移行する場合は、sp_help_revloginを使用します。 sp_help_revloginは、Microsoftが提供するストアドプロシージャであり、パスワードやSIDを含む、あるサーバーから別のサーバーへのログインの移行に役立ちます。これについての良い記事があります SP_HELP_REVLOGIN
私は開発環境で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の将来のバージョンで削除される可能性があることに注意してください。
その他の参考資料:
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