データ ファイルとログ ファイルのセキュリティ保護

SQL Server では、各データベースの物理データ ファイルと物理ログ ファイルに対するファイル アクセス許可が特定のアカウントに設定されます。アクセス許可を設定すると、だれもがアクセスできるディレクトリにファイルを配置しても、ファイルが改ざんされる危険性を回避できます。たとえば、アクセス許可を設定していない場合に、オペレーティング システムで、データベースのディレクトリに対して全員にフル コントロールのアクセス許可が設定されているとします。この場合、データベース自体を変更する SQL Server 権限を与えられているかどうかにかかわらず、そのディレクトリにアクセスできるすべてのアカウントが、データベース ファイルを削除または変更できます。

ファイル アクセス許可は、データベースの作成、アタッチ、デタッチ、新しいファイルを追加するための変更、バックアップ、復元のいずれかのデータベース操作中に設定されます。

管理上の注意点

  • アクセス許可が設定されるのは、ファイル システムで NTFS ファイル システムなどの Win32 アクセス制御がサポートされる場合のみです。データベース エンジンは、未処理のパーティションまたは FAT および FAT32 ファイル システムに格納されているファイルにはアクセス許可を設定できません。

  • オペレーティング システムの管理者が手動でファイル アクセス許可を変更した場合、データベース エンジンにより、元のアクセス許可が適用されることはありません。

  • SQL Server Management Studio を使用して SQL Server (MSSQLSERVER) サービス アカウントを変更した場合、Management Studio により、すべての既存のデータベース ファイルにアカウントと適切なアクセス許可が追加されます。ただし、この操作は、サービス アカウントの変更時に使用できなかったデータベースに対しては失敗します。

  • Microsoft Windows Services を使用して MSSQLSERVER サービス アカウントを変更した場合、オペレーティング システムの管理者は、新しいサービス アカウントにすべてのデータベース ファイルとログ ファイルに対するフル コントロールのアクセス許可を与える必要があります。

データベースの作成または新しいファイルの追加

データベースを作成するか、または変更して新しいファイルを追加すると、MSSQLSERVER サービス アカウントとローカルの Administrators グループのメンバには、データ ファイルとログ ファイルに対してフル コントロールのアクセスが許可されます。他のアカウントによるファイル アクセスはすべて拒否されます。

データベースのバックアップと復元

バックアップ先および復元先として作成されたファイルに対するフル コントロールのアクセス許可は、MSSQLSERVER サービス アカウントとローカルの Administrators グループのメンバに与えられます。

このようなファイルが既に存在していて、MSSQLSERVER サービス アカウントにこのファイルに対するアクセス許可が既に与えられている場合は、バックアップ操作または復元操作が続行されます。それ以外の場合、データベース エンジンは、操作を実行している接続の Windows アカウントの権限を借用してファイルを開こうとします。ファイルが開かれた後、アクセス許可が MSSQLSERVER サービス アカウントとローカルの Administrators グループに与えられます。

スタンバイ ファイル (UNDO ファイル) も上記と同じ方法で扱われます。

データベースのデタッチとアタッチ

データベースをデタッチまたはアタッチするときに、データベース エンジンは、操作を実行している接続の Windows アカウントの権限を借用し、データベース ファイルとログ ファイルにアクセスする権限がそのアカウントに与えられるようにします。SQL Server ログインを使用する混合セキュリティ アカウントの場合、権限の借用は失敗します。

セキュリティに関する注意セキュリティに関する注意

不明または信頼できないソースのデータベースはアタッチしないことをお勧めします。そのようなデータベースには、意図しない Transact-SQL コードを実行したり、スキーマまたは物理データベース構造を変更することによりエラーを発生させる悪意のあるコードが含まれている可能性があります。不明または信頼できないソースのデータベースを使用する前に、実稼働用ではないサーバーでそのデータベースに対し DBCC CHECKDB を実行し、さらに、そのデータベースのストアド プロシージャやその他のユーザー定義コードなどのコードを調べます。

次の表に、アタッチ操作またはデタッチ操作の完了後にデータベース ファイルとログ ファイルに設定されるアクセス許可と、接続しているアカウントの権限をデータベース エンジンが借用できるかどうかを示します。

操作

接続しているアカウントの権限の借用

ファイル アクセス許可が与えられるアカウント

デタッチ

操作を実行しているアカウントのみ。データベースのデタッチ後に、オペレーティング システムの管理者が必要に応じてアカウントを追加できます。

デタッチ

不可

SQL Server (MSSQLSERVER) サービス アカウントとローカルの Windows Administrators グループのメンバ。

アタッチ

SQL Server (MSSQLSERVER) サービス アカウントとローカルの Windows Administrators グループのメンバ。

アタッチ

不可

SQL Server (MSSQLSERVER) サービス アカウント。

シナリオ

次のシナリオでは、データベースを作成したときに設定されるアクセス許可と、そのデータベースをデタッチし、アタッチしたときに変更されるアクセス許可について説明します。

dbcreator 固定サーバー ロールのメンバの User1 が、e:\Data\Sales.mdf および f:\Log\Sales.ldf というファイルが格納されたデータベース Sales を作成します。データベースを作成するときの MSSQLSERVER サービス アカウントは、ローカル アカウントの SQLServiceAccount2 です。データベース ファイルとログ ファイルに対するフル コントロールのアクセス許可は、SQLServiceAccount2 と Windows Administrators グループのメンバに与えられます。

ここで、Sales データベースを同じサーバーにある別の SQL Server のインスタンスに移動します。データベースをデタッチするのは、sysadmin 固定サーバー ロールのメンバの Admin3 です。Admin3 アカウントのみが Sales.mdf ファイルと Sales.ldf ファイルにアクセスできるように、データベース エンジンにより、これらのファイルに対するアクセス許可が設定されます。

Admin3 が、別の SQL Server のインスタンス SalesServer に接続します。SalesServer インスタンスの MSSQLSERVER サービス アカウントは、SQLSalesServiceAccount です。その後、このインスタンスの SQL Server 管理者の Admin3 が、Sales データベースをアタッチします。SQLSalesServiceAccount と Windows Administrators グループのメンバにフル コントロールのアクセス許可が与えられます。