エージェントにデータベースをクエリさせる、
あなたが許すまでは読み取り専用で
AgentsRoomはMySQLとMariaDBの接続を管理し、AIコーディングエージェントがそこにクエリを実行する手段を提供します。デフォルトは読み取り専用、一度に1文、パスワードは手の届かないところに置かれます。
本物の行を読めるエージェントは、データについて推測しなくなります。そこに書き込めないエージェントは、一行ずつ監視すべきリスクではなくなります。
AgentsRoomがプライベートサブネット内のデータベースに到達し、AIエージェントの読み取り専用クエリに答える仕組み。
データが見えないAIコーディングエージェントは、自分が想像したスキーマを相手にコードを書きます。存在しないカラムを作り出し、7つの値を持つenumを3つだと決めつけ、バグを行ではなく仮説で説明します。データベース接続を与えればそれは解消しますが、同時に、頼れるエージェントをインシデントに変える最短経路でもあります。AgentsRoomはその緊張関係を軸に作られています。
MySQLとMariaDBの接続は、どのSQLクライアントでもそうするようにアプリへ保存します:ホスト、ポート、ユーザー、データベース、そしてサーバーが求めるならTLS。データベースがインターネットから到達できない場所にあるなら、接続はSSHトンネルかAWS SSMのポートフォワーディングセッション経由でルーティングされます。使うのは、すでにAgentsRoomに保存してあるSSHとSSMの接続です。こうしてプライベートサブネットにあるデータベースが、外部に開かないままクエリできる相手になります。
どの接続も読み取り専用から始まります。SELECTは実行されます。データを変更する文は実行されません。その接続を書き込み可能にし、操作を確認するまでは。1回の呼び出しで受け付ける文は1つだけなので、セミコロンの陰に余計なものが隠れることはなく、結果セットには上限があるため、幅の広いクエリがエージェントやウィンドウを溢れさせることもありません。接続には本番のフラグを立てることもでき、その場合は確認がうっかり通らないよう厳しくなります。
エージェントが操作する前提で作られたSQLクライアント
MySQLとMariaDB、プライベートネットワークでも到達可能、ガードレールは最初からオン。
MySQLとMariaDBの接続
データベースごとに接続を保存します:ホスト、ポート、ユーザー、開くデータベース、そしてサーバーが要求するならTLS。ローカルのデータベースも、ステージングも、本番のレプリカも同じリストに並び、打ち直すのではなく選ぶだけになります。
プライベートなデータベースに到達する
プライベートサブネットにあるデータベースは例外扱いではありません。接続をSSHトンネルまたはAWS SSMのポートフォワーディングセッション経由にすれば、すでにアプリに保存してあるSSHとSSMの接続を再利用して、AgentsRoomが開いてくれます。
デフォルトで読み取り専用
新しい接続にできるのは読むことだけです。クエリは行を返し、データを変える文は拒否されます。安全モードにするのを誰かが覚えておく必要はありません。すべての接続がその安全モードから始まるからです。
書き込みの前に2つの鍵
書き込みには1つではなく2つの意識的な行為が必要です。接続を書き込み可能にすること、そして操作そのものを明示的に確認すること。うっかりしたクリック1回が、WHERE句のないUPDATEまで連鎖することはありません。
1回の呼び出しにつき1文
各呼び出しが運ぶのはちょうど1文です。セミコロンの後ろに積まれたものは実行されずに拒否されるため、読み取りに見えるものが2つ目の文を忍ばせることはできません。さらに結果セットにも上限があります。
本番にはフラグが立つ
接続を本番としてマークすると、確認が厳しくなります。大事なデータベースが、ローカルのコピーとまったく同じ顔をしなくなります。長い一日の終わりのあなたに対しても、タスクリストを消化していくエージェントに対しても。
エージェントはデータベースにクエリしますが、パスワードは持ちません
データベースの認証情報はAgentsRoomが保持し、外へ渡すことはありません。エージェントは名前で知っている接続に対してクエリの実行を依頼し、アプリが接続を開き、文を実行して行を返します。パスワードはエージェントが受け取るものにも、エージェントが書くクエリにも、保持する会話にも一切含まれません。
読み取り専用のルールがその後半であり、エージェントにとっては口先で抜け出せるデフォルトではありません。エージェントがクエリに使うツールは、その接続が何を許していようと読み取り以外を拒否します。接続を書き込み可能にすると、書き込みが解禁されるのはあなたに対してだけで、場所はSQLコンソールです。そこでは書き込みのたびに明示的な確認が求められ、接続に本番のフラグが立っていれば、その確認は意図的に厳しくなります。エージェントがまずいクエリを実行しても、最悪の結末はテーブルの消失ではなく誤った答えのままです。
1文だけというルールが、古典的な穴を塞ぎます。1文を運ぶ呼び出しはセミコロンと2文目で拡張できないので、レビューでは無害に読めるクエリが実行時に別のことをすることはありません。上限付きの結果セットと組み合わせれば、ミスはミスのまま留まり、データの持ち出しには育ちません。
今日対応しているのはMySQLとMariaDB、それだけです
AgentsRoomのデータベースクライアントはMySQLのワイヤプロトコルを話し、MariaDBはそれと互換なので、現時点ではその両方に対応しています:直接でも、サーバーがインターネットから到達できない場合はSSHトンネルやAWS SSMのポートフォワーディングセッション経由でも。
PostgreSQL、MongoDB、SQL Server、SQLite、その他のエンジンには対応していません。それはダウンロードした後ではなく、前に知るべきことです。次にどのエンジンが来るかは寄せられた要望で決まるので、あなたのエンジンが足りないなら、公開バックログでどれかを伝えてください。票として数えられます。
使いたいデータベースエンジンをリクエストするプライベートなデータベースから答えまで
接続を保存し、経路を通し、自分でクエリするかエージェントに任せます。
接続を保存する
データベースを追加します:ホスト、ポート、ユーザー、データベース名、そしてサーバーが求めるならTLS。あとで見て分かる名前を付け、本番ならそのフラグを立てます。
プライベートなら経路を通す
データベースに直接到達できない場合は、AgentsRoomにすでに保存してある接続から組み立てたSSHトンネルやAWS SSMのポートフォワーディングセッションへ接続を向けます。プライベートサブネットのデータベースが、外部に公開しないまま到達可能になります。
自分でクエリするか、エージェントに任せる
アプリから文を実行するか、エージェントにMCP経由で実行させます。変更するまでは読み取り専用、1回の呼び出しにつき1文、結果セットには上限があり、あらゆる書き込みとあなたのデータの間には明示的な確認が立ちます。
エージェントに本物の行が必要なとき
本番データを読むことが、修正までの最短経路になる場面。
本物のデータでデバッグする
バグが出るのは一握りのアカウントだけ。エージェントにその行を読ませれば、データがどうなっているかについて3つの仮説を並べる代わりに、ロジックを壊している値を見つけます。
公開されていないデータベース
データベースはパブリックなエンドポイントを持たないプライベートサブネットにあります。保存済みの接続を元にしたSSHトンネルやAWS SSMセッション経由でルーティングすれば、インターネットにポートを開けずにクエリできます。
エージェントに推測ではなく確認させる
マイグレーションやクエリを書く前に、エージェントは実際に保存されている内容を見られます。読んで、報告して、その間に何かを変える権限を得ることは決してありません。
書き込みリスクのない本番
本番を読むことはしばしば必要ですが、タスクの途中で本番に書き込むことはほとんどありません。接続に本番のフラグを立てて読み取り専用のままにすれば、調査と破壊の違いが誰かの注意力に左右されなくなります。
エージェントはどうやってデータベースにクエリするのですか?
AgentsRoom MCPを通じて、4つのツールで行います。db_listは保存済みの接続とそのメタデータを返し、db_schemaはSQLを一行も書かずにスキーマ、テーブル、カラムをたどり、db_queryは1文を実行して行を返し、db_connection_newはまだ保存していないデータベースを提案します。接続を開くのはAgentsRoomで、手前にSSHトンネルやAWS SSMセッションがあればそれも含めて開きます。エージェントに返るのは結果セットであり、認証情報ではありません。
db_queryは、接続が何を許していようと読み取り専用です。接続を書き込み可能にすると、書き込みが解禁されるのはあなたに対してだけで、場所はSQLコンソールです。そこでは書き込みのたびに明示的な確認が求められ、本番のフラグが立った接続はそのことをはっきり告げます。エージェントに対しては解禁されません:db_queryの読み取り専用ルールはMCPプロセスではなくデスクトップアプリ側にあるので、エージェントが言いくるめられて別のことを求めても、そのルールは揺らぎません。DROPを実行するのにパスワードは要りません。だからこそガードレールは、認証情報だけでなく文そのものに置かれています。
同じ制限はデータベースの登録にも当てはまります。db_connection_newが開くのは、ホスト、ユーザー、そして到達に使うべきSSHまたはAWS SSMの接続であらかじめ埋めた作成フォームだけで、それを確認し、パスワードを入力し、保存するのはあなたです。あなたが保存するまで何も保管されません。エージェントはあなたのデータについて考えるために必要なものを得ますが、そのアクセスが普通はインシデントに変わってしまう経路は、どれも使えません。
AgentsRoom MCPを見るよくある質問
どのデータベースに対応していますか?
MySQLとMariaDB、その2つだけです。クライアントはMySQLのワイヤプロトコルを話し、MariaDBはそれと互換なので、どちらも動きます。直接でも、SSHトンネルやAWS SSMのポートフォワーディングセッション経由でも。PostgreSQL、MongoDB、SQL Server、SQLiteなどには今日は対応していません。そのどれかが必要なら、公開バックログでリクエストしてください:このリストは実際に寄せられた要望で伸びていきます。
AIエージェントは私のデータベースに書き込めますか?
書き込めません。エージェントがクエリに使うMCPツールdb_queryは、接続が何を許していようと読み取り専用です:SELECT、SHOW、DESCRIBE、EXPLAIN、WITHは通り、データを変えるものはすべて拒否されます。接続を書き込み可能にしても、書き込みが解禁されるのはSQLコンソールにいるあなたに対してだけで、そこでは1件ごとに明示的な確認が求められます。エージェントに対しては解禁されません。ガードレールがパスワードではなく文そのものに置かれているのは、DROPを実行するのに必要なものがパスワードではないからです。
プライベートサブネット内のデータベースにはどう到達しますか?
すでにAgentsRoomに保存してあるSSHとSSMの接続から組み立てた、SSHトンネルまたはAWS SSMのポートフォワーディングセッション経由で接続をルーティングします。アプリがトンネルやセッションを開き、その先にデータベースをつなぐので、データベースはパブリックなインターネットから到達できないままです。
エージェントにデータベースのパスワードは見えますか?
見えません。エージェントは接続を名前で指定してMCP経由でクエリします。認証情報を保持し文を実行するのはAgentsRoom自身なので、パスワードがエージェントに返ることも、クエリに書き込まれることも、会話に含まれることもありません。
エージェントは一度に複数の文を実行できますか?
できません。1回の呼び出しが運ぶのはちょうど1文です。セミコロンの後ろに積まれたものは実行されずに拒否されるので、読み取りに見えるものの中に書き込みを隠すという最も古い手口が使えなくなります。
接続に本番のフラグを立てると何が変わりますか?
書き込みの前に求められる確認が厳しくなります。大事なデータベースが、ローカルのコピーと同じようには振る舞わなくなります。長い一日の終わりに欲しいことであり、タスクリストを消化していくエージェントに対してはなおさら欲しいことです。
大量の行を返すクエリはどうなりますか?
結果セットには上限があります。巨大なテーブルを返すはずのクエリは、ウィンドウやエージェントのコンテキストを溢れさせる代わりに切り詰められて返るので、幅の広いSELECTはデータの持ち出しではなく単なる不便で済みます。
エージェントはデータベース接続を追加できますか?
提案はできますが、保存は決してできません。db_connection_newは、ホスト、ポート、ユーザー、そしてそのデータベースに到達するために通すべきSSHまたはAWS SSMの接続であらかじめ埋めた作成フォームを開きます。それを確認し、パスワードを入力し、保存するのはあなたです。あなたが保存するまで何も保管されず、認証情報をエージェントが差し出すことも決してありません。
エージェントは私のスキーマをどうやって把握しますか?
db_schemaを使います。保存済みの接続をSQLなしで探索するツールです。引数なしで呼べばスキーマを一覧し、データベースを指定すればテーブルとビューを一覧し、テーブルを指定すればカラム、その型、NULLを許すかどうか、キー、デフォルト値を返します。エージェントにinformation_schemaを手でクエリさせるより、安く、安全です。
こちらもおすすめ
AWS SSM経由のRDS
パブリックなエンドポイントを持たないAmazon RDSインスタンスに、aws ssm start-sessionとAWS-StartPortForwardingSessionToRemoteHostドキュメントを使って、自分のマシンから到達します。維持する踏み台も、VPNも、受信SSHのルールも要りません。AgentsRoomがループバックポートでセッションを開き、その先にSQLクライアントをつなぎます。対応はMySQLとMariaDBのみ、つまりRDS MySQLとAurora MySQL互換です。
SSH接続
SSH接続を保存し、内蔵のSSHターミナルを開いて、Claude Code、Codex、Antigravity CLIをリモートサーバーやVPS上で直接実行できます。SSH鍵またはパスワード認証、プロジェクトごとの接続プロファイル、別のSSHクライアントは不要です。
シークレットマネージャー
APIキー、トークン、パスワードをOSのキーチェーンに保存し、開発コマンドやエージェントの環境変数では{{secret:NAME}}として参照すれば、AgentsRoomが起動時に解決します。エージェントに見えるのは名前だけで、値が渡ることはなく、サーバーに同期されるものもありません。
開発ターミナル
プロジェクトごとのターミナルマネージャーとプロセスランチャー。バックエンド、フロントエンド、ワーカーをワンクリックで起動。ローカルでも、リモートサーバー上でも。
AgentsRoom MCP
エージェントにAgentsRoom自体を操縦させるMCPサーバー:プロジェクト、ターミナル、バックログ、接続を、付随するガードレールとともに。
エージェントに渡すのはデータ、鍵ではありません
AgentsRoomをダウンロードして、MySQLとMariaDBの接続を保存し、SSHトンネルやAWS SSMセッション経由で到達して、エージェントに読み取り専用でクエリさせましょう。
コンパニオンアプリ:外出先でもエージェントを確認
Claude、Codex、Antigravity CLI、またはその他の AI プロバイダーを使用します。
バグや要望を公開バックログに直接送信できます。
実際の AgentsRoom の様子。