데이터베이스

프로젝트가 이미 설정해 둔 데이터베이스를 Agentty에서 보고, 에이전트가 조회하게 하되 쓰기는 승인 뒤에만 실행되게 하기.

Agentty는 프로젝트가 설정해 둔 데이터베이스를 찾아 터미널 옆 페이지에 보여주고, 에이전트가 조회할 수 있게 합니다. 읽기는 즉시 실행되고, 데이터를 바꿀 수 있는 것은 이용자가 Execute를 누를 때까지 기다립니다.

연결을 찾는 방법#

Agentty는 프로젝트 자신의 설정을 읽습니다. 프로젝트에 무언가를 기록하지 않습니다.

출처읽는 내용
.env 파일연결 URL과 host·user·password·database 변수
Springapplication.properties, application-<프로파일>.yml
Prismadatasource 블록
ComposeMySQL, MariaDB, PostgreSQL, MongoDB, Oracle 이미지를 쓰는 서비스

${VAR}, ${VAR:기본값}, env("VAR"), $VAR 같은 참조는 프로젝트의 .env 파일에서 해석합니다. 시크릿 매니저나 다른 곳에서 설정한 환경 변수처럼 값이 끝내 참조로 남으면, 그 항목은 비어 있는 것으로 표시되고 이용자가 한 번 입력하면 됩니다.

지원 엔진은 MySQL, MariaDB, PostgreSQL, MongoDB, Oracle입니다. Oracle은 Oracle Instant Client가 추가로 설치되어 있어야 합니다.

빠진 값 채우기#

  • 데이터베이스 페이지의 비밀번호 입력은 값을 파일이 아니라 운영체제의 자격 증명 저장소에 저장합니다. 연결 id는 프로젝트와 주소로부터 만들어지므로, 설정 파일이 바뀌어도 비밀번호가 그 연결을 따라갑니다.
  • 추가는 연결을 직접 정의합니다(엔진, 호스트, 포트, 데이터베이스, 사용자, 비밀번호). 소유자만 읽을 수 있는 권한으로 ~/.agentty/db-connections.json에 저장되며 비밀번호는 제외됩니다.

에이전트가 실행할 수 있는 것과 없는 것#

데이터베이스를 에이전트에게 맡길 수 있는 이유가 여기 있으므로, 이 부분은 알아 둘 가치가 있습니다.

모든 문장은 실행 전에 분류됩니다.

  • 읽기SELECT, SHOW, DESCRIBE, EXPLAIN, WITH … SELECT, VALUES, TABLE로 시작하는 단일 문장이며 쓰기 키워드를 포함하지 않는 경우 — 는 즉시 실행되고 결과 행을 보여줍니다.
  • 그 외에는 전부 승인 대기열로 갑니다. 누가 요청했는지, 어떤 연결인지, 어떤 종류의 문장인지, 그리고 정확한 원문이 페이지에 표시됩니다. Execute를 눌러야 실행되며, 에이전트의 명령은 최대 15분간 답을 기다립니다.

분류기는 의도적으로 의심이 많습니다. 여러 문장을 한 번에 보내는 경우, 실행 가능한 주석, 달러 인용, 닫히지 않은 따옴표, 그리고 계산만 하는 알려진 내장 함수(COUNT, COALESCE, DATE_FORMAT 등)가 아닌 호출은 모두 승인을 요구합니다. 저장 함수나 확장은 읽기 전용 트랜잭션 안에서도 쓰기를 할 수 있으므로 자동 승인되지 않습니다.

MongoDB에서는 find, count, distinct, listCollections와 알려진 읽기 스테이지로만 구성된 애그리게이션이 읽기로 취급됩니다. $out, $merge, 알 수 없는 스테이지는 승인이 필요합니다.

두 번째 방어선#

읽기조차 롤백되는 읽기 전용 트랜잭션 안에서 실행됩니다(START TRANSACTION READ ONLY, BEGIN READ ONLY, SET TRANSACTION READ ONLY). 분류기가 혹시 잘못 판단하더라도 데이터베이스 자체가 쓰기를 거부합니다.

결과에는 상한이 있습니다. 페이지에서 200행, 에이전트에게는 500행, 셀은 4000자에서 잘립니다. 실수로 던진 SELECT *가 페인을 뒤덮지 않습니다.

연결과 TLS#

localhost, 127.0.0.1, ::1이거나 설정이 명시적으로 끈 경우(sslmode=disable, useSSL=false)에는 TLS를 쓰지 않습니다. 그 외에는 TLS가 필수이며, 시스템 루트 인증서와 내장된 Amazon RDS 인증서 번들로 검증하므로 RDS 엔드포인트도 별도 설정 없이 동작합니다. 호스트에는 인스턴스 엔드포인트를 적으면 됩니다.

비밀번호는 응답에도, 페이지에도, 로그에도 나타나지 않습니다. 연결 오류는 호스트·사용자·데이터베이스만 표시합니다.

사용하기#

데이터베이스 칩과 페이지는 Docker 패널과 마찬가지로 활성 페인의 워크트리를 따라갑니다. 페이지의 질의 상자에서 실행하든 에이전트가 agentty db로 실행하든, 동일한 분류와 승인 경로를 거칩니다.