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 sysadmin
cấ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 ...