RED X trên người dùng cơ sở dữ liệu có nghĩa là gì?


14

nhập mô tả hình ảnh ở đây

Tôi đã tạo hai nhóm AD mới và thêm chúng dưới dạng người dùng cơ sở dữ liệu nhưng chúng hiển thị với RED X. Điều này có nghĩa là gì? Cảm ơn.

Câu trả lời:


20

Điều đó không có nghĩa là người dùng bị vô hiệu hóa (bạn chỉ có thể vô hiệu hóa đăng nhập ), điều đó có nghĩa là người dùng không có đặc quyền kết nối với cơ sở dữ liệu. Tôi không chắc chắn chính xác cách người dùng của bạn được tạo, nhưng cách dễ nhất để chứng minh điều này là:

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!

(Bạn có thể cần làm mới Object Explorer giữa GOcác lệnh bởi vì, tốt, bộ đệm.)

Để sửa lỗi (giả sử bạn thực sự muốn chúng có thể kết nối với cơ sở dữ liệu):

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

Chắc chắn bạn sẽ cần phải áp dụng nhiều quyền hơn tùy thuộc vào những gì bạn cần chúng để có thể làm trong cơ sở dữ liệu.

Có thể có những cách khác, tối nghĩa hơn để vào trạng thái này (ví dụ: thêm một nhóm miền vào vai trò trong cơ sở dữ liệu mà không thực sự thêm người dùng, như được mô tả trong câu trả lời của MichaelK ). Mặc dù tôi sẽ thành thật, khi tôi cố gắng làm những gì OP đã làm, theo cách cũ hoặc đúng cách, tôi không thể thêm nhóm miền vào vai trò mà không có người dùng trình bày:

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

Msg 15410, Cấp 11, Trạng thái 1, Thủ tục sp_addrolemember
Người dùng hoặc vai trò '[CAKE \ Mygroup]' không tồn tại trong cơ sở dữ liệu này.

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

Msg 15151, Cấp 16, Trạng thái 1
Không thể thêm hiệu trưởng 'CAKE \ Mygroup', vì nó không tồn tại hoặc bạn không có quyền.

Tất nhiên với kết quả này, tôi không thấy bất kỳ người dùng nào như vậy sysusers(không dùng nữa) hoặc ngừng sử dụng nó) hoặc sys.database_principals. Tuy nhiên, nếu tôi đã làm điều này (nhờ câu trả lời của sepupic ):

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

Sau đó, người dùng đã hiển thị trong các chế độ xem đó và đã hiển thị dưới dạng người dùng trong Object Explorer với dấu x màu đỏ do HAS_DBACCESS() = 0. Điều vẫn tương đương với điều tương tự: "không thể truy cập cơ sở dữ liệu." Vì vậy, nếu cách trên GRANT CONNECTkhông hoạt động (trong trường hợp của tôi, điều đó đã loại bỏ dấu x màu đỏ, nhưng tôi đã không thực sự truy vấn cơ sở dữ liệu như tài khoản đó), cũng thử làm như sau, biết rằng nó có thể thất bại:

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

Trong trường hợp của tôi, khi tôi cấp kết nối cho người dùng này, nó đã ngăn tôi chạy CREATE USERlệnh:

Msg 15023, Cấp 16, Trạng thái 1, Dòng 16
Người dùng, nhóm hoặc vai trò 'CAKE \ Mygroup' đã tồn tại trong cơ sở dữ liệu hiện tại.

Trạng thái này sẽ luôn đúng với guest/ INFORMATION_SCHEMA/ sys- ngoại trừ tài khoản khách trên cơ sở dữ liệu hệ thống nhất định. Bỏ qua điều đó và để chúng một mình.


Từ các sp_addrolememberchủ đề :

nhập mô tả hình ảnh ở đây

Từ các sys.sysuserschủ đề :

nhập mô tả hình ảnh ở đây


CÁi này đã sửa nó giúp tôi. Nhưng phải có một số vấn đề tiềm ẩn khác - người dùng của tôi được tạo thông qua các tập lệnh và có quyền truy cập vào nhiều cơ sở dữ liệu. Chỉ có một người dùng trên một DB cần được cấp quyền "CONNECT" rõ ràng.
Morvael

5

