පරිශීලකයෙකු සඳහා සියලු වගු සඳහා ප්රවේශය ලබා දීම


159

මම Postgres වෙත අලුත් වන අතර අපගේ MySQL දත්ත සමුදායන් සංක්‍රමණය කිරීමට උත්සාහ කරමි. MySQL මම ප්රදානය කළ හැකි SELECT, UPDATE, INSERT, හා DELETEඅඩු වරප්රසාදිත පරිශීලක මත වරප්රසාද හා නිශ්චිත දත්ත සියලු වගු අයදුම් කිරීමට එම දීමනාපත්ර සක්රිය කරන්න. මට පෝස්ට්ග්‍රෙස්හි යමක් මග හැරී තිබිය යුතුය, මන්දයත් එක් වරකට එක් වගුවකට එම වරප්‍රසාද ලබා දිය යුතු බව පෙනේ. බොහෝ දත්ත සමුදායන් සහ දත්ත සමුදායකට වගු සිය ගණනක් සමඟින්, එය භූමියෙන් ඉවතට යාම දුෂ්කර කාර්යයක් සේ පෙනේ. ඊට අමතරව, දත්ත සමුදායක් ක්‍රියාත්මක වූ පසු, වගු එකතු කිරීම නිතර නිතර සිදු වන අතර, අවශ්‍ය නම් මිස සෑම අවස්ථාවකදීම අවසර ලබා දීමට මට අවශ්‍ය නොවනු ඇත.

මෙය වඩාත් හොඳින් ඉටු කරන්නේ කෙසේද?

Answers:


181

පළමුව, විමසුම් ක්‍රියාත්මක කිරීම සඳහා දත්ත සමුදායට සම්බන්ධ වීමට ඔබට හැකි විය යුතුය. මෙය සාක්ෂාත් කරගත හැකිය

REVOKE CONNECT ON DATABASE your_database FROM PUBLIC;

GRANT CONNECT
ON DATABASE database_name 
TO user_name;

මෙම REVOKEඅවශ්ය නිසා

PUBLIC යන ප්‍රධාන වචනයෙන් ඇඟවෙන්නේ පසුකාලීනව නිර්මාණය කළ හැකි ඒවා ඇතුළුව සියලු භූමිකාවන් සඳහා වරප්‍රසාද ලබා දිය යුතු බවයි. PUBLIC යනු සෑම විටම සියලු භූමිකාවන් ඇතුළත් වන ව්‍යංගයෙන් නිර්වචනය කරන ලද කණ්ඩායමක් ලෙස සිතිය හැකිය. ඕනෑම විශේෂිත කාර්යභාරයක් සඳහා එයට සෘජුවම ලබා දී ඇති වරප්‍රසාද එකතුව, එය දැනට සාමාජිකයෙකු වී ඇති ඕනෑම භූමිකාවක් සඳහා ලබා දී ඇති වරප්‍රසාද සහ මහජනතාවට ලබා දී ඇති වරප්‍රසාද එකතුවකි.

ඔබේ පරිශීලකයා ඩීඑම්එල් ප්‍රකාශයන්ට පමණක් සීමා කිරීමට ඔබට අවශ්‍ය නම්, ඔබට තව ටිකක් කළ යුතුව ඇත:

REVOKE ALL
ON ALL TABLES IN SCHEMA public 
FROM PUBLIC;

GRANT SELECT, INSERT, UPDATE, DELETE
ON ALL TABLES IN SCHEMA public 
TO user_name;

මේවා උපකල්පනය කරන්නේ ඔබට ඇත්තේ එක් ක්‍රමයක් පමණක් බවයි (එය පෙරනිමියෙන් 'පොදු' ලෙස නම් කර ඇත).

ජැක් ඩග්ලස් පෙන්වා දුන් පරිදි, ඉහත දක්වා ඇත්තේ දැනටමත් පවතින වගු සඳහා වරප්‍රසාද පමණි . අනාගත වගු සඳහා එයම සාක්ෂාත් කර ගැනීම සඳහා, ඔබට පෙරනිමි වරප්‍රසාද අර්ථ දැක්විය යුතුය :

ALTER DEFAULT PRIVILEGES 
    FOR ROLE some_role   -- Alternatively "FOR USER"
    IN SCHEMA public
    GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO user_name;

