Làm cách nào để tôi gán toàn bộ quyền truy cập bảo mật nhóm Active Directory trong SQL Server 2008?


40

Tôi muốn sử dụng bảo mật tích hợp với ứng dụng nội bộ của mình, tất cả nằm trên một miền. Thật không may, tôi chưa bao giờ có thể làm cho điều này hoạt động tốt. Tôi muốn gán toàn bộ Nhóm Exchange (Active Directory) một vai trò trong SQL Server để truy cập đọc / ghi vào các bảng nhất định. Bằng cách đó, tôi sẽ không phải tạo một nhà điều hành bất cứ khi nào ai đó được thuê hoặc xóa một nhà điều hành bất cứ khi nào ai đó bị sa thải. Điều này có thể không? Những bước tôi sẽ làm để làm điều này?

Câu trả lời:


48
  • Đặt nhóm AD làm thông tin đăng nhập. Và "đăng nhập" có nghĩa là đăng nhập cấp máy chủ không phải là khái niệm AD của người dùng / đăng nhập. Trong SQL Server, đây là hiệu trưởng cấp máy chủ
  • Tạo người dùng được ánh xạ. Bạn không thực sự cho phép người dùng trực tiếp trên bàn. Và "người dùng" có nghĩa là người dùng cơ sở dữ liệu không phải là khái niệm AD của người dùng: trong SQL Server, đây là "hiệu trưởng cấp cơ sở dữ liệu"
  • Thêm người dùng vào vai trò (cũng là "hiệu trưởng cấp cơ sở dữ liệu")
  • Quyền GRANT cho các vai trò trên các bảng (bảng hoặc Proc, v.v. là "bảo mật")

Kịch bản mẫu

USE master;
GO
CREATE LOGIN [MYDOMAIN\APPLICATION SUPPORT] FROM WINDOWS;
GO
USE mydb;
GO
CREATE USER [MYDOMAIN\APPLICATION SUPPORT] FROM LOGIN [MYDOMAIN\APPLICATION SUPPORT];
GO
CREATE ROLE rSupport;
GO
EXEC sp_addrolemember 'rSupport', 'MYDOMAIN\APPLICATION SUPPORT';
GO
GRANT SELECT, INSERT,UPDATE, etc ON Mytable TO rSupport;
GO

sp_addrolememberkhông được dùng nữa bắt đầu với SQL Server 2012, nơi ALTER ROLEnên được sử dụng thay thế.


3
Sẽ hữu ích để giải thích lý do tại sao bạn nên gán quyền cho vai trò thay vì người dùng SQL (trong trường hợp này là các nhóm AD).
vẽ Chapin

Có lẽ bạn có nghĩa là "tạo người dùng [...] để đăng nhập [...]", thay vì "từ đăng nhập"?
Agostino

TẠO NGƯỜI DÙNG ... ĐỂ ĐĂNG NHẬP ...; và TẠO NGƯỜI DÙNG ... TỪ ĐĂNG NHẬP ...; cả hai đều làm việc cho tôi (MSSQL2016). Không chắc chắn nếu có một sự khác biệt?
Kỹ sư đảo ngược


4

Việc cấp quyền trong SQL Server cho Nhóm AD tương đối đơn giản. Nó có thể được thực hiện thông qua T-SQL hoặc Management Studio.

Ví dụ: nếu bạn có một nhóm AD được gọi MYDOMAIN\APPLICATION SUPPORT, bạn sẽ tạo thông tin đăng nhập ở cấp máy chủ, sau đó sử dụng ánh xạ tới các cơ sở dữ liệu riêng lẻ để cung cấp các quyền chi tiết hơn một chút như trình đọc dữ liệu.

Lý tưởng nhất, tất cả các quyền truy cập ứng dụng phải thông qua các thủ tục được lưu trữ *, vì vậy chỉ thực thi các quyền đối với các thủ tục được lưu trữ trong cơ sở dữ liệu đó là bắt buộc.

* Từ quan điểm bảo mật, để cho phép một người dùng cụ thể xem một số dữ liệu cụ thể, bạn có thể tạo một quy trình và cấp cho người dùng quyền thực thi quy trình đó, và không có gì khác. Cho phép người dùng truy vấn trực tiếp có nghĩa là cho phép chọn trên tất cả các bảng có liên quan. Nó cũng dễ dàng hơn để làm việc với các thủ tục và dễ dàng gỡ lỗi hơn.

Thủ tục lưu trữ truy cập bảng trừu tượng đi và giới hạn truy cập. Đối với các loại DBA, nó giống như "cho tôi xem tất cả các biến thể hiện của bạn: Tôi không muốn sử dụng các phương thức, getters hoặc setters".


3

Từ marc_s trả lời "Cách thêm nhóm người dùng Active Directory làm đăng nhập trong SQL Server" :

Trong SQL Server Management Studio, đi tới Object Explorer > (your server) > Security > Loginsvà nhấp chuột phải New Login:

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

Sau đó, trong hộp thoại bật lên, chọn các loại đối tượng bạn muốn xem ( Groupsbị tắt theo mặc định - kiểm tra nó!) Và chọn vị trí bạn muốn tìm đối tượng của mình (ví dụ: sử dụng Entire Directory) và sau đó tìm nhóm AD của bạn .

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

Bây giờ bạn có Đăng nhập máy chủ SQL thông thường - giống như khi bạn tạo một tài khoản cho một người dùng AD. Cung cấp cho đăng nhập mới các quyền trên cơ sở dữ liệu cần thiết, và bạn đi!

Bất kỳ thành viên nào của nhóm AD đó giờ cũng có thể đăng nhập vào SQL Server và sử dụng cơ sở dữ liệu của bạn.


2
Liên kết đến câu trả lời SO đó có thể hữu ích nhưng bạn không thêm bất cứ điều gì mới vào bài viết, phải không? Bạn có thể vừa đăng liên kết dưới dạng một bình luận.
Andriy M

2
Câu trả lời có một ảnh chụp màn hình đẹp để kiểm tra các nhóm trong Loại đối tượng, vì đó là những gì tôi đã thiếu khi tôi đang cố gắng làm điều này. Theo tôi, một liên kết không hiển thị nó theo cách hữu ích. Chỉ cần cố gắng giúp đỡ người tiếp theo ...
Ngay cả Miên

Ý anh là gì? Thông thường có một liên kết ở đó để theo dõi nó và mọi người theo liên kết sẽ thấy ảnh chụp màn hình đẹp mà bạn đang nói, cũng như mọi thứ khác mà bạn đã đăng lại ở đây. Tuy nhiên, sẽ không tranh luận, chỉ cho bạn biết rằng ý kiến ​​của tôi là không thay đổi: một liên kết (trong một bình luận) cũng sẽ làm như vậy.
Andriy M

4
Ý kiến ​​của tôi cũng không thay đổi. Một liên kết trong một bình luận không truyền tải thông tin giống như một hình ảnh thực tế trên một trang web. "Hiển thị, đừng nói."
Ngay cả Miên

1

Nếu người dùng là thành viên của DOMAIN \ Securitygroup có quyền Sysadmin trong SQL, thì điều đó sẽ được sử dụng khi truy cập cơ sở dữ liệu. Mặt khác, bạn cần xem DOMAIN \ Securitygroup (s) có quyền hạn nào trong mỗi cơ sở dữ liệu. Nếu người dùng là thành viên của 2 Nhóm bảo mật, với SecgroupA có quyền chọn và SecgroupB có quyền chèn, thì người dùng có thể chọn và chèn.

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.