Tôi chỉ muốn thực hiện một bổ sung cho câu trả lời của Aaron Bertrand về điều này:

Điều đó có nghĩa là người dùng không có đặc quyền kết nối với cơ sở dữ liệu (bạn không thể vô hiệu hóa người dùng, chỉ đăng nhập). Tôi không chắc chắn chính xác cách người dùng của bạn được tạo ...

Điều này có thể xảy ra với Windowshiệu trưởng chỉ theo cách sau:

Windowsđăng nhập tồn tại ở cấp máy chủ nhưng không được ánh xạ tới cơ sở dữ liệu được đề cập, ai đó quyết định grant/ denymột số quyền cho hiệu trưởng Windows này ở cấp cơ sở dữ liệu. Trong trường hợp này, người dùng / lược đồ tương ứng sẽ được tạo trong cơ sở dữ liệu và hàng có grant/ denynày sẽ được ghi vào sys.database_permissions. Điều này sẽ không cung cấp bất kỳ quyền truy cập nào vào cơ sở dữ liệu này vì người dùng mới được tạo vẫn bỏ lỡ connectquyền và bạn sẽ thấy nó trong OE bằng mũi tên màu đỏ.


Cảm ơn, nhưng chúng ta đang nói về ĐỎ 'x', không phải là một mũi tên.
Michael Kirkpatrick

Đó là một vấn đề về trực quan hóa Studio, nhưng là một điều tương tự
sepupic

0

Tôi nghĩ rằng tôi đã tìm ra lý do tại sao nó xảy ra.

Kịch bản:

Tên miền \ BI360 Người dùng là một nhóm AD

Tên miền \ BI360Users được thêm dưới dạng đăng nhập vào máy chủ (nó có quyền kết nối)

Tên miền \ BI360 Người dùng KHÔNG tồn tại với tư cách là người dùng cơ sở dữ liệu

Tôi làm như sau:

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

Hoàn thành thành công.

Làm mới: RED 'x' xuất hiện.

nhập mô tả hình ảnh ở đây

Người dùng KHÔNG được ánh xạ tới cơ sở dữ liệu: nhập mô tả hình ảnh ở đây

Nếu bây giờ tôi tạo người dùng:

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

ĐỎ 'x' biến mất: nhập mô tả hình ảnh ở đây

Vì vậy, có vẻ như không có người dùng mặc dù màn hình hiển thị rõ ràng cho thấy nó ở trên.

Dưới đây là thông tin từ các sysusers: nhập mô tả hình ảnh ở đây


Đây là những gì tôi đã nói, nhưng bạn đã nghĩ sai rằng "Người dùng KHÔNG được ánh xạ tới cơ sở dữ liệu" sau khi bạn thêm thành công nhóm Win vào vai trò cơ sở dữ liệu.
nhiễm trùng

1
Bạn phải làm một cái gì đó ngoài việc thêm nhóm miền vào vai trò cơ sở dữ liệu, bởi vì điều đó không hoạt động (trừ khi bạn đang ở trên một số phiên bản SQL Server cổ). Và ngay cả trong kịch bản này GRANT CONNECT, như câu trả lời ban đầu của tôi đã đề xuất, nên đã giải quyết vấn đề.
Aaron Bertrand

0

Tôi đã từng gặp vấn đề tương tự. Tôi đã sửa nó bằng cách thay đổi trạng thái 'Đăng nhập' thành 'Đã bật' trong phần Trạng thái của thuộc tính người dùng trong 'Bảo mật / Đăng nhập của cơ sở dữ liệu máy chủ SQL của tôi nhập mô tả hình ảnh ở đây

dấu đỏ đã biến mất sau khi thay đổi trạng thái này.


-3

Red X có nghĩa là thông tin đăng nhập bị vô hiệu hóa trong SQL Server


Cảm ơn. Nhưng chúng được kích hoạt.
Michael Kirkpatrick

Người dùng không thể bị vô hiệu hóa.
Aaron Bertrand

Tài khoản có tồn tại trong thư mục Đăng nhập ở cấp thể hiện không? nếu nó chạy lệnh "Tạo người dùng [YourLogin] để đăng nhập [YourLogin]" trong cơ sở dữ liệu được đề cập. Red X sẽ biến mất.
Goforebroke
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.