كيفية إنشاء مستخدم جديد ومنح الصلاحيات في MySQL
مقدمة
MySQL هو نظام إدارة قواعد بيانات علائقية مفتوح المصدر. ويُستخدم عادةً كجزء من حزمة LAMP (التي ترمز إلى Linux وApache وMySQL وPHP)، وهو، حتى وقت كتابة هذا التقرير، قاعدة البيانات مفتوحة المصدر الأكثر شيوعًا في العالم.
يشرح هذا الدليل كيفية إنشاء مستخدم جديد في MySQL ومنحه الأذونات اللازمة لتنفيذ مجموعة متنوعة من الإجراءات.
المتطلبات الأساسية
لاتباع هذا الدليل، ستحتاج إلى الوصول إلى قاعدة بيانات MySQL. يفترض هذا الدليل أن قاعدة البيانات مثبتة على خادم افتراضي خاص يعمل بنظام Ubuntu 20.04، مع العلم أن المبادئ الموضحة فيه تنطبق بغض النظر عن طريقة الوصول إلى قاعدة البيانات.
إذا لم يكن لديك إمكانية الوصول إلى قاعدة بيانات MySQL وترغب في إعدادها بنفسك، يمكنك اتباع أحد أدلتنا حول كيفية تثبيت MySQL. ومرة أخرى، بغض النظر عن نظام التشغيل الأساسي لخادمك، فإن إجراءات إنشاء مستخدم MySQL جديد ومنحه الصلاحيات ستكون عادةً متشابهة.
إنشاء مستخدم جديد
بعد التثبيت، يقوم MySQL بإنشاء حساب مستخدم. جذر يُنشئ هذا الأمر حساب مستخدم يمكنك استخدامه لإدارة قاعدة بياناتك. يتمتع هذا المستخدم بصلاحيات كاملة على خادم MySQL، ما يعني أنه يملك تحكمًا كاملًا في جميع قواعد البيانات والجداول والمستخدمين، إلخ. لذا، يُنصح بتجنب استخدام هذا الحساب خارج نطاق الوظائف الإدارية. تشرح هذه الخطوة كيفية استخدام حساب المستخدم الجذر في MySQL لإنشاء حساب مستخدم جديد ومنحه الصلاحيات اللازمة.
في أنظمة أوبونتو التي تعمل بنظام MySQL 5.7 (والإصدارات الأحدث)، يتم التحقق من هوية مستخدم الجذر في MySQL افتراضيًا باستخدام إضافة auth_socket، بدلاً من كلمة المرور. تتطلب هذه الإضافة أن يتطابق اسم مستخدم نظام التشغيل الذي يستدعي عميل MySQL مع اسم مستخدم MySQL المحدد في الأمر. هذا يعني أنه للوصول إلى مستخدم الجذر في MySQL، يجب عليك إضافة sudo قبل أمر mysql لاستدعائه بصلاحيات مستخدم الجذر في أوبونتو.
$ sudo mysqlتوجه: اگر کاربر ریشه MySQL شما برای احراز هویت با رمز عبور پیکربندی شده است، برای دسترسی به پوسته MySQL باید از دستور دیگری استفاده کنید. موارد زیر کلاینت MySQL شما را با امتیازات کاربر معمولی اجرا می کند و شما فقط با احراز هویت با رمز عبور صحیح، امتیازات مدیر را در پایگاه داده به دست خواهید آورد:
$ mysql -u root -pهنگامی که به اعلان MySQL دسترسی پیدا کردید، می توانید یک کاربر جدید با عبارت CREATE USER ایجاد کنید. اینها از این نحو کلی پیروی می کنند:
mysql> CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';بعد از CREATE USER یک نام کاربری مشخص می کنید. بلافاصله پس از آن یک علامت @ و سپس نام میزبانی که این کاربر از آن متصل می شود، می آید. اگر فقط قصد دارید از سرور اوبونتو به این کاربر به صورت محلی دسترسی داشته باشید، می توانید localhost را تعیین کنید. قرار دادن نام کاربری و میزبان در یک نقل قول همیشه ضروری نیست، اما انجام این کار می تواند به جلوگیری از خطاها کمک کند.
هنگام انتخاب افزونه احراز هویت کاربر، چندین گزینه دارید. افزونه auth_socket که قبلا ذکر شد می تواند راحت باشد، زیرا امنیت قوی را بدون نیاز به کاربران معتبر برای وارد کردن رمز عبور برای دسترسی به پایگاه داده فراهم می کند. اما از اتصالات راه دور نیز جلوگیری می کند، که می تواند در زمانی که برنامه های خارجی نیاز به تعامل با MySQL دارند، کار را پیچیده کند.
به عنوان یک جایگزین، میتوانید بخش WITH authentication_plugin از نحو را کاملاً کنار بگذارید تا کاربر با افزونه پیشفرض MySQL، که ، caching_sha2_password نام دارد احراز هویت کند. مستندات MySQL به دلیل ویژگی های امنیتی قوی، این افزونه را برای کاربرانی که می خواهند با رمز عبور وارد شوند، توصیه می کند.
برای ایجاد کاربری که با caching_sha2_password احراز هویت می کند، دستور زیر را اجرا کنید. مطمئن شوید که sammy را به نام کاربری و password دلخواه خود به یک رمز عبور قوی انتخاب کنید:
mysql> CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';توجه: یک مشکل شناخته شده در برخی از نسخه های PHP وجود دارد که باعث ایجاد مشکل در caching_sha2_password می شود. اگر قصد دارید از این پایگاه داده با یک برنامه PHP استفاده کنید – برای مثال phpMyAdmin – ممکن است بخواهید کاربری ایجاد کنید که با افزونه mysql_native_password قدیمیتر، هرچند هنوز امن، احراز هویت کند:
mysql> CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';اگر مطمئن نیستید، همیشه می توانید کاربری ایجاد کنید که با caching_sha2_plugin احراز هویت می کند و سپس با این دستور آن را تغییر دهید:
mysql> ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';پس از ایجاد کاربر جدید خود، می توانید امتیازات مناسب را به آنها بدهید.
اعطای مجوزهای کاربر
نحو کلی برای اعطای امتیازات کاربر به شرح زیر است:
mysql> GRANT PRIVILEGE ON database.table TO 'username'@'host';مقدار PRIVILEGE در این نحو مثال، مشخص می کند که کاربر مجاز است چه اقداماتی را در پایگاه داده و جدول مشخص شده انجام دهد. میتوانید با جدا کردن هر کدام با کاما، چندین امتیاز را در یک دستور به یک کاربر اختصاص دهید. همچنین می توانید با وارد کردن ستاره (*) به جای پایگاه داده و نام جدول، امتیازات جهانی را به کاربر اعطا کنید. در SQL، ستاره ها کاراکترهای خاصی هستند که برای نشان دادن “all” پایگاه داده ها یا جداول استفاده می شوند.
برای نشان دادن، دستور زیر به کاربر امتیازات جهانی برای ایجاد، تغییر و رها کردن پایگاههای داده، جداول و کاربران و همچنین قدرت درج، بهروزرسانی و حذف دادهها از هر جدول روی سرور را میدهد. همچنین به کاربر این امکان را می دهد که داده ها را با SELECT جستجو کند، کلیدهای خارجی را با کلمه کلیدی REFERENCES ایجاد کند و عملیات FLUSH را با امتیاز RELOAD انجام دهد. با این حال، شما فقط باید به کاربران مجوزهای مورد نیاز خود را بدهید، بنابراین در صورت لزوم می توانید امتیازات کاربر خود را تنظیم کنید.
می توانید لیست کامل امتیازات موجود را در اسناد رسمی MySQL بیابید.
این بیانیه GRANT را اجرا کنید، و sammy را با نام کاربری MySQL خود جایگزین کنید تا این امتیازات را به کاربر خود اعطا کنید:
mysql> GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;توجه داشته باشید که این بیانیه شامل WITH GRANT OPTION نیز می باشد. این به کاربر MySQL شما اجازه میدهد هر گونه مجوزی را که دارد به سایر کاربران سیستم اعطا کند.
اخطار: برخی از کاربران ممکن است بخواهند به کاربر MySQL خود امتیاز ALL PRIVILEGES را اعطا کنند، که به آنها امتیازات ابرکاربر گسترده ای مشابه امتیازات کاربر اصلی ارائه می دهد، مانند:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;چنین امتیازات گسترده ای نباید به سادگی اعطا شود، زیرا هر کسی که به این کاربر MySQL دسترسی داشته باشد، کنترل کاملی بر هر پایگاه داده روی سرور خواهد داشت.
بسیاری از راهنماها پیشنهاد میکنند که دستور FLUSH PRIVILEGES را بلافاصله پس از یک عبارت CREATE USER یا GRANT اجرا کنید تا جداول اعطا را دوباره بارگیری کنید تا اطمینان حاصل شود که امتیازات جدید اعمال میشوند:
mysql> FLUSH PRIVILEGES;با این حال، طبق اسناد رسمی MySQL، هنگامی که جداول کمک هزینه را به طور غیرمستقیم با یک بیانیه مدیریت حساب مانند GRANT تغییر می دهید، پایگاه داده جداول کمک هزینه را بلافاصله در حافظه بارگذاری می کند، به این معنی که دستور FLUSH PRIVILEGES در مورد ما ضروری نیست. از طرفی اجرای آن هیچ تاثیر منفی روی سیستم نخواهد داشت.
اگر نیاز به لغو مجوز دارید، ساختار تقریباً مشابه اعطای مجوز است:
mysql> REVOKE type_of_permission ON database_name.table_name FROM 'username'@'host';توجه داشته باشید که هنگام لغو مجوزها، سینتکس ایجاب می کند که به جای TO که هنگام اعطای مجوزها استفاده می کردید، از FROM استفاده کنید.
با اجرای دستور SHOW GRANTS می توانید مجوزهای فعلی کاربر را بررسی کنید:
mysql> SHOW GRANTS FOR 'username'@'host';همانطور که می توانید پایگاه داده ها را با DROP حذف کنید، می توانید از DROP برای حذف یک کاربر استفاده کنید:
mysql> DROP USER 'username'@'localhost';پس از ایجاد کاربر MySQL و دادن امتیازات به آنها، می توانید از محیط کاربری MySQL خارج شوید:
mysql> exitدر آینده، برای ورود به عنوان کاربر MySQL جدید، از دستوری مانند زیر استفاده خواهید کرد:
$ mysql -u sammy -pپرچم p- باعث میشود که کلاینت MySQL از شما رمز عبور کاربر MySQL را برای احراز هویت درخواست کند.
نتیجه
با دنبال کردن این آموزش، یاد گرفتید که چگونه کاربران جدید اضافه کنید و مجوزهای مختلفی را در پایگاه داده MySQL به آنها بدهید. از اینجا، میتوانید به کاوش و آزمایش تنظیمات مختلف مجوز برای کاربر MySQL خود ادامه دهید، یا ممکن است بخواهید درباره برخی از تنظیمات سطح بالاتر MySQL اطلاعات بیشتری کسب کنید.









