PostgreSQL: পোস্টগ্রিএসকিউএল ব্যবহারকারীর পাসওয়ার্ড কীভাবে পরিবর্তন করবেন?


995

PostgreSQL ব্যবহারকারীর জন্য আমি কীভাবে পাসওয়ার্ড পরিবর্তন করব?

উত্তর:


1402

পাসওয়ার্ড কম লগইন জন্য:

sudo -u user_name psql db_name

আপনি ভুলে গেলে পাসওয়ার্ডটি পুনরায় সেট করতে:

ALTER USER user_name WITH PASSWORD 'new_password';

126
এটি ব্যবহারকারীর postgresql কমান্ডের ইতিহাসে পাসওয়ার্ডটি পরিষ্কার করে দেয়।
গ্রেগ

118
@ গ্রেগ: সুতরাং এটি মুছুন:rm ~/.psql_history
রিকিএ

43
বিষয় ছাড়াই তবে যদি কেউ "ব্যবহারকারীর নাম কীভাবে পরিবর্তন করবেন" তার চেয়ে চেয়ে থাকে ALTER USER myuser RENAME TO newname;... কোনও কারণে গুগল আমাকে এখানে ইঙ্গিত করছিল যখন আমি সেই গুগল করছিলাম :)
সমমান 8

10
আপনি "এবং" উভয় উক্তি কেন ব্যবহার করছেন? আমার অর্থ, একটি পার্থক্য রয়েছে এবং একটি ডিএমএল ক্যোয়ারিতে আপনাকে স্ট্রিংয়ের সাথে কাজ করার সময় ব্যবহার করতে হবে, তবে এখানে উভয়ই ব্যবহার করার কোনও বিশেষ কারণ আছে?
বায়ান

7
ব্যবহারকারী একটি স্ট্রিং নয় একটি বস্তু। টেবিল "টেবিলের নাম" বা এমনকি "টেবিলের নাম" থেকে নির্বাচন করুন ALTER TABLE এর সাথে তুলনা করুন। আপনি এই প্রসঙ্গে টেবিলগুলির সাথে একক উদ্ধৃতি ব্যবহার করতে পারেন নি এবং এটি ব্যবহারকারী / ভূমিকার ক্ষেত্রেও একই।
পি বাবা

630

তারপরে টাইপ করুন:

$ sudo -u postgres psql

তারপর:

\password postgres

তারপরে ছাড়তে psql:

\q

যদি এটি কাজ না করে তবে প্রমাণীকরণ পুনরায় কনফিগার করুন।

সম্পাদনা /etc/postgresql/9.1/main/pg_hba.conf(পথ পৃথক হবে) এবং পরিবর্তন:

    local   all             all                                     peer

প্রতি:

    local   all             all                                     md5

তারপরে সার্ভারটি পুনরায় চালু করুন:

$ sudo service postgresql restart

3
পোস্টগ্রিসের জন্য ডিফল্ট পাসওয়ার্ড কী? দুর্ঘটনাক্রমে এটি পরিবর্তন; রিসেট করা সম্ভব?
সাদ

2
(পিএসএইচএল ৯.২ তে) যদি আমি টাইপ \pকরি তবে এটি আমাকে পাসওয়ার্ড দেয়; যদি আমি \password postgresএটিতে টাইপ করি তবে পাসওয়ার্ড দেয় এবং সতর্কতা হয়\p extra argument "assword" ignored; \p extra argument "postgres" ignored
ডেভিড লেবাউর

1
এটি এসকিউএল কমান্ডের ইতিহাসে পাসওয়ার্ড ছাড়ার চেয়ে অনেক ভাল।
ওটোকান

1
@ জাচারিস্কট আপনি কি বলছেন?
TheRealChx101

2
লিনাক্সে sudo passwd postgres
পোস্টগ্রিজ

88

আপনার ব্যবহারকারীর পাসওয়ার্ড এনক্রিপ্ট করা এবং থাকা উচিত:

ALTER USER username WITH ENCRYPTED PASSWORD 'password';

45
এই কীওয়ার্ডটি বর্তমান সংস্করণের জন্য কোনও বিষয় নয়। থেকে postgresql.org/docs/current/static/sql-createrole.html The password is always stored encrypted in the system catalogs. The ENCRYPTED keyword has no effect, but is accepted for backwards compatibility.
John29

