Cách thêm sysadmin cho người dùng trong SQL Server 2008 khi không có tài khoản sysadmin


25

Tôi có một phiên bản SQL server 2008 đang chạy. Thật không may trong quá trình thử nghiệm, tôi đã bỏ chọn quyền sysadmin cho thông tin đăng nhập của mình và bây giờ không thể lấy lại được (vì tôi không có quyền sysadmin).

Không có tài khoản sysadmin nào khác, ví dụ SA.

Tôi đã được thiết lập cho Windows xác thực vì vậy tôi đã hack LoginMode trong sổ đăng ký thành 2 để tôi có thể đăng nhập với tư cách SA bằng xác thực Sql. Điều này thực sự đặt chế độ đăng nhập thành Hỗn hợp, tuy nhiên người dùng SA bị tắt theo mặc định và tôi không thể truy cập được vì tôi không có quyền sysadmin.

Làm cách nào để kích hoạt đăng nhập SA để tôi có thể đăng nhập và gán lại sysadmin vào tài khoản bình thường của mình? Có một cài đặt đăng ký cho điều này quá hoặc nó được lưu trữ trong cơ sở dữ liệu chủ?

Câu trả lời:


11

Ngay cả loại tùy chọn kết nối uber-admin nhất, Kết nối quản trị viên chuyên dụng ( DAC ), chỉ có thể được sử dụng làm kết nối cục bộ và cho phép bạn hoàn tác mọi loại tội lỗi, vẫn yêu cầu thông tin đăng nhập. Vì vậy, tôi không nghĩ rằng có một cách chính thức để làm điều này.

Cách nhanh nhất để phục hồi hệ thống này có thể là tắt SQL Server, sao chép các tệp cơ sở dữ liệu người dùng ở một nơi an toàn, gỡ cài đặt, cài đặt lại (đảm bảo gói dịch vụ tối thiểu ở mức bạn đã ở trước đó), sao chép lại các tệp các cơ sở dữ liệu. (Không chắc chắn việc sao chép / quay lại là bắt buộc, nhưng chỉ để an toàn ...).

Bạn vẫn sẽ cần khôi phục thủ công các đối tượng cấp máy chủ (ví dụ: đăng nhập)


1
Cảm ơn - Tôi đã gỡ cài đặt cá thể và cài đặt lại. Lắp lại cơ sở dữ liệu và mọi thứ đều ổn trở lại. Một vài điều cần chú ý là sử dụng trình cài đặt công cụ cơ sở dữ liệu đầy đủ để cài đặt lại cá thể (Tôi có một công cụ quản lý chỉ trình cài đặt làm tôi bối rối trong một thời gian). Ngoài ra, bạn cần thay đổi các quyền trên các tệp cơ sở dữ liệu để nếu không bạn sẽ gặp lỗi khi đính kèm (lỗi 5). Khác hơn thế - tất cả đều hoạt động tốt.

Ngoài ra, tôi đã tạo một bản sao của các tệp cơ sở dữ liệu, nhưng hóa ra điều này là không cần thiết. Việc gỡ cài đặt không xóa cơ sở dữ liệu. Tuy nhiên, tôi vẫn khuyên bạn nên sao chép các tệp cơ sở dữ liệu trong trường hợp hành vi này khác với các phiên bản khác nhau của máy chủ SQL.

27

Một cửa hậu thực sự vào SQL Server không tồn tại mà không yêu cầu khởi động lại và / hoặc khởi động lại bất cứ thứ gì vào chế độ một người dùng. Tôi đã thực hiện điều này trên các hệ thống mà tôi không có quyền truy cập nhưng cần kiểm tra nội dung.

Tải về các công cụ PSexec từ đây . Đặt cái này lên máy chủ và sau đó trong một dấu nhắc lệnh thực thi lệnh này: psexec -i -s SSMS.exehoặc sqlwb.exe

Điều này sẽ mở SSMS như tài khoản hệ thống có quyền truy cập sysadmin vào phiên bản của SQL Server. Điều này được thực hiện trong quá trình cài đặt SQL Server, tuy nhiên tôi đã nghe nói rằng điều này sẽ không xảy ra với SQL 2012.


