孤立したユーザー「guest」を修正しますか?


8

特別なguestユーザーが孤立している(ログインにリンクされていない)場合、何ができますか?

私のデータベースの1つ(SQL Server 2005)では、次のコマンドを実行すると、ゲストユーザーが孤立したユーザーとしてリストされます。

exec sp_change_users_login 'report'

結果:

UserName    UserSID
guest       0x3C2E66759FFBC14F84127D6795C27FD3

その手順を使用してゲストユーザーを修正しようとすると、次のようになります。

exec sp_change_users_login 'update_one', 'guest', 'guest'

この手順を終了しています。'guest'は、この手順でのログイン名パラメーターの禁止値です。

ユーザーを削除しようとすると、次のようになります。

ユーザー「guest」は削除できません。無効にすることしかできません。

select * from sys.database_principals where name = 'guest'

結果:

name                 guest
principal_id         2
type                 S
type_desc            SQL_USER
default_schema_name  guest
create_date          11/13/98 2:58 AM
modify_date          10/16/01 4:31 PM
owning_principal_id  NULL
sid                  0x3C2E66759FFBC14F84127D6795C27FD3
is_fixed_role        0

これが特別なユーザーであるかどうかについて、データベースは混乱しているようです。何かできることはありますか?


そのSIDは次のようにリストされてい0x3C2E66759FFBC14F84127D6795C27FD3ます0x00
JustinStolle

まだ自動修正を試みましたか?結果を知りたいです。
SQLRockstar

私が得るTerminating this procedure. 'guest' is a forbidden value for the login name parameter in this procedure.
JustinStolle

ユーザー名としてゲストを持つことができないため、このエラーが発生します(msdn.microsoft.com/en-us/library/ms174378.aspx)。私はあなたのシナリオを再現するのに苦労しています。
トーマス・ストリンガー

1
Justinとまったく同じ問題が発生したことを付け加えておきます。ここでの問題は、guestのsidが0x00である必要があることですが、何らかの理由でそうではなく、そのため、sp_change_users_login 'report'は孤立したユーザーとしてピックアップします。DBAが[ゲスト] SIDを通常の方法で変更または混乱させる方法があることはわかりません。したがって、この混乱は、SQLサーバーのパッチによって作成された可能性が高いと思います。
jyao 2018年

回答:


5

ユーザー「guest」がサーバーログインに割り当てられることはありません。フレッシュインストールでも、ログインのないSQLユーザーとして分類されます。(作成時に)ログインのSIDのみを設定でき、ユーザーは設定できないため、これは可能だとは思いません。sp_change_users_loginは、guestアカウントをサーバーログインにマップしてはならないため、正確に機能しません。その結果、ユーザー「guest」は常に孤立したユーザーになります。おそらくあなたが望んでいた答えではないでしょう:)


ゲストユーザーを復元から除外しながら、このデータベースを別の場所にバックアップ/復元する方法はあると思いますか?
JustinStolle 2012

はい、それはきれいではありません。ゲストユーザーが含まれるため、単純なバックアップと復元は機能しません。最初にデータベースをインストールしたときと同じ方法で作成された新しいデータベースから開始する必要があります(モデル内のゲストに正しいSIDがあると仮定します)。次に、既存のシステムからすべてのデータを新しいデータベースにエクスポートします。これは機能しますが、マイナーなものには多大な労力を
World Wide DBA

したがって、アカウントに予期しないSIDがあるにもかかわらず、実際には問題はなく、sp_change_users_loginレポートで無視しても安全だと思いますか?
JustinStolle 2012

この例では、とにかくそれについて実際にできることはそれほど多くないという事実に基づいて、そう言います。それから、とにかくそれを使うべきか、すべきでないかについての古典的な議論がありますが、それはまったく別の問題です... :)
World Wide DBA '20

2

私の考え... sp_change_users_loginそのエラーをスローする理由は、MSもそれを書いたためです。[ときどきシステムプロシージャコードを調べるのは楽しいかもしれません。:)]しかし、レポートの実行時に表示されるという事実は、誰かまたは一部のプロセスがアカウントをめちゃくちゃにしたこと、またはMSからのホットフィックスがそれを実行した可能性があることを示しています(あなたは決して知りません)。

ゲストアカウントはそこにあると想定されており、アカウントはデフォルトでモデルに存在するため、作成されるすべてのデータベースに存在します。レポートに表示されないようにするには、SIDを変更する必要がある0x00と思います。アカウントが無効になっている限り、それをそのままにして無視します。それが本当に私を悩ませていたなら、私はお金を払い、マイクロソフトのサポートに電話をかけましたが。


つまり、guestこの場合の結果に表示されるのは問題ではないということです。
JustinStolle 2012

かなり、はい。

1

注:データベースをあるサーバーから別のサーバーに移動すると、通常、孤立したユーザーの問題が発生します。FileListOnlyは、SQLサーバーの新しい用語で、作成されたバックアップの詳細にアクセスできます。

従わなければならない一連のタスクがあります

  1. まず、作成したバックアップから宛先または新しいサーバーにFileListOnlyを復元する必要があります。
  2. バックアップを復元します。
  3. 必要に応じて、sp_change_users_loginを使用します。この手順に関するヘルプについては、http://msdn.microsoft.com/en-us/library/ms174378.aspxを参照して ください

ここに例を示します。

> RESTORE FILELISTONLY FROM DISK = N'C:\YourDB.bak'
> 
> RESTORE DATABASE YourDb FROM DISK = N'C:\YourDB.bak' WITH MOVE
> N'YourDB' TO N'D:\YourDB.mdf', MOVE N'YourDB_log' TO N'D:\YourDB.ldf',
> REPLACE
> 
> exec YourDB.dbo.sp_change_users_login 'update_one', 'UserName','UserName'

これはguestユーザーには機能しません。ブラウンストーン氏による上記の回答を参照してください。
Simon Righarts 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.