5
সতর্ক থাকুন! @ জন 29 মন্তব্য পোস্টগ্র্রেসক্লল 10 এবং উপরের থেকে শুধুমাত্র সত্য। অন্যান্য সমস্ত সংস্করণের জন্য এনক্রিপ্টেড পতাকা বিষয়গুলি।
phep

51

আমি বিশ্বাস করি পাসওয়ার্ড পরিবর্তন করার সর্বোত্তম উপায়টি হ'ল সহজভাবে ব্যবহার করা:

\password

পোস্টগ্রিস কনসোলে

সূত্র:

এই আদেশের সাহায্যে একটি এনক্রিপ্ট করা পাসওয়ার্ড উল্লেখ করার সময় অবশ্যই সাবধানতা অবলম্বন করা উচিত। পাসওয়ার্ডটি ক্লিয়ারটেক্সটে সার্ভারে প্রেরণ করা হবে এবং এটি ক্লায়েন্টের কমান্ডের ইতিহাসে বা সার্ভার লগে লগইন হতে পারে। পিএসকিএলে একটি কমান্ড \ পাসওয়ার্ড রয়েছে যা ক্লিয়ারটেক্সট পাসওয়ার্ডটি প্রকাশ না করেই কোনও ভূমিকার পাসওয়ার্ড পরিবর্তন করতে ব্যবহার করা যেতে পারে।

https://www.postgresql.org/docs/9.0/static/sql-alterrole.html থেকে ।


8
এটি অন্যান্য ব্যবহারকারীর জন্য পাসওয়ার্ড পরিবর্তন করতেও ব্যবহার করা যেতে পারে:\password username
মার্টিন

34

লিনাক্স কমান্ড লাইন ব্যবহার করে পাসওয়ার্ড পরিবর্তন করতে:

sudo -u <user_name> psql -c "ALTER USER <user_name> PASSWORD '<new_password>';"

5
কেবল মনে রাখবেন এটি সম্ভবত আপনার কমান্ডের ইতিহাসে ডিবি-র ব্যবহারকারীর পাসওয়ার্ড সংরক্ষণ করবে।
পেড্রো কর্ডেরিও

2
আপনি এখানে পরিবেশ পরিবর্তনশীল ব্যবহার করতে পারেন? আমি এটি একটি মোতায়েনকারী স্ক্রিপ্টে স্বয়ংক্রিয় করতে চাই
TheRealChx101

26

পাসওয়ার্ড পরিবর্তন করতে

 sudo -u postgres psql

তারপর

\password postgres

এখন নতুন পাসওয়ার্ড দিন এবং নিশ্চিত করুন

তারপর \qপ্রস্থান করতে


1
এই উত্তর আমাকে সাহায্য করুন। ধন্যবাদ
মোহাম্মদ জাওয়াদ বড়টি

24

আপনার পোস্টগ্র্যাস্কিল কনফিগারেশন এ যান এবং pg_hba.conf সম্পাদনা করুন

sudo vim /etc/postgresql/9.3/main/pg_hba.conf

তারপরে এই লাইনটি পরিবর্তন করুন:

Database administrative login by Unix domain socket
local      all              postgres                                md5

প্রতি :

Database administrative login by Unix domain socket
local   all             postgres                                peer

তারপরে সুডু কমান্ডের মাধ্যমে পোস্টগ্রেএসকিউএল পরিষেবাটি পুনরায় চালু করুন

psql -U postgres

আপনি এখন প্রবেশ করাবেন এবং পোস্টগ্র্যাস্কিল টার্মিনালটি দেখতে পাবেন

তারপরে প্রবেশ করুন

\password

এবং পোস্টগ্রিস ডিফল্ট ব্যবহারকারীর জন্য নতুন পাসওয়ার্ড লিখুন, সফলভাবে পাসওয়ার্ড পরিবর্তন করার পরে আবার pg_hba.conf এ যান এবং পরিবর্তনটি "এমডি 5" তে ফিরে যান

এখন আপনি হিসাবে লগ ইন করা হবে

পিএসএইচএল-ইউ পোস্টগ্রাস

আপনার নতুন পাসওয়ার্ড সহ

