web-dev-qa-db-ja.com

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

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

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

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

SAログインを有効にして、sysadminにアクセスして通常のアカウントに再割り当てできるようにするにはどうすればよいですか?レジストリの設定もあるのですか、それともマスターデータベースに保存されていますか?

25
Mark D Jackson

最もuber-adminタイプの接続オプションであるDedicated Administrator Connection( [〜#〜] dac [〜#〜] )。これはローカル接続としてのみ使用でき、すべての種類を取り消すことができます悪の、まだログイン資格情報が必要です。だから私はこれを行う公式の方法はないと思います。

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

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

11

SQL Serverへの実際のバックドアは存在しますが、何も再起動したり、シングルユーザーモードで再起動したりする必要はありません。私はアクセスできなかったが、内容を確認する必要があるシステムでこれを行いました。

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

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

27
user507

SQL Server 2008はSQL Server 2005とは異なり、ローカル管理者はsysadmin固定サーバーロールを継承しません。

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

幸い、SQL Serverがシングルユーザーモードで実行されている場合、マイクロソフトは2005の機能を維持しました。ここではあなたが何をすべきかです:

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

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

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

サーバーのWindows管理者の場合は、PowerShell v2スクリプトを使用して、停止や既知のリスクなしにアクセスを取得できます。これは、SQLサービスが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
}
5
Kin Shah

「sysadmin」アクセスでログインを作成することもできます。Microsoft(Saleem Hakani)のPrincipal Data Engineerに感謝し、以下のSQL Serverのヒントとテクニックを作成しました。

テストマシンの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> CREATE LOGIN ‘’ with PASSWORD = ’’

2>行く

1> SP_ADDSRVROLEMEMBER ‘’、 ’SYSADMIN’

2>行く

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

1> SP_ADDSRVROLEMEMBER ‘’、 ’SYSADMIN’

上記の操作は、既存のログインまたは新しいログインへのSYSADMIN特権の付与を処理します。

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

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

0