1
Không, nó không hoạt động trong SQL Server 2012 RTM trở lên. Để vào được, bạn phải khởi động lại dịch vụ SQL Server ở chế độ một người dùng với tư cách là thành viên của nhóm quản trị viên cục bộ của máy chủ.
Shawn Melton

15

SQL Server 2008 khác với SQL Server 2005, trong đó các quản trị viên cục bộ không còn kế thừa vai trò máy chủ cố định sysadmin.

Khi SQL Server 2008 được cài đặt, nó sẽ nhắc bạn chỉ định một tài khoản sẽ được thêm vào vai trò sysadmin. Tuy nhiên, nếu bạn nhận được hộp sau khi phần mềm được cài đặt, điều này không giúp ích cho bạn rất nhiều.

May mắn thay, Microsoft bảo toàn chức năng năm 2005 khi SQL Server đang chạy ở chế độ người dùng. Đây là những gì bạn làm:

  • đăng nhập vào máy chủ với tư cách quản trị viên cục bộ của windows
  • dừng máy chủ sql
  • tại dấu nhắc lệnh, trong thư mục chứa sqlservr.exe, nhập sqlservr.exe -m và nhấn enter - điều này sẽ khởi động SQL Server ở chế độ người dùng đơn
  • mở SQL Server EM và thêm tài khoản của bạn vào vai trò máy chủ cố định sysadmin
  • dừng máy chủ sql, khởi động lại (tại dòng lệnh hoặc trong SQL Server EM

Giải pháp này hoạt động rất đẹp. Chỉ muốn thêm rằng bạn không cần phải đăng nhập với tư cách quản trị viên cục bộ để chạy sqlservr.exe trong chế độ người dùng, ngay khi bạn cần đăng nhập vào SSMS hoặc osql hoặc bất cứ điều gì.
AbeyMarquez

5

Đây là một câu hỏi hay và ai đó sẽ ở trong tình huống này và cần một sự giải cứu khỏi nó ..

Tất cả các khoản tín dụng cho codykonior

Nếu bạn là Quản trị viên Windows trên máy chủ thì bạn có thể sử dụng tập lệnh PowerShell v2 để có quyền truy cập mà không bị cúp và không có rủi ro đã biết. Nó thực hiện điều này bằng cách sao chép mã thông báo đăng nhập của dịch vụ SQL Server ngay cả khi nó chạy dưới tài khoản dịch vụ quảng cáo, tài khoản ảo hoặc được bảo vệ bằng SID mỗi dịch vụ

Tập lệnh bên dưới sẽ lặp lại các dịch vụ SQL Server và sẽ thêm bạn vào vai trò sysadmin bất cứ nơi nào bạn thiếu:

#GITHUB Link : https://github.com/codykonior/HackSql
$userName = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name

$services = Get-Service | Where { ($_.Name -eq 'MSSQLSERVER' -or $_.Name -like 'MSSQL$*') -and $_.Status -eq "Running" }
foreach ($service in $services) {
    if ($service.Name -eq "MSSQLSERVER") {
        $sqlName = ".\"
    } else {
        $sqlName = ".\$($service.Name.Substring(6))"
    }

    Write-Host "Attempting $sqlName"
    $serviceProcess = Get-WmiObject -Class Win32_Service -Filter "Name = '$($service.Name)'"

    Invoke-TokenManipulation -ProcessId $serviceProcess.ProcessID -ImpersonateUser | Out-Null
    $impersonatedUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
    Write-Host "Service $($service.Name) on PID $($serviceProcess.ProcessID) will connect to $sqlName as $impersonatedUser"

    $sqlConnection = New-Object System.Data.SqlClient.SqlConnection("Data Source=$sqlName;Trusted_Connection=True")
    $sqlConnection.Open()
    $sqlCommand = New-Object System.Data.SqlClient.SqlCommand("If Not Exists (Select Top 1 0 From sys.server_principals Where name = '$userName')
Begin
    Create Login [$userName] From Windows
End

If Not Exists (Select Top 1 0 From master.sys.server_principals sp Join master.sys.server_role_members srp On sp.principal_id = srp.member_principal_id Join master.sys.server_principals spr On srp.role_principal_id = spr.principal_id Where sp.name = '$userName' And spr.name = 'sysadmin')
Begin
    Exec sp_addsrvrolemember '$userName', 'sysadmin'
End", $sqlConnection)
    $sqlCommand.ExecuteNonQuery() | Out-Null
    $sqlConnection.Close()
    Invoke-TokenManipulation -RevToSelf | Out-Null
}

2

Bạn vẫn có thể tạo thông tin đăng nhập với quyền truy cập 'sysadmin'. Cảm ơn Kỹ sư dữ liệu chính tại Microsoft (Saleem Hakani) đã là tác giả của Mẹo và thủ thuật SQL Server bên dưới.

Tôi đã tìm thấy điều này trong khi tôi bị kẹt trong trạng thái tương tự khi tôi quên mật khẩu sa cho máy thử nghiệm của mình.

Liên kết: https://bloss.technet.microsoft.com/sqlman/2011/06/14/tips-tricks-you-have-lost-access-to-sql-server-now-what/

Dưới đây là các bước bạn sẽ cần thực hiện:

  1. Bắt đầu phiên bản SQL Server bằng chế độ người dùng đơn (hoặc cấu hình tối thiểu cũng sẽ đặt SQL Server ở chế độ người dùng đơn)

Từ loại dấu nhắc lệnh: SQLServr.Exe hèm (hoặc SQLServr.exe siêuf)

Lưu ý: Nếu thư mục Binn không nằm trong đường dẫn môi trường của bạn, bạn sẽ cần điều hướng đến thư mục Binn.

(Thông thường thư mục Binn được đặt tại: C: \ Chương trình tập tin \ Microsoft SQL Server \ MSSQL10.MSQuerySERVER \ MSSQL \ Binn)

  1. Khi dịch vụ SQL Server đã được khởi động ở chế độ người dùng đơn hoặc với cấu hình tối thiểu, giờ đây bạn có thể sử dụng lệnh SQLCMD từ dấu nhắc lệnh để kết nối với SQL Server và thực hiện các thao tác sau để tự quay lại với tư cách Quản trị viên trên SQL Server.

SQLCMDNETS

Bây giờ bạn sẽ đăng nhập vào SQL Server với tư cách là Quản trị viên.

  1. Khi bạn đã đăng nhập vào Máy chủ SQL bằng SQLCMD, hãy đưa ra các lệnh sau để tạo tài khoản mới hoặc thêm thông tin đăng nhập hiện có vào vai trò máy chủ SYSADMIN.

Để tạo thông tin đăng nhập mới và thêm thông tin đăng nhập đó vào vai trò máy chủ của SYSADMIN:

1> TẠO ĐĂNG NHẬP '' bằng PASSWORD = ''

2> đi

1> SP_ADDSRVROLEMEMBER '', 'SYSADMIN'

2> đi

Để thêm thông tin đăng nhập hiện tại vào vai trò máy chủ SYSADMIN, hãy thực hiện như sau:

1> SP_ADDSRVROLEMEMBER '', 'SYSADMIN'

Hoạt động trên sẽ đảm nhiệm việc cấp các đặc quyền của SYSADMIN cho thông tin đăng nhập hiện có hoặc đăng nhập mới.

  1. Khi các bước trên được thực hiện thành công, bước tiếp theo là dừng và khởi động dịch vụ SQL Server bằng các tùy chọn khởi động thông thường. (Lần này bạn sẽ không cần đếnf hoặcfm)

0

Bạn có thể thực hiện tiếp theo:
1) Tạo tài khoản người dùng windows với quyền quản trị
2) Đăng nhập vào windows bằng tài khoản quản trị mới
3) Mở Studio quản lý máy chủ Sql bằng Windows xác thực
4) Bây giờ bạn đã đăng nhập vào SQL Server dưới dạng sysadmin, vì vậy bạn có thể tạo tài khoản mới hoặc cập nhật người dùng sa


2
Đã thử điều này và nó đã không làm việc. Tôi đã tạo một tài khoản đăng nhập quản trị viên mới trên máy đó. Máy chủ SQL sử dụng các vai trò BUILTIN \ Users (không bao gồm sysadmin) để đăng nhập cho tôi. Do đó tôi vẫn không thể thay đổi loại quản trị viê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.