sysadminアカウントが存在しないときにSQL Server 2008でユーザーにsysadminを追加する方法


25

SQL Server 2008インスタンスを実行しています。残念ながら、テスト中にログインのsysadmin権限を選択解除しましたが、現在はそれを読み取ることができません(sysadmin権限がないため)。

SAを除き、インスタンスの他のsysadminアカウントはありません。

Windows認証のみを設定したので、レジストリのLoginModeを2にハッキングして、SQL認証を使用してSAとしてログインできるようにしました。これにより実際にログインモードがMixedに設定されますが、SAユーザーはデフォルトで無効になっており、sysadmin権限がないため、再度有効にすることはできません。

システム管理者を取得して通常のアカウントに再割り当てできるように、SAログインを有効にするにはどうすればよいですか?このレジストリ設定もありますか、それともmasterデータベースに保存されていますか?

回答:


11

ローカル接続としてのみ使用でき、あらゆる種類の悪を元に戻すことができる、ほとんどの管理者タイプの接続オプションDedicated Administrator Connection(DAC)でさえ、ログイン資格情報が必要です。ですから、これを行う公式の方法はないと思います。

このシステムを復活させる最も簡単な方法は、SQL Serverをシャットダウンし、ユーザーデータベースファイルを安全な場所にコピーし、アンインストールし、再インストール(少なくとも以前のレベルまでサービスパックを確認する)、ファイルをコピーして添付することです。データベース。(コピー/バックが必要かどうかはわかりませんが、念のため...)。

サーバーレベルのオブジェクト(ログインなど)を手動で回復する必要があります。


1
ありがとう-インスタンスをアンインストールして、再インストールしました。データベースを再接続すると、すべてが再び正常になります。注意すべき点は、データベースエンジンのフルインストーラーを使用してインスタンスを再インストールすることでした(管理ツールのみのインストーラーがあり、しばらく困惑していました)。また、データベースファイルのアクセス許可を変更する必要があります。そうしないと、接続時にエラーが発生します(エラー5)。それ以外-すべてうまくいきました。

また、データベースファイルのコピーを作成しましたが、これは必要ないことが判明しました。アンインストールでは、データベースは削除されませんでした。ただし、SQLサーバーのバージョンによってこの動作が異なる場合に備えて、データベースファイルをコピーすることをお勧めします。

27

SQL Serverへの実際のバックドアは存在し、シングルユーザーモードでの再起動や再起動は必要ありません。これは、アクセス権はないものの、チェックする必要があるシステムで実行しました。

ここからPSexecツールをダウンロードします。これをサーバーに配置し、コマンドプロンプトで次のコマンドを実行します:psexec -i -s SSMS.exe、またはsqlwb.exe

これにより、SSMSがSQL Serverのインスタンスへのsysadminアクセスを持つシステムアカウントとして開かれます。これはSQL Serverのインストール中に行われますが、SQL 2012ではそうではないと聞いています。


1
いいえ、SQL Server 2012 RTM以降では機能しません。取得するには、サーバーのローカル管理グループのメンバーとしてシングルユーザーモードでSQL Serverサービスを再起動する必要があります。
ショーンメルトン

15

SQL Server 2008は、ローカル管理者がsysadmin固定サーバーロールを継承しなくなったという点で、SQL Server 2005とは異なります。

SQL Server 2008をインストールすると、sysadminロールに追加するアカウントを指定するよう求められます。ただし、ソフトウェアのインストール後に箱を受け取った場合、これはあまり役に立ちません。

幸いなことに、MicrosoftはSQL Serverがシングルユーザーモードで実行されている場合、2005の機能を保持していました。あなたがすることは次のとおりです。

  • Windowsローカル管理者としてサーバーにログインします
  • SQLサーバーを停止する
  • コマンドプロンプトで、sqlservr.exeが存在するディレクトリで、sqlservr.exe -mと入力し、Enterキーを押します。これにより、SQL Serverがシングルユーザーモードで起動します。
  • SQL Server EMを開き、アカウントをsysadmin固定サーバーロールに追加します
  • SQLサーバーを停止し、再起動(コマンドラインまたはSQL Server EMで)

