データベース

プロジェクトがすでに設定しているデータベースを Agentty から見て、エージェントに問い合わせさせつつ、書き込みは承認の後だけに。

Agentty はプロジェクトが設定しているデータベースを見つけ、ターミナルの横のページに表示し、エージェントが問い合わせられるようにします。読み取りはすぐ実行され、データを変えうるものは利用者が Execute を押すまで待ちます。

接続の見つけ方#

Agentty はプロジェクト自身の設定を読みます。プロジェクトに何かを書き込むことはありません。

取得元読む内容
.env ファイル接続 URL と host・user・password・database の変数
Springapplication.propertiesapplication-<プロファイル>.yml
Prismadatasource ブロック
ComposeMySQL、MariaDB、PostgreSQL、MongoDB、Oracle のイメージを使うサービス

${VAR}${VAR:既定値}env("VAR")$VAR といった参照はプロジェクトの .env から解決します。シークレットマネージャーや別の場所で設定された環境変数のように、値が参照のまま残る場合、その項目は未入力として表示され、一度だけ入力すれば済みます。

対応エンジンは MySQL、MariaDB、PostgreSQL、MongoDB、Oracle です。Oracle は別途 Oracle Instant Client が必要です。

足りない値を埋める#

  • データベースページのパスワードを入力は、値をファイルではなく OS の資格情報ストアに保存します。接続 id はプロジェクトとアドレスから作られるため、設定ファイルが変わってもパスワードはその接続に付いていきます。
  • 追加は接続を手で定義します(エンジン、ホスト、ポート、データベース、ユーザー、パスワード)。所有者だけが読める権限で ~/.agentty/db-connections.json に保存され、パスワードは含まれません。

エージェントが実行できるもの、できないもの#

データベースをエージェントに任せられる理由がここにあるので、知っておく価値があります。

すべての文は実行前に分類されます。

  • 読み取りSELECTSHOWDESCRIBEEXPLAINWITH … SELECTVALUESTABLE で始まる単一の文で、書き込みのキーワードを含まないもの — はすぐ実行され、結果の行を表示します。
  • それ以外はすべて承認待ちに入ります。 誰が求めたか、どの接続か、どの種類の文か、そして正確な原文がページに表示されます。Execute を押して初めて実行され、エージェントのコマンドは最大 15 分その答えを待ちます。

分類器は意図的に疑い深く作られています。複数の文をまとめて送る、実行可能なコメント、ドル引用、閉じていない引用符、そして計算だけを行う既知の組み込み関数(COUNTCOALESCEDATE_FORMAT など)以外の呼び出しは、いずれも承認を要します。ストアド関数や拡張は読み取り専用トランザクションの中でも書き込みうるため、自動承認されません。

MongoDB では findcountdistinctlistCollections と、既知の読み取りステージだけで構成された集計が読み取り扱いです。$out$merge、未知のステージは承認が必要です。

二段目の防御#

読み取りでさえ、ロールバックされる読み取り専用トランザクションの中で実行されます(START TRANSACTION READ ONLYBEGIN READ ONLYSET TRANSACTION READ ONLY)。分類器が万一取り違えても、データベース自身が書き込みを拒みます。

結果には上限があります。ページで 200 行、エージェントには 500 行、セルは 4000 文字で切られます。うっかりの SELECT * がペインを埋め尽くすことはありません。

接続と TLS#

localhost127.0.0.1::1 の場合、あるいは設定が明示的に無効にしている場合(sslmode=disableuseSSL=false)は TLS を使いません。それ以外では TLS が必須で、システムのルート証明書に加えて同梱の Amazon RDS 証明書バンドルで検証するため、RDS のエンドポイントも追加設定なしで動きます。ホストにはインスタンスのエンドポイントを指定してください。

パスワードは応答にも、ページにも、ログにも現れません。接続エラーはホスト・ユーザー・データベースだけを示します。

使い方#

データベースのチップとページは、Docker パネルと同じくアクティブなペインのワークツリーに追随します。ページの入力欄で実行しても、エージェントが agentty db で実行しても、同じ分類と承認の経路を通ります。