SQL Server 2005 誤ってユーザーをパブリック ロールから削除し、そのユーザーをロールに戻すことができません

SQL Server 2005 誤ってユーザーをパブリック ロールから削除し、そのユーザーをロールに戻すことができません

特定のデータベースにのみアクセスでき、他のデータベースを読み取ったり変更したりできず、他のアカウントの資格情報を変更できない DB ユーザー アカウントを作成しようとしています。

接続の問題をトラブルシューティングしているときに、このユーザーを誤って「パブリック」サーバー ロールから削除してしまい、アカウントの Management Studio からサーバーにアクセスできなくなってしまいました。

アクセスを取得する唯一の方法は、ユーザーを sysadmin ロールに追加することですが、ユーザーはすべてのデータベースにアクセスできるため、この方法は機能しません。

ユーザーをパブリック サーバー ロールに再度追加しようとすると、ロールのメンバーシップを変更できないというエラーが表示されます。

不思議なことに、ユーザーを右クリックしてプロパティを表示すると、ユーザーはパブリック ロールのメンバーであると表示され、メンバーシップを変更できません。

質問:

  • では、パブリック ロールのメンバーシップを変更できない場合、そもそもどのようにしてユーザーをロールから削除できたのでしょうか?
  • そのユーザーが管理スタジオに再びアクセスできるようにするには、どうすればユーザーを再度追加できますか?

答え1

追加の詳細について、どの部分が正しくないかを正確に判断できるように、全体の表示方法を次に示します。問題が発生しているアカウントには、サーバーのログインとデータベースのユーザーがいます。サーバー レベルとデータベース レベルでは、パブリック ロール (サーバー ロールとデータベース ロール) が表示されます。パブリック サーバー ロールのプロパティにはユーザーは表示されませんが、ログインのプロパティには、すべてのデータベースのパブリック データベース ロールが表示されます (チェックが付いていて、チェックを外すことはできません)。パブリック データベース ロールのプロパティにもメンバーは表示されず、データベース ユーザーのプロパティにもパブリック ロールは表示されません。このため、パブリック ロールからユーザーを削除したとは考えられません。

ユーザーを削除して再作成したい場合は、まずデータベースにアクセスしてデータベース ユーザーを削除してみてください。これによりログインが残り、そのプロパティに移動すると、ユーザー マッピングでデータベースがチェックされていないはずです。これでデータベースをチェックできるはずです (データベース ユーザーが削除されているため)。必要なロールを選択できます。これが機能しない場合は、データベース ユーザーと一緒にログインも削除して、すべてをクリアすることもできます。ユーザーを最後にもう一度チェックするには、次の SQL を実行します。

use database_name
exec sp_change_users_login 'Report'

これにより、孤立したユーザーが表示されます。これは、ユーザーにまだ問題があることを意味している可能性があります。これは通常、次の方法で修正できます。

use database_name
exec sp_change_users_login 'Auto_Fix', 'username'

これ以上長くなる前にこれを終わらせるために、このユーザーの接続問題の原因は何か他のものがある可能性があります。これらすべてが機能しない場合は、ログイン時に表示されるエラー メッセージを投稿していただけますか?

関連情報