このソリューションは美しく機能します。SSMSやosqlなどでログインする必要がある場合に、シングルユーザーモードでsqlservr.exeを実行するためにローカル管理者としてログインする必要がないことを追加したいだけです。
-AbeyMarquez

5

これは素晴らしい質問であり、誰かがこの状況に陥り、そこから救出する必要があります。

すべてのクレジットはcodykoniorに送られます

サーバーのWindows管理者であれば、PowerShell v2スクリプトを使用して、停止や既知のリスクなしでアクセスを取得できます。ADサービスアカウント、仮想アカウントで実行されている場合、またはサービスごとのSIDで保護されている場合でも、SQL Serverサービスのログイントークンを複製することでこれを行います

以下のスクリプトは、SQL Serverサービスを反復処理し、行方不明の場合はsysadminロールに追加します。

#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

「sysadmin」アクセスでログインを作成できます。Microsoftのプリンシパルデータエンジニア(Saleem Hakani)が以下のSQL Server Tips&Trickを作成してくれたことに感謝します。

これは、テストマシンのsaパスワードを忘れたときに似たような状態に陥っていたときに発見しました。

リンク:https : //blogs.technet.microsoft.com/sqlman/2011/06/14/tips-tricks-you-have-lost-access-to-sql-server-now-what/

実行する必要がある手順は次のとおりです。

  1. シングルユーザーモード(またはSQL Serverをシングルユーザーモードにする最小構成)を使用して、SQL Serverインスタンスを起動します。

コマンドプロンプトから次のように入力します。SQLServr.Exe–m(またはSQLServr.exe –f)

注:Binnフォルダーが環境パスにない場合は、Binnフォルダーに移動する必要があります。

(通常、BinnフォルダーはC:\ Program Files \ Microsoft SQL Server \ MSSQL10.MSSQLSERVER \ MSSQL \ Binnにあります)

  1. SQL Serverサービスがシングルユーザーモードまたは最小構成で開始されると、コマンドプロンプトからSQLCMDコマンドを使用してSQL Serverに接続し、次の操作を実行して、SQL Serverインスタンスの管理者として自分を追加できるようになりました。

SQLCMD –S

これで、管理者としてSQL Serverにログインします。

  1. SQLCMDを使用してSQL Serverにログインしたら、次のコマンドを発行して新しいアカウントを作成するか、既存のログインをSYSADMINサーバーロールに追加します。

新しいログインを作成し、そのログインをSYSADMINサーバーロールに追加するには:

1>パスワードの作成 '' PASSWORD = ''

2>行く

1> SP_ADDSRVROLEMEMBER ''、 'SYSADMIN'

2> go

既存のログインをSYSADMINサーバーロールに追加するには、次を実行します。

1> SP_ADDSRVROLEMEMBER ''、 'SYSADMIN'

上記の操作により、既存のログインまたは新しいログインにSYSADMIN特権が付与されます。

  1. 上記の手順が正常に実行されたら、次の手順は、通常の起動オプションを使用してSQL Serverサービスを停止および開始することです。(今回は–fまたは–mは必要ありません)

0

次のことができます:
1)管理者権限を持つWindowsユーザーアカウントを作成する
2)新しい管理者アカウントでWindowsにログインする
3)Windows認証を使用してSql Server Mangement Studioを開く
4)これでsysadminとしてSQL Serverにログインしているので、新しいアカウントを作成するか、saユーザーを更新できます


2
これを試してみましたが、うまくいきませんでした。そのマシンに新しい管理者ログインアカウントを作成しました。SQLサーバーはBUILTIN \ Usersロール(sysadminを含まない)を使用してログインします。したがって、管理者タイプを変更することはできません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.