次の方法で共有


クイック スタート: Security Analyzer (プレビュー)

GitHub Copilot は、開発者が SQL コードとアプリケーション層クエリで一般的なセキュリティ リスクを特定して対処するのに役立ちます。 SQL インジェクション、露出超過データ、安全でないパターンなどの脆弱性を検出するのに役立ちます。特に、強力なセキュリティの背景を持たない開発者には、開発中にコンテキストに対応した実用的な推奨事項を提供します。

始めましょう

データベースに接続されていて、MSSQL 拡張機能でアクティブなエディター ウィンドウが開かれていることを確認します。 この接続により、 @mssql チャット参加者はデータベース環境のコンテキストを理解できるため、正確でコンテキストに対応した提案が可能になります。 データベース接続がないと、チャット参加者は意味のある応答を提供するスキーマまたはデータ コンテキストを持ちません。

次の例では、 AdventureWorksLT2022 サンプル データベースを使用します。このデータベースは、 Microsoft SQL Server サンプルとコミュニティ プロジェクト のホーム ページからダウンロードできます。

最適な結果を得るには、独自の環境に合わせてテーブル名とスキーマ名を調整します。

チャットに @mssql プレフィックスが含まれていることを確認します。 たとえば、「 @mssql 」と入力し、その後に質問またはプロンプトを入力します。 これにより、チャット参加者は、SQL 関連のサポートを求めていることを理解できます。

GitHub Copilot を使用してセキュリティ リスクを検出して修正する

GitHub Copilot は、開発者が運用環境に到達する前に、開発プロセスの早い段階で一般的なセキュリティ脆弱性を検出して修正するのに役立ちます。 生の SQL、ORM、ストアド プロシージャのいずれを使用している場合でも、GitHub Copilot は安全でないパターンを特定し、潜在的なリスクを説明し、データベース コンテキストに基づいてより安全な代替手段を提案できます。 これは、セキュリティを専門とせず、セキュリティで保護されたコーディングプラクティスに従う必要がある開発者にとって特に便利です。

チャット参加者から質問できる一般的なユース ケースと例を次に示します。

SQL インジェクションの検出

SQL インジェクションは、データベース アプリケーションで最も一般的で危険なセキュリティの脆弱性の 1 つです。 GitHub Copilot は、パラメーター化されていないクエリ、文字列補間の問題、動的 SQL の誤用を特定するのに役立つ一方で、コンテキストに合わせて調整されたより安全でパラメーター化された代替手段を推奨します。

  • 現在のデータベースSQLAlchemyスキーマのPythonSalesLTを使用しています。 次の SQLAlchemy クエリで、 SQL インジェクション、過剰フェッチ、パフォーマンスの問題など、潜在的なセキュリティ リスクを確認します。 必要に応じて、パフォーマンスとセキュリティを確保するために、パラメーター化されたクエリ、接続プール、その他のセキュリティで保護された SQL Server プラクティスを使用して改善を提案します。
query = f"SELECT * FROM SalesLT.Customer WHERE LastName = '{user_input}'"
result = engine.execute(query).fetchall()
  • 潜在的なセキュリティの脆弱性について、次の JavaScriptSQL クエリを分析します。 SQLインジェクション、過剰フェッチ、認証の不適切なプラクティスなどのリスクを特定します。 このクエリが安全でない理由を説明し、安全な代替手段を提供します。
const query = `SELECT * FROM Users WHERE Username = '${username}' AND Password = '${password}'`;
  • 現在のデータベースを使用して、SQL ストアド プロシージャのSalesLT.uspGetCustomerOrderHistoryインジェクション攻撃をシミュレートし、修正を提案します。

  • 現在のデータベースのストアド プロシージャ SalesLT.uspGetCustomerOrderHistory で、潜在的な SQL インジェクションの脆弱性を確認します。 パラメーター化されていない入力または不適切に検証された入力がどのように悪用されるかを説明し、セキュリティで保護されたコーディングプラクティスを推奨します。

  • SalesLT.uspGetCustomerOrderHistory_Insecure ストアド プロシージャを確認します。 実装内の潜在的なセキュリティの問題を特定し、セキュリティのベスト プラクティスを明示的に一覧表示せずに、これらの問題に対処するストアド プロシージャの改訂版を提供します。

次の T-SQL を使用してストアド プロシージャを作成できます。

CREATE OR ALTER PROCEDURE [SalesLT].[uspGetCustomerOrderHistory_Insecure]
@CustomerID NVARCHAR (50)
AS
BEGIN
    DECLARE @SQL AS NVARCHAR (MAX) = N'SELECT *
    FROM SalesLT.SalesOrderHeader
    WHERE CustomerID = ' + @CustomerID + ';';
    EXECUTE (@SQL);
END
GO

一般的なセキュリティに関する推奨事項

SQL インジェクション以外にも、多くのデータベース アプリケーションは機密データを公開するか、既定で安全でない構成を使用します。 GitHub Copilot では、接続の暗号化、個人データのマスクまたは保護、複数の開発スタックにわたるセキュリティで保護された認証と承認のベスト プラクティスとの連携に関するガイダンスが提供されます。

  • 機密データを SalesLT.Address テーブルに格納するためのセキュリティで保護された方法をお勧めします。

  • SalesLT.Customer テーブル内の個人データをマスクするためのデータベースの最適な戦略または組み込み機能は何ですか?

  • 暗号化を適用し、資格情報の公開を回避するために、 Entity Framework Core で接続文字列を構成するにはどうすればよいですか?

  • Prismaまたは Node.js 環境では、パスワードを格納する代わりに、SQL Serverで Microsoft Entra ID 認証またはマネージド ID を安全に使用するにはどうすればよいですか?

  • 続編や EF Core などの ORM を使用する場合、顧客データを保護するために、どのような SQL Server オプション ( Always EncryptedTransparent Data Encryptionなど) を有効または確認する必要がありますか?

フィードバック: セキュリティアナライザー

MSSQL 拡張機能の GitHub Copilot を改良および改善するために、次の GitHub 問題テンプレートを使用してフィードバックを送信します。 GitHub Copilot フィードバック

フィードバックを送信する場合は、次の内容を検討してください。

  • テスト済みのシナリオ – スキーマの作成、クエリの生成、セキュリティ、ローカライズなど、どの領域に重点を置いたかをお知らせください。

  • うまくいったこと - スムーズで役に立ち、期待を超えた経験について説明します。

  • 問題またはバグ – 問題、不整合、または混乱を招く動作を含めます。 スクリーンショットや画面の記録は特に役立ちます。

  • 改善の提案 – 使いやすさの向上、カバレッジの拡大、GitHub Copilot の応答の強化に関するアイデアを共有します。