すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:CLR 統合を使用して ApsaraDB RDS for SQL Server インスタンスの機能を拡張する

最終更新日:Apr 26, 2025

本文介绍如何在阿里云RDS SQL Server中部署和使用CLR集成函数,通过在RDS SQL Server中部署一个情绪偏好分析函数,用于对用户评论进行情感评分。このトピックでは、ApsaraDB RDS for SQL Server インスタンスに共通言語ランタイム (CLR) 統合関数をデプロイおよび使用する方法について説明します。 RDS インスタンスにセンチメント分析関数をデプロイして、ユーザーコメントのセンチメントスコアを提供できます。

背景情報

SQL Server のCLR 統合により、開発者は C# などの .NET Framework 用プログラミング言語を使用して、ストアドプロシージャ、トリガー、ユーザー定義関数 (UDF) などのデータベースオブジェクトをコンパイルおよび実行できます。 CLR 統合を使用すると、SQL Server は .NET を使用して、文字列とファイルの管理や正規表現の解析など、より複雑なタスクを処理できます。 これにより、開発者はより強力なツールを使用できます。 CLR 統合は、計算負荷の高いタスクや Transact-SQL (T-SQL) を使用して処理できないタスクを処理するために使用できる、柔軟で効率的なソリューションです。

制限事項

CLR 統合は、共有インスタンスタイプまたはサーバーレス RDS インスタンスを使用する RDS インスタンスではサポートされていません。

準備

RDS インスタンスの CLR を有効にする

RDS インスタンスの [パラメーター] ページに移動し、インスタンスレベルのパラメーター clr enabled を 1 に設定して CLR を有効にします。 このパラメーターのデフォルト値は 0 です。

image

図 1: clr enabled を 1 に設定する

デモプログラムを実行してセンチメント分析関数を呼び出す

このセクションでは、デモプログラムを使用してセンチメント分析関数を呼び出し、RDS インスタンスに CLR 統合をデプロイする方法について説明します。 プログラムには、単純な辞書と単語分割ロジックが含まれています。 コメントの内容が提供されると、プログラムはその内容を辞書の単語と比較して、センチメントスコアを取得します。 C# でのデモプログラムのサンプルコード:

1. CLR プログラムを作成およびコンパイルする

Visual Studio 2022 で新しいクラスライブラリプロジェクトを作成し、このトピックの「準備」内のサンプルコードをプロジェクトにコピーし、フレームワークを .NET Framework 4.7.2 以降に設定してから、プロジェクトをコンパイルして .NET Framework 4.7.2CLRFuncDemo.dll などの DLL ファイルを生成します。 生成された DLL ファイルを格納するために使用されるディレクトリ (例: E:\Backup\CLRFuncDemo.dll) が存在し、正しく指定されていることを確認します。「準備」のサンプルコードCLRFuncDemo.dllE:\Backup\CLRFuncDemo.dll

6478e23d119610e058964a53a3d90714

2. CLR アセンブリを作成し、バイナリ文字列としてエクスポートする

RDS SQL Server は DLL ファイルの直接アップロードをサポートしていないため、自己管理型 SQL Server (2016 以降のバージョン) で次のコマンドを実行して、DLL ファイルをアセンブリとして登録する必要があります。

CREATE ASSEMBLY [CLRFuncDemo]
FROM 'E:\Backup\CLRFuncDemo.dll'
WITH PERMISSION_SET = SAFE

SSMS を使用してアセンブリをバイナリ文字列としてエクスポートし、返されたバイナリ文字列をコピーして、後で RDS SQL Server で使用します。SQL Server Management Studio (SSMS) を使用してアセンブリをバイナリ文字列としてエクスポートします。 バイナリ文字列を複製して保存し、RDS インスタンスで今後使用できるようにします。

image

3. CLR アセンブリを RDS SQL Server にインポートする

3. CLR アセンブリを RDS SQL Server にインポートする

現在指定されているデータベースの DBO 権限を持つユーザーは、SSMS を使用して RDS SQL Server インスタンスに接続し、バイナリ文字列を使用して CLR アセンブリを作成できます。コマンドは以下のとおりです。The user who has the permissions of the database owner can use SSMS to connect to the RDS instance and use a binary string to create a CLR assembly. Sample statements:

-- アセンブリを作成する
CREATE ASSEMBLY [CLRFuncDemo]
FROM 0x4D5A9000... -- 実際のバイナリ文字列に置き換えます
WITH PERMISSION_SET = SAFE;

-- CLR 関数を作成する
CREATE FUNCTION dbo.AnalyzeSentiment(@text NVARCHAR(MAX))
RETURNS FLOAT
AS EXTERNAL NAME CLRFuncDemo.[SentimentAnalysis].AnalyzeSentiment;

image

次の図は、アセンブリがインポートされ、CLR 関数が作成されたことを示しています。

image

4. CLR 関数をテストする

このセクションでは、テーブルを使用して CLR 関数の可用性を確認する方法について説明します。 次のコードは、テーブルのサンプルデータを提供します。

次の図は、関数が期待どおりに動作することを示しています。 ユーザーはコメントのキーワードを抽出して、テスト対象のサービスがユーザーの要件を満たしているかどうかを判断できます。

image.avif

潜在的なセキュリティ問題

RDS インスタンスで CLRFuncDemo CLR アセンブリを作成または変更すると、次のエラーが報告される場合があります。

