Đăng nhập xác thực Windows có thể bị vô hiệu hóa trên SQL Server 2008 (hoặc R2) không?


8

Vì vậy, chúng tôi có thể thực hiện Đăng nhập Windows hoặc Chế độ hỗn hợp, nhưng chúng tôi có thể định cấu hình Máy chủ SQL để chỉ sử dụng thông tin đăng nhập nội bộ và chặn tất cả Đăng nhập Windows không?

Là giải pháp duy nhất để thêm tất cả các thông tin đăng nhập Windows tiềm năng và đặt chúng thành các đặc quyền bị hạn chế làm thủ tục phòng ngừa (hoặc phản ứng)?

Câu trả lời:


5

Nó không thể bị vô hiệu hóa hoàn toàn, vì hai lý do:

  • Về cài đặt, đăng nhập được cấp quyền cho NT AUTHORITY\SYSTEM, NT SERVICE\SQLSERVERAGENT(hoặc một nhóm có chứa các tài khoản dịch vụ SQL Agent), và NT SERVICE\MSSQLSERVER(hoặc một nhóm có chứa các tài khoản dịch vụ cơ sở dữ liệu SQL). Đây là những thông tin sysadminđăng nhập -level cần có sẵn để SQL Server hoạt động chính xác.

    Mặc dù một thử nghiệm nhanh cho thấy rằng việc xóa cả ba thông tin đăng nhập đó chỉ ngăn SQL Agent khởi động lại (công cụ cơ sở dữ liệu hoạt động tốt), tôi chắc chắn có các chức năng khác dựa trên hai thông tin đăng nhập khác ... chúng được tạo theo mặc định vì một lý do, vì vậy tôi sẽ không gây rối với họ. (FYI nếu bạn tự kiểm tra điều này: tùy chọn Drop & Tạo kịch bản để đăng nhập trong SSMS không phải là thành viên vai trò máy chủ kịch bản.)

  • Trong chế độ một người dùng, quản trị viên cục bộ sẽ tự động được sysadmincấp đặc quyền -level bất kể có đăng nhập được tạo hay không "chứa" những người dùng đó. Đây là một móc áo cho khi bạn khóa chìa khóa trong xe.

Như đã đề cập trong câu trả lời khác, chỉ những thông tin đăng nhập Windows được tạo rõ ràng mới có quyền truy cập để kết nối (nhận xét ban đầu của tôi không chính xác) - xóa tất cả thông tin đăng nhập Windows do người dùng tạo là đủ để ngăn chặn truy cập.

Nếu bạn cần đi một bước xa hơn và ngăn đăng nhập Windows được tạo , đây là điểm khởi đầu (Quản lý dựa trên chính sách, ít nhất là vào năm 2008, không hỗ trợ ngăn chặn điều này khi nó xảy ra):

CREATE TRIGGER trg_PreventWindowsLogins
    ON ALL SERVER
    AFTER CREATE_LOGIN
AS
BEGIN

    SET NOCOUNT ON;

    IF (EVENTDATA().exist('/EVENT_INSTANCE[1]/LoginType[1]/text()[1] eq "Windows (NT) Login"') = 1)
    BEGIN
        RAISERROR(N'Not allowed to create Windows logins!', 16, 1);
        ROLLBACK;
    END

END

Tất nhiên, bất cứ ai có đủ quyền đều có thể đánh bại điều này, nhưng đó là một vấn đề riêng biệt ...


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.