මෙන්න, some_roleවගු නිර්මාණය කරන භූමිකාවක් වන user_nameඅතර වරප්‍රසාද ලබා ගන්නා තැනැත්තා වේ. මෙය නිර්වචනය කරමින්, ඔබ some_roleඑහි සාමාජිකයෙකු ලෙස හෝ සාමාජිකයෙකු ලෙස ලොග් විය යුතුය .

අවසාන වශයෙන්, ඔබ අනුපිළිවෙල සඳහාද එයම කළ යුතුය (එය පෙන්වා දීම ගැන ප්ලේඩ්ෆෑන් හට ස්තූතියි) - මෙන්න එය USAGEඔබට අවශ්‍ය වරප්‍රසාදයයි.


1
ස්තූතියි, FOR some_roleපසුව නිර්මාණය කරන ලද මගේ වගු සඳහා එය ක්‍රියාත්මක කිරීමට මා අතපසු වූ ප්‍රධාන කොටස විය. නමුත් මට ප්‍රවිෂ්ට some_roleපරිපාලක postgresපරිශීලකයා ලෙස විමසුම ක්‍රියාත්මක කළ හොත් එය ක්‍රියාත්මක විය .
JustAMartin

මම එම සියලු විධානයන් මගේ පරිශීලකයා වෙනුවෙන් කළෙමි, නමුත් තවමත් දත්ත සමුදාය තුළ ඇති වගු මත SELECT භාවිතා කිරීමට මට අවසර නොලැබුණි. එය ක්‍රියාත්මක වූයේ මා සියලු වරප්‍රසාද නැවත ලබාගෙන නැවත ප්‍රදානය කිරීමෙන් පසුව පමණි.
rubo77

54

ඔබට ඔවුන්ට සියලු වරප්‍රසාද ලබා දීමට අවශ්‍ය යැයි උපකල්පනය කර - මෙය කරන්න:

grant all privileges on database dbname to dbuser;

එහිදී dbnameඔබගේ දත්ත සමුදාය නම හා dbuserපරිශීලක නාමය වේ.


49
මෙය දත්ත සමුදායේ පහත සඳහන් වරප්‍රසාද එක් කරනු ඇත : CREATE, CONNECT, TEMPORARY. වගු මත වරප්‍රසාද නොමැත.
ඩෙසෝ

13
සියලුම වගු සඳහා සමාන විධානයක් වනු ඇත,GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO dbuser;
ඩෝලන් ඇන්ටෙනූචි

5
මෙයද මට ප්‍රයෝජනවත් විය:GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO dbuser;
පාවුලෝ

23

දත්ත සමුදාය තුළ ඇති සියලුම වගු සඳහා සියලු වරප්‍රසාද ලබා දීම

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA <schema_name> TO <username>;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA <schema_name> TO <username>;

18

මම PostgreSQL වෙත ඉතා අළුත් බැවින් මම මෙහි යම් වැරැද්දක් කර ඇති බව විය හැකිය. නමුත් මෙය මට ගැටලුවේ පළමු කොටස පමණක් විසඳීය - පවතින සියලුම වගු වල වරප්‍රසාද සැකසීම.

නව වගු වල මගේ පරිශීලකයාට අවසර නිවැරදිව සැකසීමට නම්, ඒවා නිර්මාණය කර ඇති අතර පරිශීලකයා සඳහා පෙරනිමි අවසරයන් සැකසිය යුතුය:

ALTER DEFAULT PRIVILEGES IN SCHEMA public
  GRANT SELECT, INSERT, UPDATE, DELETE ON tables TO user_name;

ALTER DEFAULT PRIVILEGES IN SCHEMA public
  GRANT SELECT, USAGE ON sequences TO user_name;

3
--Create User

CREATE USER my_user_test WITH LOGIN NOSUPERUSER NOCREATEDB  NOCREATEROLE    INHERIT NOREPLICATION   CONNECTION LIMIT -1 PASSWORD 'xxxxxxx';

-- Grant connect to my data base

GRANT CONNECT ON DATABASE my_db_test TO my_user_test;

-- Grant usage the schema

GRANT USAGE ON SCHEMA my_sch_test TO my_user_test ;

-- Grant all table for SELECT, INSERT, UPDATE, DELETE

GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA my_sch_test TO my_user_test;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.