データベースユーザーのRED Xとはどういう意味ですか?


回答:


20

ユーザーが無効になっているわけではなく(ログインのみ無効にできます)、ユーザーがデータベースに接続する権限を持っていないことを意味します。ユーザーがどのように作成されたか正確にはわかりませんが、これを示す最も簡単な方法は次のとおりです。

CREATE LOGIN u1 WITH PASSWORD = 'x', CHECK_POLICY = OFF;
GO
USE tempdb;
GO
CREATE USER u1 FROM LOGIN u1;
GO
ALTER LOGIN u1 DISABLE;
GO
-- u1 has no red x even though the login has been disabled

CREATE USER u2 WITHOUT LOGIN;
GO
-- check Object Explorer, u2 has no red x

DENY CONNECT TO u2;
GO
-- check Object Explorer, u2 now has a red x!

CREATE USER u3 WITHOUT LOGIN;
GO
-- check Object Explorer, u3 has no red x

REVOKE CONNECT FROM u3;
GO
-- check Object Explorer, u3 now has a red x!

GOコマンド間のオブジェクトエクスプローラーの更新が必要になる場合があります。これは、キャッシングだからです。)

修正するには(実際にデータベースに接続できるようにしたい場合):

GRANT CONNECT TO [DomainName\BI360Consultants];
GRANT CONNECT TO [DomainName\BI360Users];

データベースでできるようにするために必要なものに応じて、より多くのアクセス許可を適用する必要があります。

この状態になる他の、よりあいまいな方法があるかもしれません(たとえば、MichaelKの回答で説明されているように、実際にユーザーを追加せずにデータベースのロールにドメイングループを追加する)。正直に言って、OPがやったこと、昔ながらの方法、または正しい方法でやろうとしたときに、ユーザープレゼンスなしでドメイングループをロールに追加することはできませんでした。

-- the old way
EXEC sys.sp_addrolemember N'db_datareader', N'[CAKE\MyGroup]';

メッセージ15410、レベル11、状態1、プロシージャsp_addrolemember
ユーザーまたはロール '[CAKE \ MyGroup]'はこのデータベースに存在しません。

-- the right way
ALTER ROLE db_datareader ADD MEMBER [CAKE\MyGroup];

メッセージ15151、レベル16、状態1
プリンシパル 'CAKE \ MyGroup'を追加できません。存在しないか、権限がないためです。

もちろん、この結果ではsysusers(非推奨;使用をやめる)またはにそのようなユーザーはいませんでしたsys.database_principals。しかし、私がこれをした場合(sepupicの答えのおかげで):

GRANT SELECT ON dbo.SomeTable TO [CAKE\MyGroup];

その後、ユーザーはそれらのビューに表示され、オブジェクトエクスプローラーに赤いxが付いたユーザーとして表示されましたHAS_DBACCESS() = 0。それでも、ほぼ同じことです:「データベースにアクセスできません」。したがって、上記GRANT CONNECTが機能しない場合(私の場合は、赤いxを削除しましたが、実際にそのアカウントとしてデータベースを照会しようとしませんでした)、失敗する可能性があることを知って、次も試してください:

CREATE USER [DOMAIN\Group] FROM LOGIN [DOMAIN\Group];

私の場合、このユーザーへの接続を許可すると、CREATE USERコマンドを実行できなくなりました。

メッセージ15023、レベル16、状態1、行16
ユーザー、グループ、またはロール 'CAKE \ MyGroup'は、現在のデータベースに既に存在します。

この状態は、特定のシステムデータベースのゲストアカウントを除き、guest/ INFORMATION_SCHEMA/ に対して常に真になりsysます。それを無視して、そのままにしておきます。


以下からのトピックsp_addrolemember

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

以下からのトピックsys.sysusers

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


これは私のためにそれを修正しました。しかし、他の根本的な問題がいくつかあるに違いありません。ユーザーはスクリプトを介して作成され、複数のデータベースにアクセスできます。1つのDB上の1人のユーザーのみに、明示的な「CONNECT」権限を付与する必要がありました。
モルバエル

5

私はこれを守るアーロン・バートランドの答えに追加したいだけです:

これは、ユーザーがデータベースへの接続特権を持っていないことを意味します(ユーザーを無効にすることはできず、ログインのみが可能です)。ユーザーがどのよう に作成されたのか正確にはわかりません ...

これは、Windowsプリンシパルで次の方法でのみ発生します。

Windowsログインがサーバーレベルで存在するが、問題のデータベースにマップされていない、誰かがすることを決定grant/ denyデータベースレベルでこのWindowsプリンシパルにいくつかの権限。この場合、対応するユーザー/スキーマがデータベースに作成され、このgrant/ denyを持つ行がに書き込まれsys.database_permissionsます。新しく作成されたユーザーはまだconnect許可を逃しているため、これはこのデータベースへのアクセスを許可しません。OEでは赤い矢印で表示されます。


ありがとう、しかし、私たちは矢印ではなく赤い「x」について話している。
マイケルカークパトリック

これはスタジオの視覚化の問題ですが、同じことです
分離した

0

私はそれが起こった理由を理解したと思う。

シナリオ:

Domain \ BI360UsersはADグループです

Domain \ BI360Usersがサーバーへのログインとして追加されます(接続許可があります)

Domain \ BI360Usersはデータベースのユーザーとして存在しません

私は次のことを行います:

USE TEMPDB
GO
EXEC sp_addrolemember N'db_datareader', N'Doamin\BI360users'
GO

正常に完了します。

更新:赤の「x」が表示されます。

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

ユーザーはデータベースにマップされていません。 ここに画像の説明を入力してください

ユーザーを作成した場合:

USE TempDB
GO
CREATE USER [Domain\BI360Users] FOR LOGIN [DOMAIN\BI360Users]
GO

赤の「x」は消えます: ここに画像の説明を入力してください

そのため、画面上にはっきりと表示されていても、ユーザーはいないようです。

sysusersからの情報は次のとおりです。 ここに画像の説明を入力してください


これは私が話していたことですが、Winグループをデータベースロールに正常に追加した後、「ユーザーはデータベースにマップされていません」と考えるのは間違っています。この同じ瞬間に対応するユーザーとスキーマが作成されます。
sepupic

1
ドメイングループをデータベースロールに追加する以外のことを行う必要があります。これは機能しないためです(SQL Serverの古いバージョンを使用している場合を除く)。また、このシナリオGRANT CONNECTでも、私の最初の答えが示唆したように、問題を解決したはずです。
アーロンバートランド

0

同じ問題がありました。SQLサーバーデータベースの[セキュリティ/ログイン]セクションのユーザープロパティの[ステータス]セクションで[ログイン]ステータスを[有効]に変更することで修正しました。 ここに画像の説明を入力してください

このステータスを変更すると、赤いマークが消えました。


-3

赤いXは、SQL Serverでログインが無効になっていることを意味します


ありがとう。しかし、それらは有効になっています。
マイケルカークパトリック

ユーザーを無効にすることはできません。
アーロンバートランド

アカウントはインスタンスレベルでLoginsフォルダーに存在しますか?問題のデータベースで「ログイン[YourLogin]のユーザー[YourLogin]を作成」コマンドを実行する場合。赤いXが消えます。
ゴーフォーブレイク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.