আপনারা সকলেই এতে কোনও সমস্যা খুঁজে পান কিনা তা আমাকে জানান।


এটি কাজ করে না:user@user-NC10:~$ psql -U postgres psql: FATAL: Peer authentication failed for user "postgres"
জিএম

ঠিক আছে, অন্য কোনও পদ্ধতি করুন sudo su - postgres psql আপনি টার্মিনালে প্রবেশ করবেন এবং সেখানে পাসওয়ার্ড পরিবর্তন করবেন, এটি এটির জন্য বিকল্প উপায়। এটি আপনার জন্য কাজ করে বা আপনার পুরো ব্যাখ্যা দরকার কিনা তা আমাকে জানান
মুর্তজা কাঁচওয়ালা

মিমি আমি চেষ্টা করেছি তবে আমার আরও একটি ত্রুটি রয়েছে: / usr / bin / psql: লাইন 19: ব্যবহার: কমান্ড পাওয়া যায় নি / ইউএসআর / বিন / পিএসকিএল: লাইন 21: ব্যবহার: কমান্ড পাওয়া যায় নি / ইউএসআর / বিন / পিএসকিএল: লাইন 23: ব্যবহার: কমান্ডটি পাওয়া যায় নি / ইউএসআর / বিন / পিএসকিএল: লাইন 24: ব্যবহার: কমান্ড পাওয়া যায় নি / ইউএসআর / বিন / পিএসকিএল: পিএসকিএল: লাইন 26: অপ্রত্যাশিত টোকেন $version,' /usr/bin/psql: psql: line 26: আমার ($ সংস্করণ, $ গুচ্ছ, $ ডিবি, $ পোর্টের কাছে সিনট্যাক্স ত্রুটি , $ হোস্ট); ' আপনার সাহায্যের জন্য ধন্যবাদ!
জিএম

11

পোস্টগ্রিজ ব্যবহারকারীর জন্য একটি নতুন পাসওয়ার্ডের জন্য অনুরোধ করতে (এটি কমান্ডে না দেখিয়ে):

sudo -u postgres psql -c "\password"

9

আমার সার্ভারে থাকা কনফিগারেশনটি অনেকটা কাস্টমাইজ করা হয়েছিল এবং আমি ফাইলটিতে বিশ্বাসের প্রমাণীকরণ সেট করার পরেই আমি পাসওয়ার্ড পরিবর্তন করতে সক্ষম হয়েছি :pg_hba.conf

local   all   all   trust

এটি পাসওয়ার্ড বা এমডি 5 এ ফিরে যেতে ভুলবেন না


1
পরিবর্তনগুলি কার্যকর হওয়ার জন্য আপনার পোস্টগ্রিজ পরিষেবাটি পুনঃসূচনা করতে হবেsudo systemctl restart postgresql.service
সম্পথ সুরিনেনি

এই pg_hba.conf ফাইলটি কোথায় যাওয়া উচিত?
জেএমএসটিডিওস.জ্রিচার্ডসন

8

গুগলে এটি প্রথম ফলাফল ছিল, যখন আমি কীভাবে কোনও ব্যবহারকারীর নাম পরিবর্তন করতে চাইছি, তাই:

ALTER USER <username> WITH PASSWORD '<new_password>';  -- change password
ALTER USER <old_username> RENAME TO <new_username>;    -- rename user

ব্যবহারকারী পরিচালনার জন্য আরও কয়েকটি কমান্ড সহায়ক:

CREATE USER <username> PASSWORD '<password>' IN GROUP <group>;
DROP USER <username>;

ব্যবহারকারীকে অন্য একটি গ্রুপে সরান

ALTER GROUP <old_group> DROP USER <username>;
ALTER GROUP <new_group> ADD USER <username>;

7

