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

SQLServerとSpectre/Meltdownの脆弱性

    2018年1月3日以降、投機的実行の側面について、多くの矛盾する、場合によっては憂慮すべき情報が公開されています。 -MeltdownおよびSpectreとも呼ばれるチャネルの脆弱性で、最新のプロセッサにさまざまな程度で影響を及ぼします。 Meltdownエクスプロイト(CVE-2017-5754)は、特にIntelプロセッサにのみ影響します。これらの脆弱性からシステムを保護するには、SQL Serverが実行されている環境と使用されている機能に応じて、ほとんどのシステムでいくつかの手順が必要になります。

    指針となる原則は、セキュリティの懸念がパフォーマンスの懸念よりも優先されるべきであるということです。これらのセキュリティの脆弱性を無視し、パフォーマンスの問題が発生する可能性があるために必要なパッチを適用しないことは、ほとんどの組織にとって大きな間違い(および法的責任の可能性)になります。 MeltdownとSpectreの新しいバリエーションに関する研究はすでに公開されているため、このタイプの問題はすぐになくなることはありません。さらに、セキュリティベンダーは、実際のSpectre/Meltdown攻撃の証拠を報告しています。

    残念ながら、これらの脆弱性からシステムを保護するためにシステムに対して実際に何をすべきかを決定することは、IntelとAMDによってリリースされた脆弱性に関する情報の変更、およびCPUマイクロコードとオペレーティングシステムの両方で、時間の経過とともにますます複雑で混乱を招いています。パッチがリリースされ、まもなく削除されます。

    パッチ適用によるパフォーマンスへの影響

    サーバーのハードウェア、オペレーティングシステム、ワークロード、および最終的にインストールするパッチによっては、これらの緩和策によってパフォーマンスに悪影響が及ぶ可能性があります。 MicrosoftのTerryMyersonはこのテーマについてかなり詳細な投稿をしていますが、NetflixのBrendanGreggはLinuxに関する詳細な結果をいくつか持っています。 Brandon Leeは、ここでVMware環境でいくつかの合成ベンチマークテストを実施しました。

    幸いなことに、このパッチ適用の取り組みに起因するほとんどのパフォーマンスの低下は、SQLServerでの適切な構成とワークロードの調整によって減らすことができます。 SentryOneのSQLSentryなどの監視製品を使用すると、環境に存在するパフォーマンスのボトルネックを特定するのに役立ちます。

    多くの組織では、展開されたSQL Serverビルドを完全に最新のものにすることで(Spectre / Meltdownのパッチ適用の副作用として)、他の多くの問題を解決し、パフォーマンスの完全なセットから見たパフォーマンスの低下を補うのに十分なパフォーマンスを向上させる可能性があります。 Spectre/Meltdownパッチ。通常、すべてのSQL Server CUの修正リストを読むと、SQLServerのパフォーマンスに大きな影響を与える可能性のあるパフォーマンス関連の修正がいくつか明らかになります。

    最新のIntelプロセッサはPCIDとINVPCIDをサポートしており、Meltdownオペレーティングシステムパッチのパフォーマンスへの影響を大幅に軽減します。つまり、Intel Xeon E7 v3製品ファミリ(Haswell-EX)以降のプロセッサに加えて、Intel Xeon E5-2600 v3製品ファミリ(Haswell-EP)以降のプロセッサでPCIDパフォーマンスの最適化をWindowsOSでサポートできるようになります。

    IntelプロセッサがHaswellマイクロアーキテクチャ(2014年第3四半期に2ソケットサーバー用にリリースされた)よりも古い場合、これにより、ハードウェアのアップグレードを計画する理由がさらに増えます。 Microsoft CoreInfoを使用して、プロセッサがPCIDおよびINVPCIDをサポートしているかどうかを簡単に確認する方法について説明しました。また、新しいIntelKabyLakeシステムでいくつかの合成ベンチマークテストを行いました。

    Microsoftには、すべてのマシンのSpectre/Meltdownパッチステータスを確認するために使用できる新しいWindowsAnalytics機能があります。 Microsoftには、ここで説明した全体的なパッチステータス(Windowsおよびハードウェアの観点から)を確認するために使用できるPowerShellモジュールもあります。 PoSHを使用せずに、エンドユーザー(またはお母さん)のクライアントオペレーティングシステムをすばやく簡単にチェックしたい場合は、InSpectreユーティリティ(簡単なGUIを使用)をダウンロードして実行し、パッチをチェックできます。オペレーティングシステムとプロセッサのマイクロコードのステータス。

    SQLServerインスタンスの確認

    最後に、SQLServerのパッチステータスを確認する必要があります。 SQL Serverインスタンスをチェックして、関連するSQLServerパッチがインストールされているかどうかを確認するT-SQLスクリプトを開発しました。このスクリプトは、オンプレミスインスタンスまたはAzureIaaSインスタンスのSQLServer2008からSQLServer2017で機能します。これは、AzureSQLデータベースで機能するようには設計されていません。ここからダウンロードできます。

    この問題の考えられる利点の1つは、Microsoftが明示的に推奨しているサービスパックと累積的な更新プログラムを使用してSQLServerインスタンスを最新の状態に保つための正当性が組織に与えられる可能性があることです。

    Spectre/Meltdown軽減手順

    実行を強く検討する必要がある緩和手順は次のとおりです。

    • Microsoftから関連するオペレーティングシステムパッチをインストールします(利用可能な場合)
      • Windows Server、バージョン1709、Windows Server 2016、Windows Server 2012 R2、およびWindows Server2008R2で利用可能
      • WindowsServer2012またはWindowsServer2008ではまだ利用できません(2018年2月15日現在)
    • サーバーオペレーティングシステムでオペレーティングシステムの保護を有効にするために、必要な構成変更(レジストリ設定)を行います
    • ハイパーバイザーで実行している場合は、関連するハイパーバイザーパッチをインストールします
      • VMware vSphere、Workstation、およびFusionの更新により、投機的実行の問題に対するハイパーバイザー支援のゲスト修復が追加されます
    • Microsoftから関連するSQLServerパッチをインストールします
      • SQL Server 2017、SQL Server 2016、SQL Server 2014、SQL Server 2012 SP4、SQL Server 2008 R2 SP3、およびSQL Server2008SP4で使用可能
      • SQLServer2005以前では使用できません
    • サーバーベンダーからのBIOSアップデート(CPUマイクロコードアップデートがある場合)をインストールします(利用可能な場合)
      • これは、使用しているプロセッサ、環境、機能の使用状況によって異なります
      • これらのBIOSアップデートは、現在ほとんどのサーバーで利用できません(最初は一部の新しいサーバーでリリースされ、その後廃止されました)
    • 使用している可能性のあるSQLServerの拡張機能と、実行する必要のある追加の緩和手順を評価します。これらには以下が含まれます:
      • SQLCLRアセンブリ
      • 外部スクリプトメカニズムを介して実行される、またはSQLServerと同じ物理マシン上のスタンドアロンのR/ MachineLearningStudioから実行されるRおよびPythonパッケージ
      • SQL Serverと同じ物理マシン上で実行されているSQLエージェント拡張ポイント(ActiveXスクリプト)
      • リンクサーバーで使用されるMicrosoft以外のOLEDBプロバイダー
      • Microsoft以外の拡張ストアドプロシージャ
      • サーバー内で実行されるCOMオブジェクト(sp_OACreateを介してアクセス)
      • xp_cmdshellを介して実行されるプログラム

    1. 重複するデータベースクエリを減らすためのデータベースキャッシングの形式はありません。

    2. ADOを使用してC#で効率的なSQL Serverデッドロック処理を取得するにはどうすればよいですか?

    3. 返されたUriからデータベースに挿入された新しいレコードのIDを取得します

    4. テーブルの主キー値を更新できますか?