Msg 10343, Level 14, State 1, Line 4
CREATE or ALTER ASSEMBLY for assembly 'CLRFuncDemo' with the SAFE or EXTERNAL_ACCESS option failed because the 'clr strict security' option of sp_configure is set to 1. Microsoft recommends that you sign the assembly with a certificate or asymmetric key that has a corresponding login with UNSAFE ASSEMBLY permission. Alternatively, you can trust the assembly using sp_add_trusted_assembly.

SQL Server 2017 以降、Microsoft は clr strict security オプションを導入し、そのデフォルト値を 1 に設定して、CLR 統合のセキュリティを強化しています。 これにより、SAFE または EXTERNAL_ACCESS のセキュリティレベルで署名付きアセンブリのみがロードされるようになります。

次のいずれかの方法を使用して、エラーを解決できます。

方法 1: アセンブリに署名し、必要な権限を付与する

署名は、SQL Server が発行者の ID を検証し、最小権限の原則 (PoLP) に基づいて権限を付与して、CLR セキュリティを確保するのに役立ちます。 この方法は複雑ですが、Microsoft によって推奨されています。 詳細については、「SQL Quantum Leap」をご参照ください。

方法 2: sp_add_trusted_assembly を使用してアセンブリを信頼する

sp_add_trusted_assembly を使用すると、署名のためにアセンブリを変更することなく、信頼できるアセンブリのリストにアセンブリを個別に追加できます。 この方法は複雑であり、システム管理者権限が必要です。 方法 1 と方法 2 のどちらかを選択する場合は、方法 1 を使用することをお勧めします。

方法 3: clr strict security オプションを無効にする

SQL Server は、インスタンスへのアクセスが許可されていない PaaS サービスです。 デフォルトの方法を使用して clr strict security オプションを直接無効にすることはできません。 この場合、RDS インスタンスのシステム管理者アカウントを使用してオプションを無効にすることができます。

警告

clr strict security オプションが無効になっている場合、すべての CLR アセンブリを実行するにはより高い権限が必要になり、セキュリティリスクが生じる可能性があります。

  1. ApsaraDB RDS コンソールで システム管理者アカウントを作成します。

    重要

    システム管理者アカウントの権限は、SQL Server の組み込み sysadmin グループの権限と同等です。 RDS インスタンスのシステム管理者アカウントを作成した場合、RDS インスタンスのサービスレベルアグリーメント (SLA) は保証されず、システム管理者アカウントを無効にすることはできません。 詳細については、「ApsaraDB RDS サービスレベルアグリーメント」をご参照ください。

    image

  2. システム管理者アカウントとして次のステートメントを実行して、clr strict security オプションを無効にします。

    EXEC sp_configure 'show advanced options', 1;
    RECONFIGURE;
    
    EXEC sp_configure 'clr strict security', 0;
    RECONFIGURE;

オプションを無効にすると、CLR アセンブリが作成されます。

まとめ

CLR 統合は、SQL Server の強力な拡張機能を提供し、開発者は .NET Framework のさまざまな機能を使用して複雑なデータベースタスクを処理できます。 このトピックでは、RDS インスタンスに CLR 統合をデプロイおよび使用する方法について説明し、例を示します。

CLR 統合は SQL Server のユースケースを強化し、T-SQL では管理できないタスクを処理できるようにします。

  • 複雑な文字列: CLR 統合を使用すると、複雑なテキストを処理できます。 たとえば、.NET の正規表現ライブラリを使用して、医療記録テキストを解析し、データをクレンジングできます。

  • 高パフォーマンスコンピューティング: CLR 統合は、高いコンパイルパフォーマンスを提供します。 たとえば、金融分野のオプション価格設定など、複雑な数学的演算を処理できます。

  • ファイル操作とネットワーク操作: CLR 統合は、システム間のデータ交換をサポートします。 たとえば、物流業界でドキュメントの自動処理を有効にすることができます。

  • カスタムの暗号化と復号: CLR 統合は、機密データのセキュリティを確保します。 たとえば、CLR 統合は、銀行業界向けにエンドツーエンドの暗号化ソリューションを提供します。

  • 画像処理: CLR 統合は、マルチメディアデータ処理機能を提供します。 たとえば、小売業界で製品画像を分析し、製品の品質をテストできます。

  • 機械学習 (ML) 統合: CLR 統合は、e コマースプラットフォームでのリアルタイムの製品レコメンデーションなどのインテリジェントな分析機能を提供します。

  • 複雑なビジネスロジック: CLR 統合は、クレジットカードの限度額の評価など、多次元意思決定シナリオに適しています。

アプリケーションではなくデータベースで CLR 統合を使用すると、次の利点があります。

  • パフォーマンス: データベースを直接操作することで、データ転送のオーバーヘッドを削減し、高い処理効率を実現できます。

  • セキュリティ: 機密データはデータベース内で処理されるため、リスクを効果的に軽減できます。

  • メンテナンス: ビジネスロジックの一元化されたストレージにより、一元管理とバージョン管理が容易になります。 さらに、複数のアプリケーションシステムがビジネスルールを共有できるため、効率と一貫性が向上します。

ほとんどの場合、T-SQL とアプリケーション層を使用して機能を実装します。 T-SQL は、データクエリ、処理、および基盤となるビジネスロジックに適しています。 アプリケーション層は、複雑なインタラクションとワークフローに適しています。 CLR は、T-SQL とアプリケーション層の補足オプションです。 ワークロードに複雑な文字列処理、高パフォーマンスコンピューティング、または外部システム統合などの操作が含まれる場合、CLR を補足ソリューションとして使用できます。 これは、T-SQL が実装に失敗し、アプリケーション層のパフォーマンス、デプロイ、およびセキュリティに制限が課せられている場合に適用されます。