sql >> データベース >  >> RDS >> Sqlserver

SQLServer2017のセキュリティ機能

    Microsoftには、SQL Server 2017に多数のセキュリティ機能があり、保護しようとしているものと保護しようとしている脅威に応じて、さまざまな目的に役立ちます。これらのセキュリティ機能の一部は、実装する機能を決定するときに注意する必要があるパフォーマンスへの影響をもたらす可能性があります。はじめに、これらのセキュリティ機能のいくつかのハイライトをいくつか取り上げます。

    透過データベース暗号化(TDE)

    透過的データ暗号化(TDE)は、保存時のSQL Serverの暗号化形式です。つまり、ユーザーデータベースでTDEを有効にすると、データファイル、ログファイル、tempdbファイル、およびSQL Serverの完全、差分、ログバックアップが暗号化されます。 。これにより、誰かが暗号化証明書とキーにアクセスできない限り、それらのデータベースまたはデータベースバックアップファイルにアクセスすることからデータを保護します。

    ユーザーデータベースの最初のTDE暗号化スキャンでは、データベース内のデータファイルごとに1つのバックグラウンドCPUスレッドを使用し(データファイルが別々の論理ドライブにある場合)、データファイルの内容全体を次の速度でメモリにゆっくりと読み込みます。データファイルあたり約52MB/秒(データファイルが別々の論理ドライブにある場合)。

    次に、データは選択した暗号化アルゴリズムで暗号化され、約55MB /秒でデータファイルに書き戻されます(データファイルごとに、別々の論理ドライブにある場合)。これらのシーケンシャルな読み取りおよび書き込みレートは意図的に調整されているようであり、さまざまなタイプのストレージを備えた複数のシステムでのテストで一貫しています。

    最初のTDE暗号化プロセスは、SQL Serverの下のページレベルで行われるため、インデックスの再構築で見られるようなロックやトランザクションログアクティビティの生成は発生しません。グローバルTF5004を有効にすることでTDE暗号化スキャンを一時停止し、TF5004を無効にしてALTERDATABASE dbNAME SETENCRYTIONONコマンドを再度実行することで一時停止を解除できます。進行状況は失われません。

    AES-NIハードウェア命令をサポートするプロセッサを使用している場合、SQL Server 2016以降では、暗号化/復号化によるCPUへの影響が大幅に軽減されます。サーバースペースでは、これらは2ソケットサーバー用のIntel Xeon 5600製品ファミリー(Westmere-EP)と、4および8ソケットサーバー用のIntel Xeon E7-4800 / 8800製品ファミリー(Westmere-EX)に導入されました。新しいインテル製品ファミリーもAES-NIをサポートします。プロセッサがAES-NIをサポートしているかどうか疑問がある場合は、図1に示すように、CPU-Zから出力される命令フィールドで「AES」を探すことができます。

    図1:AES命令サポートを示すCPU-Z出力

    TDEを使​​用してデータベースを暗号化した後は、ワークロードに完全に依存するため、TDEの実行時の影響を予測して定量化することは困難です。たとえば、ワークロードがSQL Serverバッファプールに完全に収まる場合、TDEからのオーバーヘッドは基本的にゼロになります。一方、ワークロードが完全にテーブルスキャンで構成されていて、ページが読み取られてすぐにフラッシュされる場合は、最大のペナルティが課せられます。 I / O揮発性ワークロードの最大ペナルティは、通常、最新のハードウェアおよびSQL Server 2016以降では5%未満です。

    TDE復号化の追加作業は、ストレージからバッファープールにデータを読み取るときに発生し、TDE暗号化の追加作業は、データをストレージに書き戻すときに発生します。十分な大きさのバッファプールを用意し、インデックスとクエリの調整を行うことで、メモリ不足に陥っていないことを確認すると、TDEのパフォーマンスへの影響が明らかに減少します。 TDEはFILESTREAMデータを暗号化しません。また、TDE暗号化データベースは、データファイルにインスタントファイル初期化を使用しません。

    SQL Server 2016より前は、TDEとネイティブバックアップ圧縮は連携して機能しませんでした。 SQL Server 2016以降では、バックアップコマンドで64Kを超えるMAXTRANSFERSIZEを指定している限り、TDEとネイティブバックアップ圧縮を一緒に使用できます。 SQLServer2016とSQLServer2017の両方に複数の重要なTDE関連の修正プログラムが存在するため、累積的な更新を最新の状態に保つことも非常に重要です。最後に、TDEは、SQL Server 2016の後でも、EnterpriseEditionのみの機能です。 SP1(Standard Editionに多くのエンタープライズ専用機能を追加しました)。

    行レベルのセキュリティ(RLS)

    行レベルのセキュリティ(RLS)は、ユーザーの属性に基づいて、読み取りアクセスとほとんどの書き込みレベルのアクセスを制限します。 RLSは、述語ベースのアクセス制御と呼ばれるものを使用します。 SQL Serverはデータベース層にアクセス制限を適用し、どの層からでもデータアクセスが試行されるたびに適用されます。

    RLSは、ユーザーがアクセスできる行を制限する述語関数を作成し、セキュリティポリシーとセキュリティ述語を使用してその関数をテーブルに適用することで機能します。

    セキュリティ述語には、フィルター述語とブロック述語の2種類があります。フィルタ述語は、フィルタリングされた行が結果セットに表示されないようにするWHERE句を基本的に追加することにより、読み取り操作(SELECT、UPDATE、およびDELETE)に使用できる行をサイレントにフィルタリングします。フィルタ述語は、ベーステーブルからデータを読み取るときに適用され、ユーザーまたはアプリケーションは、結果から行がフィルタリングされていることを認識しません。パフォーマンスの観点から、RLSフィルター述語をカバーする行ストアインデックスを用意することが重要です。

    ブロック述語を明示的に(エラーメッセージを使用して)ブロック書き込み操作(AFTER INSERT、AFTER UPDATE、BEFORE UPDATE、およびBEFORE DELETE)をブロックします。これは、ブロック述語に違反します。

    フィルタおよびブロック述語は、インラインのテーブル値関数として作成されます。また、CREATE SECURITY POLICY T-SQLステートメントを使用して、関連するベーステーブルにフィルタリング機能を適用して有効にする必要があります

    RLSはSQLServer2016で追加され、SQLServer2016以降のすべてのエディションで使用できます。 RLSは、Filestream、Polybase、およびインデックス付きビューでは機能しません。 RLSは、全文検索のパフォーマンスを低下させる可能性があり、列ストアインデックスクエリがバッチモードではなく行モードを使用するように強制する可能性があります。このMicrosoftブログ投稿には、RLSのパフォーマンスへの影響に関する詳細情報があります。クエリストアを使用してRLSパフォーマンスを調整する方法の良い例はここにあります。

    動的データマスキング(DDM)

    動的データマスキング(DDM)は、非特権ユーザーにデータをマスキングすることにより、機密データの公開を制限するのに役立ちます。 DDMはテーブルレベルで適用されるため、すべてのクエリはデータマスキングの影響を受けますが、実際のマスキングルールはテーブルの個々の列に適用されます。

    使用できるデータマスクには、デフォルト、電子メール、カスタム文字列、ランダムの4種類があります。デフォルトマスクは、データタイプに応じてデータの完全なデフォルトマスキングを提供します。たとえば、文字列データ型は、実際のデータではなく「XXXX」のマスクを取得します。電子メールマスクは、実際のドメインサフィックスに関係なく、実際の電子メールアドレスの最初の文字に続いて[email protected]を返します。カスタム文字列マスクは、文字列の最初と最後の文字を表示し、中央にカスタムパディングがあります。最後に、ランダムマスクを使用して数値データをマスクし、定義された範囲のランダム値を提供します。データマスクは、CREATETABLEステートメントまたはALTERCOLUMNステートメントで作成できます。

    動的データマスキングは、テーブルに直接クエリを実行してマスクされていないデータを表示できる特権ユーザーにはマスキングを提供しません。マスキングルールは、暗号化された列(Always Encrypted)、計算された列、またはファイルストリームデータでは使用できません。マスクする列に既存のインデックスがある場合は、インデックスを削除し、列にマスクを作成してから、インデックスを再作成する必要があります。ユーザーが最終的にマスクされた列の値を推測できるクエリを作成することで、マスクされたデータ列の値を推測することもできます。

    動的データマスキングはSQLServer2016で導入され、SQLServerのすべてのエディションで使用できます。 DDMは、実際の暗号化のような強力なセキュリティ対策を目的としたものではありませんが、一方で、パフォーマンスへの影響はごくわずかであるように見えます。


    1. MySQLサーバーの保護

    2. カーディナリティがパフォーマンスにどのように影響するかをご覧ください

    3. Postgresqlでキャリッジリターンと新しい行を削除するにはどうすればよいですか?

    4. SQLで保持率を計算する方法は?