আমার মামলার জন্য উবুন্টুতে 14.04 পোস্টগ্রিজ 10.3 সহ ইনস্টল করা হয়েছে। আমাকে নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করতে হবে

  • su - postgres ব্যবহারকারীকে স্যুইচ করতে postgres
  • psql postgres শেল প্রবেশ করতে
  • \password তারপরে আপনার পাসওয়ার্ড লিখুন
  • \q শেল সেশন ছাড়ার জন্য
  • তারপরে আপনি নিচের লাইনটি আছে কিনা তা নিশ্চিত করে কার্যকর করে exitআপনার pg_hba.conf(খনিতে রয়েছে /etc/postgresql/10/main/pg_hba.conf) কনফিগার করে আবার রুটে ফিরে যান

    local all postgres md5

  • এর মাধ্যমে আপনার পোস্টগ্রিজ পরিষেবা পুনরায় চালু করুন service postgresql restart
  • এখন postgresব্যবহারকারীতে স্যুইচ করুন এবং আবার পোস্টগ্রিস শেল প্রবেশ করুন। এটি আপনাকে পাসওয়ার্ড সহ প্রম্পট করবে।

আমি মনে করি না পাসওয়ার্ড পরিবর্তন করার পরে আপনার পোস্টগ্র্রেসকিএল পরিষেবাটি পুনরায় চালু করতে হবে। পাসওয়ার্ডটি পুনরায় চালু করে আমি পুনরায় সেট করতে সক্ষম হয়েছি। \ পাসওয়ার্ডটি দ্রুততম উপায়। অন্যথায় আপনার ALTER USER কমান্ডের প্রয়োজন।
আর্কিট কাপুর

3

এটা ব্যবহার কর:

\password

সেই ব্যবহারকারীর জন্য আপনি যে নতুন পাসওয়ার্ড চান তা প্রবেশ করুন এবং তারপরে এটি নিশ্চিত করুন। যদি আপনি পাসওয়ার্ডটি মনে না রাখেন এবং আপনি এটি পরিবর্তন করতে চান তবে আপনি পোস্টগ্র্যাগ হিসাবে লগ ইন করতে পারেন এবং তারপরে এটি ব্যবহার করতে পারেন:

ALTER USER 'the username' WITH PASSWORD 'the new password';

3

সিনট্যাক্সের অন্যান্য উত্তরের মতো তবে এটি জানা উচিত যে আপনি পাসওয়ার্ডের একটি এমডি 5ও পাস করতে পারেন যাতে আপনি একটি সরল পাঠ্য পাসওয়ার্ড প্রেরণ করছেন না।

সরল পাঠ্যে ব্যবহারকারীদের পাসওয়ার্ড পরিবর্তন করার অনিচ্ছাকৃত পরিণতির কয়েকটি পরিস্থিতি এখানে।

  1. আপনার যদি এসএসএল না থাকে এবং দূরবর্তীভাবে সংশোধন করা হয় তবে আপনি পুরো নেটওয়ার্কে প্লেইন পাঠ্য পাসওয়ার্ড প্রেরণ করছেন।
  2. যদি আপনার লগিং কনফিগারেশনটি ডিডিএল স্টেটমেন্টগুলি log_statement = ddlবা তার থেকেও বেশি লগ করতে সেট করা থাকে তবে আপনার সরল পাঠ্য পাসওয়ার্ডটি আপনার ত্রুটিযুক্ত লগগুলিতে প্রদর্শিত হবে।
    1. আপনি যদি এই লগগুলি রক্ষা না করেন তবে এটি একটি সমস্যা।
    2. আপনি যদি এই লগগুলি / ইটিএল সংগ্রহ করেন এবং অন্যদের অ্যাক্সেস থাকে যেখানে সেগুলি প্রদর্শন করেন তারা এই পাসওয়ার্ড ইত্যাদি দেখে শেষ করতে পারে etc.
    3. আপনি যদি কোনও ব্যবহারকারীকে তাদের পাসওয়ার্ড পরিচালনা করার অনুমতি দেন তবে তারা অজান্তে কোনও প্রশাসক বা নিম্ন স্তরের কর্মচারীর কাছে লগগুলি পর্যালোচনা করার দায়িত্বপ্রাপ্ত একটি পাসওয়ার্ড প্রকাশ করছেন।

