Cách làm mới nhóm bảo mật AD trên quyền của Sql Server


12

Tôi đang sử dụng Sql Server 2008 trên Máy chủ doanh nghiệp nhỏ 2003; khách hàng đang sử dụng WinXP.

Tôi đã thêm một người dùng vào Nhóm bảo mật Active Directory của tôi; Tại sao người dùng này không thể truy cập ngay vào cơ sở dữ liệu? Có vẻ như có một độ trễ trước khi người dùng được nhận ra trong Sql Server.

Tôi đang sử dụng AD Security Groups cho các quyền một cách rõ ràng để tôi không cần thêm người dùng cá nhân vào Sql Server. Vì vậy, hiệu quả là tôi không cần phải làm gì ngoài việc thêm người dùng vào Nhóm bảo mật AD để cấp quyền truy cập.

Nhưng vì một số lý do, Sql Server không nhận ra ngay sự bổ sung. Tôi đã thấy điều này một số lần. Tôi thêm người dùng vào nhóm nhưng người dùng đó không thể truy cập dữ liệu cho đến ngày hôm sau. Có vẻ như nó không truy vấn Active Directory trong thời gian thực. Bạn có thể xác nhận đó là như vậy?

Tôi cần làm gì để Sql Server "làm mới" danh sách người dùng từ Active Directory?


Trong SQL Server 2008 Management Studio, tôi đã thêm thông tin đăng nhập máy chủ bằng Nhóm bảo mật và trên cơ sở dữ liệu đã tạo một người dùng được ánh xạ tới thông tin đăng nhập đó. Điều đó làm việc tuyệt vời!
D_Bester

Tuy nhiên, sau khi tôi thêm người dùng mới vào Nhóm bảo mật, nó không thể truy cập cơ sở dữ liệu được chỉ định. Người dùng đó có quyền truy cập vào máy chủ bằng cách sử dụng một nhóm khác, vì vậy chỉ cần kiểm tra kết nối với Sql Server hoạt động tốt. Tôi đã thêm một kết nối đến Sql Server cho người dùng (trên máy tính của cô ấy). Khi tôi chỉ định cơ sở dữ liệu tôi muốn nó nói rằng cơ sở dữ liệu không có sẵn.
D_Bester

Kiểm tra tại chỗ các bộ điều khiển miền khác nhau Tôi thấy rằng việc sao chép thực sự đã kết thúc sau 15 phút, nhưng SQL bỏ qua người dùng mới vào nhóm AD. Khởi động lại máy chủ SQL giải quyết vấn đề, vì vậy phải chờ 24 giờ. Phải là một cách tốt hơn.
Aaron Auseth

Câu trả lời:


12

Người dùng cần phải đăng xuất khỏi máy trạm của họ và đăng nhập lại. Đó là lý do tại sao những thay đổi dường như có hiệu lực vào ngày hôm sau. Lý do cho điều này là khi người dùng đăng nhập vào ngày hôm sau, họ nhận được mã thông báo mới từ bộ điều khiển miền và mã thông báo này chứa danh sách các nhóm miền mà họ là thành viên. Mã thông báo này với danh sách các nhóm miền chỉ được cập nhật khi người dùng đăng nhập vào máy tính của họ, vì vậy nếu người dùng không bao giờ đăng xuất thì mã thông báo sẽ không được cập nhật.

Ngoài ra còn có sự chậm trễ sao chép tên miền nhiều trang web cần được tính đến nếu bộ điều khiển miền của bạn ở các vị trí thực tế khác nhau.


1
Có một lệnh hoặc tập lệnh nào mà người ta có thể chạy trên máy trạm để "làm mới" mã thông báo AD của nó để nó có thể "biết" người dùng hiện là thành viên của nhóm miền mới và do đó tránh được sự chậm trễ? --Update: dường như một người được đề xuất klist purgetại dba.stackexchange.com/a/44922/29371 , nhưng với lời cảnh báo rằng nó có thể phá vỡ các bộ truy cập tài nguyên được lưu trong bộ nhớ cache khác mà người dùng sẽ phải thiết lập lại / kết nối lại.
NateJ

@mrdenny Bạn có đề xuất nào về cách xử lý việc này cho tài khoản dịch vụ không? Chúng tôi chạy tất cả các phiên bản SQL trong tài khoản dịch vụ và sử dụng các tài khoản dịch vụ này cho các kết nối giữa Máy chủ SQL và SSRS, v.v. Tại bất kỳ thời điểm nào, chúng tôi có nhiều kết nối giữa các máy. Chúng tôi thực sự không thể ngắt kết nối tất cả các kết nối và đăng nhập mới ở đâu đó để có được thông tin nhóm AD mới.
Một số

Đối với tài khoản dịch vụ, tất cả những gì bạn có thể làm là khởi động lại dịch vụ trên máy cần các quyền mới.
mrdenny

5

Khi người dùng đăng nhập, họ được chỉ định mã thông báo bảo mật bao gồm tất cả thông tin về tư cách thành viên nhóm của họ.

Mã thông báo này vẫn tồn tại cho đến khi người dùng đăng xuất - tại thời điểm đó nó bị loại bỏ - ngay cả khi bạn thay đổi thành viên nhóm trong AD trong thời gian trung bình. Những thay đổi bạn thực hiện sẽ chỉ có hiệu lực vào lần tiếp theo người dùng đăng nhập và nhận mã thông báo bảo mật mới.

Ví dụ, bạn có thể tái tạo kịch bản tương tự khi gán quyền trên hệ thống tệp; đó là hành vi AD, không phải hành vi SQL Server.


1

Vì vậy, bạn nhận được kết quả ngay lập tức sẽ nhận được thông tin đăng nhập mới mỗi lần bằng cách chạy cmd / script như:

runas /netonly /user:domain\username "sqlcmd -S serverName -d dbname -q \"insert into testpermissions values (65)\""

sử dụng cmd.exe (không phải powershell, tôi không thể trích dẫn chính xác).

Bằng cách đó, bạn sẽ nhận được mã thông báo mới mọi lúc (nhưng phải nhập pwd của bạn). Bạn có thể có thể làm một cái gì đó với một văn bản mật khẩu đã lưu, nếu mọi thứ quá nặng nề.

Dù sao, làm việc cho tôi và tôi hy vọng nó sẽ giúp người khác.

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.