> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cloudthinker.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Supabase

> Kết nối Supabase bằng OAuth để CloudThinker review project, schema, migration và log, đồng thời chạy thay đổi qua phê duyệt

Kết nối Supabase để agent CloudThinker review project, bảng, migration, branch, log và performance advisor, cũng như chạy SQL, áp dụng migration và triển khai Edge Function qua [Approvals](https://docs.cloudthinker.io/vi/guide/approvals/overview.md) của bạn. Supabase kết nối bằng **OAuth** qua MCP server do Supabase host (MCP là giao thức agent dùng để gọi công cụ của một dịch vụ), nên bạn không cần tạo hay dán access token.

> [!WARNING]
>
> Kết nối truy cập được project production, và chế độ chỉ đọc của Supabase không khả dụng trên kết nối này. Với Approval mode mặc định, AI có thể tự phê duyệt một migration, một lần triển khai Edge Function hoặc việc tạm dừng project. Hãy chọn **Manual** trước khi kết nối một organization có project production, để mọi thao tác ghi đều chờ một người duyệt. Khi CloudThinker bật [Rule enforcement](https://docs.cloudthinker.io/vi/guide/approvals/rules.md#khắc-phục-sự-cố) cho workspace của bạn, [Rule Ask first hoặc Deny](#quyền-ghi) sẽ bổ sung thêm một lớp kiểm soát.

***

## Điều kiện tiên quyết

* Một tài khoản Supabase xem được organization và các project bạn muốn điều tra.
* Vai trò **Admin** trong workspace CloudThinker, cần để thêm kết nối. Xem [Vai trò](https://docs.cloudthinker.io/vi/guide/security/roles.md).

***

## Thiết lập

**1. Mở kết nối Supabase**

Trong CloudThinker, nhấn **More → Workspace settings → Connections** trên thanh bên. Trên tab **Builtin Connections**, tìm **Supabase** và nhấn **Connect**.

**2. Cấp quyền cho CloudThinker trong Supabase**

CloudThinker mở Supabase trong cửa sổ mới. Đăng nhập bằng tài khoản Supabase có quyền truy cập project của bạn, rồi chấp thuận quyền truy cập.

> [!NOTE]
>
> Nếu Supabase yêu cầu chọn organization, kết nối chỉ bao gồm project của organization đó. Chọn organization sở hữu các project bạn muốn agent truy cập. Nếu chọn sai, về sau agent sẽ không tìm thấy project.

Nếu cửa sổ không mở, trình duyệt đã chặn pop-up. Khi đó CloudThinker hiển thị một hộp thoại: nhấn **Open Supabase** trong hộp thoại.

**3. Quay lại CloudThinker**

Chuyển về tab CloudThinker. Nếu bạn dùng hộp thoại **Open Supabase**, hộp thoại tự đóng khi kết nối sẵn sàng.

**Trạng thái thành công:** Supabase hiển thị trạng thái **Connected**.

**4. Chạy prompt xác minh**

Chạy [prompt xác minh](#xác-minh-kết-nối) để xác nhận tài khoản đã cấp quyền thấy đúng các project bạn mong đợi.

**Trạng thái thành công:** CloudThinker liệt kê các project của bạn, rồi các bảng và migration mới nhất của project bạn đã nêu.

***

## Chi tiết kết nối

Supabase không có trường nào cần điền. Supabase cấp OAuth token trong quá trình cấp quyền và CloudThinker lưu chúng cho bạn.

Mỗi workspace có một kết nối Supabase. Để dùng tài khoản hoặc organization Supabase khác, nhấn **Disconnect** trên kết nối Supabase, rồi nhấn **Connect** và đăng nhập lại.

***

## Quyền yêu cầu

CloudThinker có cùng quyền truy cập với tài khoản Supabase bạn cấp quyền, trên mọi project mà lần cấp quyền bao gồm: organization bạn chọn khi đăng nhập, hoặc mọi project tài khoản xem được nếu Supabase không hỏi. Giới hạn theo project và chế độ chỉ đọc của Supabase không khả dụng trên kết nối này. Để tiến gần nhất tới giới hạn đó, hãy cấp quyền bằng tài khoản chỉ thuộc các organization mà agent cần truy cập, và dùng Rules để chặn thao tác ghi.

| Agent có thể | Cần |
| - | - |
| Liệt kê organization và project; đọc bảng, extension, migration, branch, log, advisor, Edge Function và storage bucket | Quyền truy cập project trong Supabase |
| Chạy SQL, áp dụng migration, triển khai Edge Function, quản lý branch, tạm dừng hoặc khôi phục project, thay đổi cài đặt storage | Quyền ghi trong Supabase, và phải được [phê duyệt](https://docs.cloudthinker.io/vi/guide/approvals/overview.md) |

***

## Khả năng của agent

| Khả năng | Mô tả |
| - | - |
| **Khám phá project** | Liệt kê organization và project, lấy chi tiết project, và kiểm tra chi phí của project hoặc branch mới trước khi tạo |
| **Review cơ sở dữ liệu** | Liệt kê bảng, các Postgres extension đã cài và migration |
| **Log và advisor** | Đọc log project và performance advisor của Supabase để truy vết lỗi và điểm chậm |
| **Branch** | Liệt kê branch, và tạo, xóa, merge, reset hoặc rebase một branch. Branching của Supabase cần gói Supabase trả phí |
| **Edge Function** | Liệt kê và đọc Edge Function, và triển khai phiên bản mới |
| **Storage** | Liệt kê storage bucket và đọc hoặc cập nhật cấu hình storage |
| **Type và key** | Sinh TypeScript type từ schema, và đọc API URL cùng publishable key của project (gồm cả `anon` key cũ). Không có công cụ đọc secret key hay `service_role` key. Đọc key là thao tác đọc, nên không bao giờ cần phê duyệt và Rule không thể chặn (xem [Bảo mật](#bảo-mật)) |
| **SQL và migration** | Chạy truy vấn SQL hoặc áp dụng migration. CloudThinker hiển thị câu lệnh trước khi chạy. |

Nếu bạn từ chối một thay đổi, CloudThinker không thử lại. Xem [Quyền ghi](#quyền-ghi).

### Xác minh kết nối

```text theme={null}
Check my Supabase connection: list my projects, then the tables and latest migrations in my <project-name> project
```

Thay `<project-name>` bằng một trong các project Supabase của bạn.

**Trạng thái thành công:** CloudThinker liệt kê các project của bạn, rồi các bảng và migration mới nhất của project bạn đã nêu. Với organization lớn, hãy nêu một project để câu trả lời ngắn gọn.

### Ví dụ prompt

```text theme={null}
Show the errors in my production Supabase project logs from the last 24 hours and what's causing them
What do the performance advisors flag on my staging project, and which fixes matter most?
Compare the tables and migrations on my staging branch with production and list what differs
```

***

## Quyền ghi

Mọi thay đổi do agent thực hiện đều đi qua [Approvals](https://docs.cloudthinker.io/vi/guide/approvals/overview.md) của workspace trước. Ở chế độ mặc định **Auto · Rules + AI · Ask me**, AI judgment có thể cho một thay đổi an toàn chạy mà không cần hỏi. Allow Rule cũng vậy, sau khi CloudThinker bật [Rule enforcement](https://docs.cloudthinker.io/vi/guide/approvals/rules.md#khắc-phục-sự-cố) cho workspace của bạn. Chọn **Manual** nếu bạn muốn tự phê duyệt mọi thay đổi.

Tạm dừng project, triển khai Edge Function và áp dụng migration lên production có tác động lớn, nên đừng giao chúng cho phán đoán của AI. Chọn **Manual** để một người phê duyệt mọi thay đổi. Kết nối này không có công tắc **Allow writes**, nên đó là cơ chế kiểm soát dùng được hiện nay.

Khi CloudThinker bật [Rule enforcement](https://docs.cloudthinker.io/vi/guide/approvals/rules.md#khắc-phục-sự-cố) cho workspace của bạn, một Rule có thể thu hẹp thêm:

* **Phê duyệt thao tác ghi production bằng Rule**: thêm Rule **Ask first** trên kết nối Supabase để một người review mọi câu lệnh SQL, migration và lần triển khai.
* **Biến kết nối thành gần như chỉ đọc**: thêm Rule **Deny** trên kết nối Supabase bao gồm mọi thao tác. Mọi câu lệnh qua công cụ SQL đều được tính là thay đổi, kể cả `SELECT`, nên Deny chặn toàn bộ SQL. Các thao tác liệt kê project và bảng, extension, migration, log, advisor, Edge Function, storage bucket và key vẫn hoạt động.

Để tạo một trong hai Rule khi enforcement đã bật:

**1. Yêu cầu tạo Rule**

Trong chat, nhập `/create-policy Ask first for every write on the Supabase connection`. Để chặn thay vì hỏi, hãy yêu cầu Rule **Deny**.

**2. Kiểm tra đề xuất**

Mở **Approvals** trên thanh bên, rồi **Rules → Needs review**, và mở Rule. Kiểm tra **Effect** là **Ask first** (hoặc **Deny**), Rule có huy hiệu **Every operation**, và **Connections** ghi tên kết nối Supabase của bạn. **What would change** nên hiển thị các thao tác ghi Supabase gần đây sẽ được hỏi trước (hoặc bị từ chối).

**3. Chấp nhận**

Chọn Rule và nhấn **Accept**.

**Trạng thái thành công:** một thông báo xác nhận Rule đã được chấp nhận, và Rule chuyển sang tab **Active**.

***

## Khắc phục sự cố

> **Cửa sổ cấp quyền đóng lại nhưng Supabase mãi không hiển thị Connected**
>
> Trình duyệt có thể đang đăng nhập tài khoản Supabase khác, hoặc pop-up bị chặn. Đăng nhập đúng tài khoản trong cùng trình duyệt, rồi nhấn **Connect** lại.

> **Agent không tìm thấy project bạn mong đợi**
>
> Bạn đã cấp quyền bằng tài khoản Supabase không có quyền truy cập project đó, hoặc project nằm trong organization khác. Nhấn **Disconnect**, rồi **Connect** bằng tài khoản xem được project đó.

> **Lỗi 401 hoặc trạng thái lỗi sau khi từng hoạt động**
>
> Quyền OAuth đã hết hạn hoặc bị thu hồi trong Supabase. Nhấn **Connect** trong cảnh báo lỗi trên kết nối để cấp quyền lại.

> **Câu lệnh SQL hoặc migration thất bại trên project đang tạm dừng**
>
> Ở gói miễn phí, Supabase tạm dừng project sau khoảng 7 ngày không hoạt động, và project đang tạm dừng không trả lời SQL. Khôi phục project trong Supabase dashboard, hoặc yêu cầu CloudThinker khôi phục (đây là một thay đổi, nên đi qua phê duyệt), rồi chạy lại câu lệnh.

> **Permission denied trên schema auth hoặc storage**
>
> Supabase tự quản lý schema `auth` và `storage`, nên câu lệnh sửa bảng của chúng có thể thất bại với `permission denied`. Đặt bảng và hàm của bạn trong `public` hoặc một schema bạn tạo.

***

## Bảo mật

* **Quyền tối thiểu** — chỉ cấp các quyền mà agent cần cho trường hợp sử dụng của bạn; bắt đầu với quyền chỉ đọc và mở rộng sau.
* **Chỉ đọc theo mặc định** — sử dụng thông tin xác thực chỉ đọc trừ khi bạn muốn agent thực hiện thay đổi qua kết nối này.
* **Xoay vòng thông tin xác thực** — xoay vòng khóa và token theo lịch trình thông thường của bạn; CloudThinker sẽ lấy giá trị mới khi bạn cập nhật kết nối.
* **Thu hồi khi bàn giao** — xóa thông tin xác thực tại nhà cung cấp khi bạn xóa một kết nối hoặc khi đồng nghiệp rời nhóm.

- **Không có chế độ chỉ đọc trên kết nối này**: Supabase có chế độ chỉ đọc và giới hạn theo project, nhưng kết nối này không cung cấp chúng, và không có công tắc **Allow writes**, nên lời khuyên chỉ đọc ở trên không áp dụng được. Thay vào đó, chọn **Manual** để một người phê duyệt mọi thay đổi, và thêm Rule **Ask first** hoặc **Deny** khi Rule enforcement đã bật (xem [Quyền ghi](#quyền-ghi)).
- **Phạm vi truy cập**: kết nối truy cập mọi project mà lần cấp quyền bao gồm (xem [Quyền yêu cầu](#quyền-yêu-cầu)), kể cả production. Tư cách thành viên Supabase của bạn mới là ranh giới thực sự.
- **Đường đi dữ liệu**: agent gọi MCP server do Supabase host tại `https://mcp.supabase.com/mcp`. SQL, log và các kết quả khác đi qua server này và hiển thị trong chat, nên được lưu cùng cuộc hội thoại. Log có thể chứa dữ liệu cá nhân, nên hãy yêu cầu khoảng thời gian hẹp nhất bạn cần. CloudThinker lưu OAuth token.
- **Cắt quyền truy cập**: nhấn **Disconnect** trên kết nối Supabase. Nếu quyền bị thu hồi từ phía Supabase, kết nối hiển thị lỗi cho đến khi có người cấp quyền lại.
- **Key trong câu trả lời**: agent có thể đọc publishable key và log của project, và ứng dụng có thể in secret vào log của chính nó. Hãy coi những câu trả lời đó là nhạy cảm.

***

## Liên quan

> **[Kết nối Neon](https://docs.cloudthinker.io/vi/guide/connections/neon.md)**
>
> Postgres serverless kết nối bằng OAuth

> **[Kết nối PostgreSQL](https://docs.cloudthinker.io/vi/guide/connections/postgresql.md)**
>
> Kết nối trực tiếp mọi cơ sở dữ liệu Postgres

> **[Approvals](https://docs.cloudthinker.io/vi/guide/approvals/overview.md)**
>
> Quyết định thay đổi nào tự chạy và thay đổi nào chờ bạn


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.