अगर आपका प्रोजेक्ट Google Antigravity, Cursor, Windsurf, VS Code, या किसी भी AI-IDE की मदद से बनाया गया है और Backend के लिए Supabase इस्तेमाल हो रहा है, तो एक समय ऐसा ज़रूर आएगा जब आपको यह Verify करना होगा कि आपकी Database Tables पर Row Level Security (RLS) सही तरीके से Enabled है या नहीं।
कई बार AI Assistant (जैसे Gemini Flash, Claude, या ChatGPT) लाइव Database को Scan या Security Audit करने से मना कर देते हैं क्योंकि उनके पास आपके Database का Direct Access नहीं होता। ऐसी स्थिति में Terminal के माध्यम से RLS Status Check करना सबसे Reliable और Accurate तरीका माना जाता है।
इस Guide में हम शुरुआत से अंत तक पूरा Process समझेंगे।
इस Guide में क्या सीखेंगे?
कौन-से Environment Variables की आवश्यकता होती है
psql को पहली बार कैसे Install करें
Terminal से सभी Tables का RLS Status कैसे देखें
किन Tables पर RLS Enabled नहीं है, यह कैसे पता करें
Database Policies कैसे Check करें
anon Role किन Tables को Access कर सकती है, यह कैसे Verify करें
Part 1: RLS Check करने के लिए कौन-से Environment Variables चाहिए?
RLS Status Check करने के लिए आपको केवल एक Direct PostgreSQL Connection String की आवश्यकता होती है।
अधिकांश Projects में यह आपकी .env या .env.local फ़ाइल में पहले से मौजूद होती है।
सामान्यतः इसका नाम इनमें से कोई एक हो सकता है—
DIRECT_URL
DATABASE_URL
POSTGRES_URL_NON_POOLING
Note: यदि आप DATABASE_URL का उपयोग कर रहे हैं, तो सुनिश्चित करें कि उसमें pgbouncer=true न हो।
Direct Connection String का Format
postgresql://postgres:[PASSWORD]@db.[project-ref].supabase.co:5432/postgresConnection String के प्रत्येक भाग का अर्थ
| Component | विवरण |
|---|---|
| postgres | Default PostgreSQL Username |
| [PASSWORD] | Database Password |
| db.project-ref.supabase.co | आपके Supabase Project का Database Host |
| 5432 | Direct PostgreSQL Port |
| postgres | Default Database Name |
Direct Connection और Pooled Connection में अंतर
Supabase दो प्रकार के Database Connections उपलब्ध कराता है।
| Connection Type | Port | कब उपयोग करें |
|---|---|---|
| Direct Connection | 5432 | Terminal, psql, Migration, Database Inspection |
| Pooler (PgBouncer) | 6543 | Application Runtime एवं High Connection Load |
यदि आपकी Connection String में—
pgbouncer=true
या Port 6543
दिखाई देता है, तो वह Pooled Connection है।
ऐसी Connection String को psql के साथ उपयोग करने पर अक्सर यह Error दिखाई देती है—
invalid URI query parameter: "pgbouncer"इसलिए RLS Check करने के लिए हमेशा Direct Connection (Port 5432) का ही उपयोग करें।
यदि Direct URL उपलब्ध न हो तो क्या करें?
Supabase Dashboard खोलें और नीचे दिया गया Path Follow करें—
Project Settings → Database → Connection String
यहाँ आपको सामान्यतः दो विकल्प दिखाई देंगे—
Session / Transaction Pooler (6543)
Direct Connection (5432)
हमेशा Direct Connection वाली String ही Copy करें।
उदाहरण—
DIRECT_URL="postgresql://postgres:[password]@db.xxxxx.supabase.co:5432/postgres"क्या अन्य Environment Variables की आवश्यकता है?
नहीं।
नीचे दिए गए Variables Application चलाने के लिए आवश्यक होते हैं, लेकिन RLS Check करने के लिए नहीं।
NEXT_PUBLIC_SUPABASE_URL
NEXT_PUBLIC_SUPABASE_ANON_KEY
SUPABASE_SERVICE_ROLE_KEY
Part 2: पहली बार psql Install कैसे करें?
यदि Terminal में यह Error आती है—
command not found: psqlतो इसका अर्थ है कि आपके System में PostgreSQL Client Install नहीं है।
यह Setup केवल एक बार करना होता है।
Step 1 — PostgreSQL Client Install करें
brew install libpqStep 2 — यदि Homebrew Permission Error आए
यदि आपको ऐसा Error दिखाई दे—
opt/homebrew is not writableतो पहले Permission ठीक करें—
sudo chown -R $(whoami) /opt/homebrewMac आपका Login Password पूछेगा।
Password दर्ज करके Enter दबाएँ।
इसके बाद Install Command दोबारा चलाएँ—
brew install libpqStep 3 — psql को PATH में जोड़ें
libpq Install होने के बाद भी कई बार psql सीधे उपलब्ध नहीं होता।
इसे PATH में जोड़ने के लिए—
echo 'export PATH="/opt/homebrew/opt/libpq/bin:$PATH"' >> ~/.zshrc source ~/.zshrcStep 4 — Installation Verify करें
psql --versionयदि Output कुछ इस प्रकार दिखाई दे—
psql (PostgreSQL) 18.4तो आपका Setup सफलतापूर्वक Complete हो चुका है।
अब भविष्य में किसी भी Project के लिए दोबारा Install करने की आवश्यकता नहीं होगी।
Part 3: Terminal से RLS Status कैसे Check करें?
अब Actual Security Verification शुरू करते हैं।
Step 1 — Project Folder खोलें
Terminal में अपने Project के Root Directory पर जाएँ।
यहीं आपकी .env फ़ाइल मौजूद होनी चाहिए।
Step 2 — Database URL Load करें
यदि Variable का नाम DIRECT_URL है—
export $(grep DIRECT_URL .env | xargs)यदि आपके Project में Variable का नाम अलग है, जैसे DATABASE_URL, तो उसी नाम का उपयोग करें।
Step 3 — सभी Tables का RLS Status देखें
psql "$DIRECT_URL" -c "SELECT tablename, rowsecurity FROM pg_tables WHERE schemaname = 'public' ORDER BY tablename;"Output का अर्थ
| Value | Meaning |
|---|---|
| t | Row Level Security Enabled |
| f | Row Level Security Disabled |
यदि किसी Table के सामने t दिखाई देता है, तो उस Table पर RLS Enabled है।
यदि f दिखाई देता है, तो वह Table अभी Protected नहीं है और उस पर Security लागू करना आवश्यक हो सकता है।
Step 4 — केवल Unprotected Tables देखें
यदि आप केवल उन Tables की सूची देखना चाहते हैं जिन पर RLS Enabled नहीं है—
psql "$DIRECT_URL" -c "SELECT tablename FROM pg_tables WHERE schemaname='public' AND rowsecurity=false;"यदि Output में यह दिखाई दे—
(0 rows)तो इसका अर्थ है कि Public Schema की सभी Tables पर RLS Enabled है।
Step 5 — सभी RLS Policies देखें
यदि आप यह जानना चाहते हैं कि किस Table पर कौन-सी Policy लागू है—
psql "$DIRECT_URL" -c "SELECT tablename, policyname, roles, cmd FROM pg_policies WHERE schemaname='public' ORDER BY tablename;"इस Query से आपको प्रत्येक Table की Policy, Allowed Roles और Allowed Commands दिखाई देंगे।
Step 6 — anon Role का Access Verify करें
यह सबसे महत्वपूर्ण Security Check माना जाता है।
इससे पता चलता है कि बिना Login किए Public Users किन Tables को Access कर सकते हैं।
psql "$DIRECT_URL" -c "SELECT tablename, policyname, cmd, qual FROM pg_policies WHERE schemaname='public' AND 'anon'=ANY(roles) ORDER BY tablename;"किन Tables का anon Role में दिखाई देना सही नहीं है?
यदि आपकी Application में नीचे जैसी Sensitive Tables हैं—
users
profiles
subscribers
payments
orders
admin_sessions
bookings
तो सामान्यतः इन Tables का anon Role में दिखाई देना उचित नहीं माना जाता।
यदि ये इस List में नहीं हैं, तो इसका अर्थ है कि Public Users सीधे उनका Data Access नहीं कर सकते।
Bonus Tip
यदि किसी Command का Output Terminal में बहुत लंबा हो जाए और नीचे (END) दिखाई दे, तो घबराएँ नहीं।
बस Keyboard पर—
qदबाएँ।
आप तुरंत Page Mode से बाहर आ जाएँगे।
निष्कर्ष (Conclusion)
Supabase Project की Security Verify करने का सबसे आसान और भरोसेमंद तरीका Terminal के माध्यम से RLS Status Check करनाहै।
यदि आपके पास सही Direct PostgreSQL Connection String मौजूद है, तो केवल कुछ psql Commands की सहायता से आप आसानी से यह जान सकते हैं—
कौन-सी Tables पर RLS Enabled है।
कौन-सी Tables अभी भी Unprotected हैं।
कौन-सी Policies लागू हैं।
Public (anon) Users किन Resources को Access कर सकते हैं।
यदि आप नियमित रूप से Supabase, PostgreSQL, Next.js, AI-Generated Projects, या Google Antigravity के साथ काम करते हैं, तो यह Security Check आपके Development Workflow का स्थायी हिस्सा होना चाहिए। इससे Production में जाने से पहले संभावित Security Issues का पता लगाया जा सकता है और आपका Database अधिक सुरक्षित बना रहता है।
---ends here---