এর সাথে এখানে বলা হয়েছে যে আমরা কীভাবে পাসওয়ার্ডের এমডি 5 তৈরি করে কোনও ব্যবহারকারীর পাসওয়ার্ড পরিবর্তন করতে পারি।

  • পোস্টটি যখন এমডি 5 হিসাবে একটি পাসওয়ার্ড হ্যাশ করে, ব্যবহারকারীর নামের সাথে পাসওয়ার্ড সল্ট করে তারপরে ফলাফল "এমডি 5" পাঠ্যটিকে ফলাফলের হ্যাশটিতে প্রেন্ডেন্ড করে।
  • উদা: "এমডি 5" + এমডি 5 (পাসওয়ার্ড + ব্যবহারকারীর নাম)

  • ব্যাশে:

    ~$ echo -n "passwordStringUserName" | md5sum | awk '{print "md5"$1}'
    md5d6a35858d61d85e4a82ab1fb044aba9d
  • পাওয়ারশেলে:
    [PSCredential] $Credential = Get-Credential

    $StringBuilder = New-Object System.Text.StringBuilder

    $null = $StringBuilder.Append('md5');

    [System.Security.Cryptography.HashAlgorithm]::Create('md5').ComputeHash([System.Text.Encoding]::ASCII.GetBytes(((ConvertFrom-SecureStringToPlainText -SecureString $Credential.Password) + $Credential.UserName))) | ForEach-Object {
        $null = $StringBuilder.Append($_.ToString("x2"))
    }

    $StringBuilder.ToString();

    ## OUTPUT
    md5d6a35858d61d85e4a82ab1fb044aba9d
  • সুতরাং অবশেষে আমাদের ALTER USERকমান্ড দেখতে হবে
    ALTER USER UserName WITH PASSWORD 'md5d6a35858d61d85e4a82ab1fb044aba9d';
  • প্রাসঙ্গিক লিঙ্কগুলি (দ্রষ্টব্য, আমি কেবল ডকসের সর্বশেষ সংস্করণগুলির সাথে লিংক করব পুরানো এটি কিছু পরিবর্তন করে তবে এমডি 5 এখনও একটি উপায় সমর্থন করে))
  • ভূমিকা তৈরি করুন
  • পাসওয়ার্ডটি সিস্টেম ক্যাটালগগুলিতে সর্বদা এনক্রিপ্ট করা থাকে। এনক্রিপটেড কীওয়ার্ডটির কোনও প্রভাব নেই, তবে পিছনের সামঞ্জস্যের জন্য গৃহীত হয়। এনক্রিপশনের পদ্ধতিটি কনফিগারেশন প্যারামিটার পাসওয়ার্ড_ইনক্রিপশন দ্বারা নির্ধারিত হয়। যদি উপস্থাপিত পাসওয়ার্ডের স্ট্রিং এমডি 5-এনক্রিপ্ট করা বা এসসিআরএএম-এনক্রিপ্ট করা ফর্ম্যাটে থাকে তবে এটি পাসওয়ার্ড_ইনক্রিপশন নির্বিশেষে সঞ্চিত হয় (যেহেতু সিস্টেম নির্দিষ্ট এনক্রিপ্ট করা পাসওয়ার্ড স্ট্রিংটি আলাদা আলাদা আকারে এনক্রিপ্ট করতে ডিক্রিপ্ট করতে পারে না)। এটি ডাম্প / পুনরুদ্ধারকালে এনক্রিপ্ট হওয়া পাসওয়ার্ডগুলি পুনরায় লোড করার অনুমতি দেয়।

  • পাসওয়ার্ড_ এনক্রিপশন জন্য কনফিগারেশন সেটিংস
  • পাসওয়ার্ড প্রমাণীকরণ ডক পোস্টগ্র্যাগ করে
  • বিল্ডিং পোস্টগ্রেস পাসওয়ার্ড এমডি 5

1

সাধারণভাবে, ডিবি সম্পর্কিত ক্রিয়াকলাপ করার জন্য কেবল পিজি অ্যাডমিন ইউআই ব্যবহার করুন।

পরিবর্তে আপনি যদি আপনার স্থানীয় বিকাশের জন্য স্বয়ংক্রিয় ডাটাবেস সেটআপ, বা সিআই ইত্যাদিতে আরও বেশি মনোনিবেশ করেন ...

উদাহরণস্বরূপ, আপনি এটির মতো একটি সাধারণ কম্বো ব্যবহার করতে পারেন।

(ক) জেনকিন্সের মাধ্যমে এর অনুরূপ একটি আদেশ সহ একটি ডামি সুপার ব্যবহারকারী তৈরি করুন:

docker exec -t postgres11-instance1 createuser --username=postgres --superuser experiment001

