Những gì bạn làm sẽ phụ thuộc vào phiên bản SQL Server của bạn, cũng như liệu bạn có đủ khả năng để gỡ bỏ dịch vụ SQL Server để thiết lập thông tin đăng nhập mới hay không. Hai phương thức đầu tiên ở đây không yêu cầu khởi động lại thể hiện:
Đối với phiên bản SQL Server 2005, 2008 và 2008 R2
Bạn có thể kết nối bằng NT AUTHORITY\SYSTEM
tài khoản (hoặc các phương thức backlink khác). Có một số chi tiết trong một số câu trả lời ở đây:
Tôi cũng có một mẹo về MSSQLTips.com giải quyết vấn đề này:
Về cơ bản, bạn tải xuống PSExec từ Microsoft, sau đó sử dụng nó để khởi chạy Management Studio sau khi bạn đã cài đặt:
PsExec -s -i "C:\...\Ssms.exe"
Điều này sẽ kết nối với NT AUTHORITY\SYSTEM
và sẽ cho phép bạn thực hiện mọi thứ trong Object Explorer, như:
Thay đổi phiên bản sang chế độ SQL Server và Windows xác thực - nhấp chuột phải vào tên Máy chủ, nhấn thuộc tính và thay đổi nút radio nếu hiện tại nó chỉ được đặt thành Windows:
Đặt mật khẩu cho sa
tài khoản - mở rộng Bảo mật, mở rộng Đăng nhập, nhấp chuột phải sa
và nhấn Thuộc tính và trong hộp thoại kết quả sẽ có hai trường nhập mật khẩu:
Thêm thông tin đăng nhập của riêng bạn dưới dạngsysadmin
- nhấp chuột phải vào Đăng nhập, Đăng nhập mới ... nhập tên đăng nhập của bạn (trong biểu mẫu DOMAIN\username
), sau đó di chuyển đến tab Vai trò máy chủ và chọn sysadmin
hộp và nhấp vào OK:
(hoặc, nếu thông tin đăng nhập của bạn đã được liệt kê, nhấp chuột phải, Thuộc tính và đảm bảo sysadmin
được kiểm tra trong Vai trò Máy chủ)
Đối với SQL Server 2012 và các phiên bản mới hơn
Bắt đầu với SQL Server 2012, NT Authority\SYSTEM
không còn được cấp quyền cho SQL Server theo mặc định. Vì vậy, một cách khác để làm điều đó trong các phiên bản mới hơn này đã được Argenis Fernandez chi tiết :
- Nếu dịch vụ SQL VSS Writer đang chạy, hãy dừng dịch vụ đó và tạm dừng tất cả các gói bảo trì hoặc phần mềm sao lưu của bên thứ 3 có thể dựa vào nó.
Mở regedit.exe
và thay đổi giá trị của HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SQLWriter\ImagePath
để trỏ đến SQLCMD.exe
, sẽ được trong C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\**<...110|120|130|140...>**\Tools\Binn
. Sau khi chỉnh sửa, giá trị đăng ký sẽ trông giống như sau (xin lỗi vì đã cuộn):
"C:Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\SQLCMD.exe" -S .\instancename -E -Q "ALTER ROLE sysadmin ADD MEMBER [YourDomain\YourUserName];"
Hãy thử khởi động lại dịch vụ SQL VSS Writer (bạn sẽ gặp lỗi; không sao cả).
Bây giờ bạn có thể kết nối như sysadmin
sử dụng YourDomain\YourUserName
. Vì vậy, hãy dừng dịch vụ SQL VSS Writer, sửa chữa sổ đăng ký và khởi động lại dịch vụ (nếu bạn cần nó đang chạy hoặc nếu nó đang chạy trước khi bạn bắt đầu việc này).
Tôi đã trải qua điều này chi tiết hơn rất nhiều trong một mẹo thứ hai:
Mặc dù khi tôi viết mẹo đó, tôi đã sử dụng một cách tiếp cận rườm rà hơn trong việc tạo một bản sao SQLCMD.exe
và thay thế sqlwriter.exe
- dễ dàng hơn nhiều khi chỉ SQLCMD.exe
trực tiếp dịch vụ .
Nếu bạn có đủ khả năng để gỡ dịch vụ SQL Server xuống
Có một đường dẫn được hỗ trợ chính thức từ Microsoft yêu cầu khởi động lại phiên bản trong chế độ người dùng:
Ngoài ra còn có một hàm trong dbatools.io , một giải pháp Powershell để quản lý SQL Server, được gọi là Reset-DbaAdmin
:
Bảo mật không phải là vấn đề chính ở đây
Tôi thấy nhiều người kêu gọi Microsoft "sửa chữa" những lỗ hổng được gọi là "lỗ hổng" này. Đây là những cách tiếp cận hợp lệ để khôi phục quyền truy cập vào một phiên bản của SQL Server mà bạn sở hữu một cách hợp pháp. Tất cả đều yêu cầu các đặc quyền nâng cao trên máy chủ vật lý nơi SQL Server cư trú; như tôi đã nói với nhiều người, nếu bạn không muốn các nhà phát triển gây rối với cài đặt SQL Server, đừng biến họ thành quản trị viên.