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
スキーマのPython
でSalesLT
を使用しています。 次のSQLAlchemy
クエリで、SQL
インジェクション、過剰フェッチ、パフォーマンスの問題など、潜在的なセキュリティ リスクを確認します。 必要に応じて、パフォーマンスとセキュリティを確保するために、パラメーター化されたクエリ、接続プール、その他のセキュリティで保護されたSQL Server
プラクティスを使用して改善を提案します。
query = f"SELECT * FROM SalesLT.Customer WHERE LastName = '{user_input}'"
result = engine.execute(query).fetchall()
- 潜在的なセキュリティの脆弱性について、次の
JavaScript
SQL
クエリを分析します。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 Encrypted
、Transparent Data Encryption
など) を有効または確認する必要がありますか?
フィードバック: セキュリティアナライザー
MSSQL 拡張機能の GitHub Copilot を改良および改善するために、次の GitHub 問題テンプレートを使用してフィードバックを送信します。 GitHub Copilot フィードバック
フィードバックを送信する場合は、次の内容を検討してください。
テスト済みのシナリオ – スキーマの作成、クエリの生成、セキュリティ、ローカライズなど、どの領域に重点を置いたかをお知らせください。
うまくいったこと - スムーズで役に立ち、期待を超えた経験について説明します。
問題またはバグ – 問題、不整合、または混乱を招く動作を含めます。 スクリーンショットや画面の記録は特に役立ちます。
改善の提案 – 使いやすさの向上、カバレッジの拡大、GitHub Copilot の応答の強化に関するアイデアを共有します。
関連コンテンツ
- Visual Studio Code 用 MSSQL 拡張機能の GitHub Copilot
- クイック スタート: チャットとインライン GitHub Copilot の提案を使用する (プレビュー)
- クイック スタート: コードの生成 (プレビュー)
- クイック スタート: スキーマ エクスプローラーとデザイナーを使用する (プレビュー)
- クイック スタート: スマート クエリ ビルダーを使用する (プレビュー)
- クイック スタート: クエリ オプティマイザー アシスタント (プレビュー)
- クイックスタート: ビジネス ロジック説明ツールを使用する (プレビュー)
- クイック スタート: ローカライズと書式設定ヘルパー (プレビュー)
- クイック スタート: テストとモック作成のためにデータを生成する (プレビュー)
- 制限事項と既知の問題