డేటాబేస్లో వినియోగదారులు మరియు అనుమతులు
MySQL మరియు PostgreSQLలో ప్రతి అప్లికేషన్కు వేరే వినియోగదారుని ఎలా సృష్టించాలి, కనీస అనుమతులు ఎలా ఇవ్వాలి, మరియు అదనంగా ఏమీ అనుమతించబడలేదని ఎలా ధృవీకరించాలి.
23 ఆగస్టు, 2026న నవీకరించబడింది
root లేదా postgres గా నడుస్తున్న అప్లికేషన్, మొదటి వెల్నరబిలిటీలోనే మెషీన్లోని ప్రతి డేటాబేస్ను దాడి చేసేవారికి అప్పగిస్తుంది. తన సొంత స్కీమాపై మాత్రమే అధికారాలు ఉన్న ప్రత్యేక యూజర్, నష్టాన్ని ఒక ప్రాజెక్టుకే పరిమితం చేస్తుంది.
MySQL మరియు MariaDB
ఇక్కడ యూజర్ అంటే “పేరు మరియు హోస్ట్” జంట, మరియు గందరగోళానికి ఇదే ప్రధాన కారణం:
CREATE USER 'shop'@'localhost' IDENTIFIED BY 'long-random-password';
GRANT SELECT, INSERT, UPDATE, DELETE ON shop.* TO 'shop'@'localhost';
FLUSH PRIVILEGES;
'shop'@'localhost' మరియు 'shop'@'%' వేర్వేరు పాస్వర్డ్లు ఉన్న రెండు వేర్వేరు యూజర్లు. అవసరం లేకపోతే % హోస్ట్తో రికార్డ్లు సృష్టించవద్దు: అది ఏ చిరునామా నుండైనా లాగిన్ను అనుమతిస్తుంది.
మైగ్రేషన్ల సమయంలో మాత్రమే స్ట్రక్చర్పై అధికారాలు అవసరం:
GRANT CREATE, ALTER, DROP, INDEX, REFERENCES ON shop.* TO 'shop_migrate'@'localhost';
అప్లికేషన్ రోల్ మరియు మైగ్రేషన్ రోల్ను వేరు చేయడం మంచి పద్ధతి: అప్పుడు సాధారణ క్వెరీ భౌతికంగా ఒక టేబుల్ను డ్రాప్ చేయలేదు.
తనిఖీ:
SELECT user, host FROM mysql.user;
SHOW GRANTS FOR 'shop'@'localhost';
పాస్వర్డ్ మార్చడం మరియు తొలగించడం:
ALTER USER 'shop'@'localhost' IDENTIFIED BY 'new-password';
DROP USER 'shop'@'localhost';
PostgreSQL
రోల్ మరియు డేటాబేస్, స్కీమాపై దాని అధికారాలు:
CREATE ROLE shop WITH LOGIN PASSWORD 'long-random-password';
CREATE DATABASE shop OWNER shop;
REVOKE ALL ON DATABASE shop FROM PUBLIC;
రీడ్-ఓన్లీ రోల్ కోసం (రిపోర్ట్లు, అనలిటిక్స్, మానిటరింగ్ ప్యానెల్):
CREATE ROLE reader WITH LOGIN PASSWORD '...';
GRANT CONNECT ON DATABASE shop TO reader;
GRANT USAGE ON SCHEMA public TO reader;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO reader;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO reader;
చివరి లైన్ తప్పనిసరి: అది లేకపోతే, అధికారాలు ఇచ్చిన తర్వాత సృష్టించిన టేబుల్లను ఆ రోల్ చూడదు, మరియు ఒక నెలలో రిపోర్ట్లు కొత్త డేటాపై విరిగిపోతాయి.
తనిఖీ:
\du
\l
\dp
ఏమి లాక్ చేయాలి
- ఏ అప్లికేషన్ రోల్ కూడా సూపర్యూజర్ కాదు.
- ప్రతి ప్రాజెక్టుకు దాని సొంత డేటాబేస్ మరియు సొంత యూజర్ ఉంటాయి.
- పాస్వర్డ్లు పొడవుగా, ర్యాండమ్గా ఉంటాయి, మరియు వేర్వేరు ప్రాజెక్టులకు వేర్వేరుగా ఉంటాయి.
- బయటి నుండి లాగిన్ అవసరమైన చిరునామాలకు మాత్రమే అనుమతించబడుతుంది — రిమోట్ యాక్సెస్.
- MySQL లో అనామక యూజర్లు ఉండకూడదు, టెస్ట్ డేటాబేస్ ఉండకూడదు:
mariadb-secure-installationఇది చేస్తుంది.
సాధారణ తప్పులు
| లక్షణం | కారణం |
|---|---|
సరైన పాస్వర్డ్తో Access denied | మరో హోస్ట్ రూల్ మ్యాచ్ అయింది, ఉదాహరణకు ''@'localhost' |
అధికారాలు ఇచ్చారు, కానీ SELECT పని చేయదు | PostgreSQL లో USAGE ON SCHEMA లేదు |
| కొత్త టేబుల్ రోల్కు కనిపించదు | DEFAULT PRIVILEGES సెట్ చేయలేదు |
| విఫలమైన మైగ్రేషన్ సమయంలో అప్లికేషన్ అంతా తొలగించింది | అప్లికేషన్ రోల్కు DROP అధికారాలు ఉన్నాయి |
| పాస్వర్డ్ కమాండ్ హిస్టరీలో కనిపిస్తోంది | పాస్వర్డ్లను ఫైల్ నుండి సెట్ చేయండి, ~/.mysql_history క్లియర్ చేయండి |
డేటాబేస్ పాస్వర్డ్లను కోడ్లో కాకుండా,
600అనుమతులు ఉన్న సర్వీస్ ఎన్విరాన్మెంట్ ఫైల్లో నిల్వ చేయండి. లీక్ అయితే, మీరు మొత్తం ప్రాజెక్టును తిరిగి నిర్మించకుండా, ఒక లైన్ మార్చి రీస్టార్ట్ చేస్తారు.