এটি আপনার পোস্টগ্রেস ডিবিতে এক্সপেরিমেন্ট 001 নামে একটি দুর্দান্ত ব্যবহারকারী তৈরি করবে।

(খ) নন-ইন্টারেক্টিভ এসকিউএল কমান্ডটি চালিয়ে এই ব্যবহারকারীকে কিছু পাসওয়ার্ড দিন।

docker exec -t postgres11-instance1 psql -U experiment001 -d postgres -c "ALTER USER experiment001 WITH PASSWORD 'experiment001' "

কমান্ড লাইন (অ-ইন্টারেক্টিভ) সরঞ্জামদানের জন্য পোস্টগ্রিস সম্ভবত সেরা ডাটাবেস। ব্যবহারকারী তৈরি করা, এসকিউএল চালানো, ডাটাবেস ইত্যাদির ব্যাকআপ তৈরি করা ... সাধারণভাবে এটি পোস্টগ্রিসের সাথে একেবারে মৌলিক এবং এটি আপনার বিকাশ সেটআপ স্ক্রিপ্টগুলিতে বা স্বয়ংক্রিয় সিআই কনফিগারেশনে একীভূত করা মোটামুটি তুচ্ছ।


1

এবং ব্যাশ এবং প্রত্যাশার সাথে সম্পূর্ণ স্বয়ংক্রিয় উপায় ( এই উদাহরণে আমরা ওএস এবং পোস্টগ্রিস রান-টাইম স্তরে নতুন সঞ্চিত পোস্টগ্রাগস পিডব্লিউ সহ একটি নতুন পোস্টগ্র্যাস অ্যাডমিন সরবরাহ করি)

  # the $postgres_usr_pw and the other bash vars MUST be defined 
  # for reference the manual way of doing things automated with expect bellow
  #echo "copy-paste: $postgres_usr_pw"
  #sudo -u postgres psql -c "\password"
  # the OS password could / should be different
  sudo -u root echo "postgres:$postgres_usr_pw" | sudo chpasswd

  expect <<- EOF_EXPECT
     set timeout -1
     spawn sudo -u postgres psql -c "\\\password"
     expect "Enter new password: "
     send -- "$postgres_usr_pw\r"
     expect "Enter it again: "
     send -- "$postgres_usr_pw\r"
     expect eof
EOF_EXPECT

  cd /tmp/
  # at this point the postgres uses the new password
  sudo -u postgres PGPASSWORD=$postgres_usr_pw psql \
    --port $postgres_db_port --host $postgres_db_host -c "
  DO \$\$DECLARE r record;
     BEGIN
        IF NOT EXISTS (
           SELECT
           FROM   pg_catalog.pg_roles
           WHERE  rolname = '"$postgres_db_useradmin"') THEN
              CREATE ROLE "$postgres_db_useradmin" WITH SUPERUSER CREATEROLE
              CREATEDB REPLICATION BYPASSRLS 
 PASSWORD '"$postgres_db_useradmin_pw"' LOGIN ;
        END IF;
     END\$\$;
  ALTER ROLE "$postgres_db_useradmin" WITH SUPERUSER CREATEROLE
  CREATEDB REPLICATION BYPASSRLS 
PASSWORD  '"$postgres_db_useradmin_pw"' LOGIN ;
 "

0

TLDR:

অনেক সিস্টেমে ব্যবহারকারীর অ্যাকাউন্টে প্রায়শই একটি পিরিয়ড বা কিছু প্রকার পাঞ্চ থাকে (ব্যবহারকারী: john.smith, horise.johnson)। এই ক্ষেত্রে উপরের স্বীকৃত উত্তরে একটি পরিবর্তন করতে হবে। পরিবর্তনের জন্য ব্যবহারকারীর নামটি ডাবল-কোটেড করা দরকার।

Example:

ALTER USER "username.lastname" WITH PASSWORD 'password'; 

যুক্তিসঙ্গত:

'ডাবল কোট' কখন ব্যবহার করতে হবে এবং কখন 'একক উদ্ধৃতি' ব্যবহার করতে হবে তা পোস্টগ্র্রেসগুলি বেশ পছন্দসই। সাধারণত স্ট্রিং সরবরাহ করার সময় আপনি একটি একক উদ্ধৃতি ব্যবহার করবেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.