Apa arti RED X pada pengguna basis data?

14

masukkan deskripsi gambar di sini

Saya membuat dua grup AD baru dan menambahkan mereka sebagai pengguna database tetapi mereka menunjukkan dengan X MERAH. Apa artinya ini? Terima kasih.

Michael Kirkpatrick
sumber

Jawaban:

20

Itu tidak berarti pengguna dinonaktifkan (Anda hanya dapat menonaktifkan login ), itu berarti pengguna tidak memiliki hak koneksi ke database. Saya tidak yakin persis bagaimana pengguna Anda dibuat, tetapi cara termudah untuk menunjukkan ini adalah:

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!

(Anda mungkin perlu menyegarkan Object Explorer di antara GOperintah karena, well, caching.)

Untuk memperbaikinya (dengan asumsi Anda benar-benar ingin mereka dapat terhubung ke database):

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

Tentunya Anda harus menerapkan lebih banyak izin tergantung pada apa yang Anda butuhkan untuk dapat dilakukan dalam database.

Mungkin ada cara lain yang lebih tidak jelas untuk masuk ke kondisi ini (misalnya menambahkan grup domain ke peran dalam database tanpa benar-benar menambahkan pengguna, seperti yang dijelaskan dalam jawaban MichaelK ). Meskipun saya akan jujur, ketika saya mencoba melakukan apa yang OP lakukan, dengan cara lama atau cara yang benar, saya tidak dapat menambahkan grup domain ke peran tanpa kehadiran pengguna:

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

Msg 15410, Level 11, Status 1, Prosedur sp_addrolemember
Pengguna atau peran '[CAKE \ MyGroup]' tidak ada dalam database ini.

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

Msg 15151, Level 16, Negara 1
Tidak dapat menambahkan kepala sekolah 'CAKE \ MyGroup', karena tidak ada atau Anda tidak memiliki izin.

Tentu saja dengan hasil ini, saya tidak melihat pengguna seperti itu di sysusers(usang; berhenti menggunakannya) atau sys.database_principals. Namun, jika saya melakukan ini (berkat jawaban sepupik ):

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

Kemudian pengguna muncul dalam pandangan itu dan muncul sebagai pengguna di Object Explorer dengan x merah karena HAS_DBACCESS() = 0. Yang jumlahnya kira-kira sama: "tidak dapat mengakses database." Jadi jika hal di atas GRANT CONNECTtidak bekerja (dalam kasus saya, itu memang menghilangkan x merah, tapi saya tidak mencoba untuk benar-benar query database sebagai akun itu), juga coba yang berikut, mengetahui bahwa itu mungkin gagal:

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

Dalam kasus saya, ketika saya memberikan koneksi ke pengguna ini, itu mencegah saya menjalankan CREATE USERperintah:

Msg 15023, Level 16, Status 1,
Pengguna Line 16 , grup, atau peran 'CAKE \ MyGroup' sudah ada di database saat ini.

Keadaan ini akan selalu berlaku untuk guest/ INFORMATION_SCHEMA/ sys- dengan pengecualian akun tamu pada basis data sistem tertentu. Abaikan itu dan tinggalkan mereka sendiri.


Dari yang sp_addrolemembertopik :

masukkan deskripsi gambar di sini

Dari yang sys.sysuserstopik :

masukkan deskripsi gambar di sini

Aaron Bertrand
sumber
Ini memperbaikinya untuk saya. Tetapi harus ada beberapa masalah mendasar lainnya - pengguna saya dibuat melalui skrip dan memiliki akses ke banyak basis data. Hanya satu pengguna pada satu DB yang membutuhkan izin "HUBUNGI" eksplisit untuk diberikan.
Morvael
5

Saya hanya ingin menambahkan jawaban Aaron Bertrand untuk yang ini:

Ini berarti pengguna tidak memiliki hak koneksi ke database (Anda tidak dapat menonaktifkan pengguna, hanya login). Saya tidak yakin persis bagaimana pengguna Anda dibuat ...

Ini dapat terjadi dengan Windowskepala sekolah hanya dengan cara berikut:

Windowslogin ada di tingkat server tetapi tidak dipetakan ke database yang dimaksud, seseorang memutuskan untuk grant/ denybeberapa izin untuk prinsipal Windows ini di tingkat database. Dalam hal ini pengguna / skema yang sesuai akan dibuat dalam database dan baris dengan ini grant/ denyakan dituliskan ke sys.database_permissions. Ini tidak akan memberikan akses apa pun ke database ini karena pengguna yang baru dibuat masih melewatkan connectizin, dan Anda akan melihatnya di OE dengan panah merah.

sepupik
sumber
Terima kasih, tetapi kita berbicara tentang MERAH 'x', bukan panah.
Michael Kirkpatrick
Ini masalah visualisasi Studio, tetapi hal yang sama
sepupic
0

Saya pikir saya tahu mengapa itu terjadi.

Skenario:

Domain \ BI360Users adalah grup AD

Domain \ BI360Pengguna ditambahkan sebagai login ke server (memiliki izin koneksi)

Domain \ BI360Pengguna TIDAK ada sebagai pengguna basis data

Saya melakukan hal berikut:

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

Berhasil selesai.

Segarkan: RED 'x' muncul.

masukkan deskripsi gambar di sini

Pengguna TIDAK dipetakan ke database: masukkan deskripsi gambar di sini

Jika sekarang saya membuat pengguna:

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

RED 'x' hilang: masukkan deskripsi gambar di sini

Jadi, tampaknya tidak ada pengguna meskipun layar menunjukkan dengan jelas di atas.

Ini adalah info dari sysusers: masukkan deskripsi gambar di sini

Michael Kirkpatrick
sumber
Inilah yang saya bicarakan, tetapi Anda salah berpikir bahwa "Pengguna TIDAK dipetakan ke database" setelah Anda berhasil menambahkan grup Win ke peran basis data. Pada saat yang sama, pengguna yang sesuai dan skema dibuat.
sepupik
1
Anda harus melakukan sesuatu selain menambahkan grup domain ke peran basis data, karena itu tidak berfungsi (kecuali jika Anda menggunakan SQL Server versi kuno). Dan bahkan dalam skenario ini GRANT CONNECT, seperti yang disarankan oleh jawaban awal saya, seharusnya sudah menyelesaikan masalah.
Aaron Bertrand
0

Saya memiliki masalah yang sama. Saya memperbaikinya dengan mengubah status 'Login' menjadi 'Diaktifkan' di bagian Status properti pengguna di 'Keamanan / Loginpeksi database SQL server saya masukkan deskripsi gambar di sini

tanda merah hilang setelah mengubah status ini.

Manouchehr Chalabi
sumber
-3

Red X berarti login dinonaktifkan dengan SQL Server

Goforebroke
sumber
Terima kasih. Tetapi mereka diaktifkan.
Michael Kirkpatrick
Pengguna tidak dapat dinonaktifkan.
Aaron Bertrand
Apakah akun ada di folder Login di tingkat instance? jika menjalankan perintah "Buat Pengguna [YourLogin] untuk Masuk [YourLogin]" dengan database yang bersangkutan. Red X seharusnya menghilang.
Goforebroke