SQL Server で別サーバにバックアップしたい
やりたかったこと
Microsoft SQL Serverのバックアップを別ホストに保存したい。
開発サーバでの話です。
私が使っている開発サーバ(Windows Server 2019)は、用途別に複数の開発環境を仮想環境(Hyper-V)として稼働させています。ホスト側には開発環境を作っていません。
各仮想環境にはDBMSとしてSQL Serverを導入していて、DBのバックアップをホスト環境に接続している外部ストレージに保存したいなー、というのが今回の目的です。
前提条件
- バックアップはSQL Serverのメンテナンスプランで実施したい。
- メンテンナンスプランはSQL Server Agentサービスで稼働させる。
- メンテナンスプランでのバックアップ保存先に、別ホストのパスを指定したい。
- わけあって、保存先にしたいホストと仮想環境との共通ユーザ(例えばアクティブディレクトリやワークグループ配下のユーザ)は作成できない。
- サーバのログインIDとして個人を識別できるようにしろ、という会社側のポリシーに従うため、サーバは会社ドメインに属するようにして、社員IDでログイン可になるように設定。しかし上記4に記載した弊害が発生。※社員管理用のドメインには気軽にユーザ作成なんぞ出来ません・・・
SQL Server のメンテナンスプランは、デフォルトの設定だとSQL Server Agentサービスの実行ユーザで実施されることになります。
そのため、SQL Server Agentサービスの実行ユーザが、保存先への書き込み権限を保持していれば良いわけです。
しかし、上記4に記載した通り、仮想環境とホスト環境で共通したユーザを作成できないので、どうしたものかと悩んでしまいました。
解決方法
仮想環境のコンピュータ名に、保存先ディレクトリに対する書き込み権限を付与する。
解説
仮想環境がホストのフォルダにアクセスできるように、バックアップ先として指定したいフォルダを共有化します。
その際に、アクセス許可を仮想環境のコンピューター名に対して付与します。
ただし、この設定はホストも仮想環境も同じドメインに属している必要があります。手元の環境で実験した際、同じドメインに属していないとそもそもコンピュータ名に権限を与えることはできませんでした。
※ホスト名でアクセス許可を付与した場合、システムアカウントでのみ共有フォルダにアクセスできるようになるようです。SQL Serverのメンテナンスプランを動かすユーザは、SQL Server Agentのユーザであり、デフォルトだとシステムアカウントとなります。そのため、この設定で仮想マシンからホストのフォルダにメンテナンスプランでバックアップを取ることができるわけです。
手順
共有化したいフォルダのプロパティを開き、「詳細な共有」 をクリック
「アクセス許可」をクリック
「オブジェクトの種類」をクリックし
「コンピューター」にチェック。
こうすることで、コンピューター名をアクセス許可の設定に追加することができます。
試しに、「TESTSERVER2022」を追加してみました。
これで共有の設定は終了ですが、これだけだと「TESTSERVER2022」から書き込みできませんので、セキュリティ設定を変更します。
共有化したいフォルダのプロパティに戻り、「セキュリティ」タブからアクセス許可を編集します。
「編集」ボタン押下後の操作は上記の共有化設定と同じなので割愛します。
このようにコンピュータ名を追加できたので、アクセス許可で必要な権限を付与します。
以上で、指定したコンピューターに対してアクセス許可を与えることができました。