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.
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:
Đ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 GO
cá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 CONNECT
khô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 USER
lệ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ô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 Windows
hiệ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
/ deny
mộ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
/ deny
nà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ỡ connect
quyền và bạn sẽ thấy nó trong OE bằng mũi tên màu đỏ.
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.
Người dùng KHÔNG được ánh xạ tới cơ sở dữ liệu:
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
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.
GRANT CONNECT
, như câu trả lời ban đầu của tôi đã đề xuất, nên đã giải quyết vấn đề.
Red X có nghĩa là thông tin đăng nhập bị vô hiệu hóa trong SQL Server