SQLServer

Microsoft SQL Serverの認証モード切替をコマンドラインから行う方法(Windows版)


はじめに

Microsoft SQL Server(以後MSSQL)のインストール初期段階で、認証方式を選択する所がある。

この認証方式を、インストールされた後から切り替えたい場合についての手順を書いておく。


認証方式について(Windows)

Linux版は未確認だが、Windows版のMS SQL Serverには、ログインユーザーの認証方式は以下のものがある。


  • SQL認証


    • MSSQL自身が認証用データベースを持ち、ログイン管理する方式

    • PostgreSQLでいう所のpostgresにあたるsaアカウントもこれに含まれる



  • Windows認証


    • MSSQLからシステム(この場合Windowsユーザー)にユーザーの正当性を認証依頼を出す方式

    • AD等との連携が可能

    • C#のMSSQL接続情報でIntegratedSecurity=trueにするとこちらが使用される

    • PostgreSQLでいう所のpeerに近いかもしれない



問題は、デフォルトでSQL認証は無効となっている点である。なお、Windows認証を無効にする方法は不明。

このため、SQL認証が前提のシステムだと、ログインができなくなる(エラーコード18456)。

そのため、うっかりSQL認証を無効にしてインストールしてしまった場合、これを切り替える必要が出てくる。


インストール後の切り替え方法

基本的に MS公式の"サーバー認証モードの変更" というドキュメントに従えば問題ない。

だが、リンク先の方法だとどうしてもSSMSでサーバーオプションを切り替える必要がある。

サーバーの制約でSSMSを使用できない場合、この方法は使えない

では、どうすればいいかというと下記のようにする


  1. レジストリを以下のように書き換える


    • キー: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\[インスタンス名]\MSSQLServer

    • 値名: LoginMode

    • 値: 2(Windows認証のみにする場合は1)



  2. SQL Serverサービスを再起動する

  3. 必要ならば、SQLCMDを使い、alter login enable [ユーザー名]でログインユーザーを有効にする

  4. 必要ならば、SQLCMDを使い、alter login [ユーザー名] with PASSWORD='[パスワード]'でパスワードを設定する