データベース管理者(DBA)向けセットアップ
適用面: SDK またはゲートウェイ 対応モード: Hosted Hybrid Local プラン: Free Solo Teams
対象読者
データベースを管理する方が対象です。AI エージェントにデータベースツールが与えられたとき、必要なものは読み取れても、それ以上はできないようにするのが役割です。黙って実行される UPDATE も、DROP も、権限変更も許しません。
通常統制したい対象
- 読み取りは許可。
SELECT、EXPLAIN、SHOW、DESCRIBE、CTE。 - 書き込みは不可(または承認がある場合のみ)。
INSERT/UPDATE/DELETE/MERGE。 - スキーマと権限付与は常に不可。
DROP、ALTER、GRANT、TRUNCATE。
Control Zero は、SQL の方言にかかわらず、クエリを正規のセマンティッククラス(database:read、database:write、database:admin のいずれか)に分類するため、1つのルールであらゆる書き方をカバーできます。SELECT 1; DROP TABLE x のように複数のステートメントを便乗させたクエリは database:admin に解決されるため、admin を拒否するルールがあれば、公開済みのすべてのバージョンで捕捉できます。allow のみの構成(明示的な deny ルールなし)には controlzero 1.13.13+ が必要です。それより前のバージョンでは、引数から導出したクラスが参照される前に、呼び出し側が指定した method が allow ルールを満たしてしまうことがありました。
インストールする適用面
エージェントが自分で管理しているコードであれば SDK を使い、クエリの前に guard() を呼び出します。エージェントが編集できない API 経由でデータベースにアクセスする場合は、その前段にゲートウェイを置きます 。
pip install controlzero
スターターポリシー
読み取り専用のデータベースアクセスです。読み取りは通し、それ以外はすべて拒否します。これを controlzero.yaml に置いてください。
version: '1'
settings:
default_action: deny
default_on_missing: deny
default_on_tamper: quarantine
rules:
- id: allow-db-read
allow: 'database:read'
reason: 'SELECT / EXPLAIN / SHOW / DESCRIBE / CTE are permitted via the canonical read class.'
- id: deny-db-write
deny: 'database:write'
reason: 'No data modification: INSERT / UPDATE / DELETE / MERGE blocked.'
- id: deny-db-admin
deny: 'database:admin'
reason: 'No schema or permission changes: DROP / ALTER / GRANT / TRUNCATE blocked.'
SDK は渡された SQL からクラスを導き出すため、ルールは1回書くだけで済みます。
from controlzero import Client
cz = Client(policy_file="./controlzero.yaml")
read = cz.guard("database", method="SELECT", args={"sql": "SELECT id FROM orders"})
print(read.decision) # "allow"
drop = cz.guard("database", method="DROP", args={"sql": "DROP TABLE orders"})
print(drop.decision) # "deny"
cz.close()
人間が承認した後にのみ書き込みを許可したい場合は、最初の承認フローを参照してください。承認は BETA で、デフォルトではオフです。リクエストの経路は、ホスト型(SaaS)プランを含むすべてのデプロイメントで動作しますが、承認者向けの受信トレイにはまだアクセスできません。未解決の書き込みリクエストは期限まで待機したうえで拒否のままとなり、書き込みは行われません。
確認できる内容
- 各クエリの判定が監査ログに、
database:read/write/adminに分類された状態で、一致したルール、理由、イベントごとのカ バレッジとともに記録されます。 - 拒否された書き込みや drop には
decision: denyと、それを止めたルールが表示されます。そのため、たまたま何も見つからなかった結果ではなく、クエリが実行されなかったという記録が残ります。
次のステップ
- 読み取り専用データベース -- ブロック/許可の完全な表を含む、標準的なレシピです。
- 正規ツール名 -- SQL がセマンティッククラスにどう対応付けられるかを説明します。
- 最初の承認フロー BETA -- 書き込みに承認を必須にします。
- 監視のみのセットアップ -- ブロックを始める前に、すべてのクエリを確認します。