web-dev-qa-db-ja.com

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

enter image description here

2つの新しいADグループを作成し、それらをデータベースのユーザーとして追加しましたが、RED Xで表示されます。これはどういう意味ですか?ありがとう。

16

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

_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];
_

次に、ユーザーはこれらのビューに表示され、HAS_DBACCESS() = 0が原因で、赤いxが付いたオブジェクトエクスプローラーにユーザーとして表示されました。それでも、ほぼ同じことになります。「データベースにアクセスできません」。したがって、上記の_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_トピック

enter image description here

から_sys.sysusers_トピック

enter image description here

21
Aaron Bertrand

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

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

これは、Windowsプリンシパルで次の方法でのみ発生する可能性があります。

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

5
sepupic

それがなぜ起こったのか私は理解したと思います。

シナリオ:

Domain\BI360UsersはADグループです

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

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

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

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

正常に完了します。

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

enter image description here

ユーザーはデータベースにマップされていません: enter image description here

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

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

RED 'x'はなくなります: enter image description here

そのため、スクリーンショーで上にはっきりと示されていても、ユーザーはいないようです。

これはsysusersからの情報です: enter image description here

0

私も同じ問題を抱えていました。 SQLサーバーデータベースの[セキュリティ/ログイン]セクションにあるユーザープロパティの[ステータス]セクションで、[ログイン]ステータスを[有効]に変更して修正しました enter image description here

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

0