مقدمه
MySQL یک سیستم مدیریت پایگاه داده رابطه ای منبع باز است. معمولاً به عنوان بخشی از پشته LAMP (که مخفف لینوکس، آپاچی، MySQL و PHP است) استفاده میشود و از زمان نوشتن این مقاله، محبوبترین پایگاه داده منبع باز در جهان است. این راهنما نحوه ایجاد یک کاربر MySQL جدید و اعطای مجوزهای لازم برای انجام انواع اقدامات را به آنها توضیح می دهد.
پیش نیازها
برای پیروی از این راهنما، باید به پایگاه داده MySQL دسترسی داشته باشید. این راهنما فرض می کند که این پایگاه داده بر روی یک سرور خصوصی مجازی که اوبونتو 20.04 را اجرا می کند، نصب شده است، اگرچه اصولی که در آن توضیح داده شده باید صرف نظر از نحوه دسترسی شما به پایگاه داده خود قابل اجرا باشند. اگر به پایگاه داده MySQL دسترسی ندارید و می خواهید خودتان آن را راه اندازی کنید، می توانید یکی از راهنماهای ما را در مورد نحوه نصب MySQL دنبال کنید. باز هم، صرف نظر از سیستم عامل اصلی سرور شما، روشهای ایجاد یک کاربر MySQL جدید و اعطای مجوز به آنها معمولاً یکسان خواهد بود.
ایجاد یک کاربر جدید
پس از نصب، MySQL یک حساب کاربری root ایجاد می کند که می توانید از آن برای مدیریت پایگاه داده خود استفاده کنید. این کاربر دارای امتیازات کامل بر سرور 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
ایجاد کنید. اینها از این نحو کلی پیروی می کنند:
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
را به نام کاربری و رمز عبور ترجیحی خود به یک رمز عبور قوی انتخاب کنید:
CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
یک مشکل شناخته شده در برخی از نسخه های PHP وجود دارد که باعث ایجاد مشکل در caching_sha2_password می شود. اگر قصد دارید از این پایگاه داده با یک برنامه PHP – برای مثال phpMyAdmin – استفاده کنید، ممکن است بخواهید کاربری ایجاد کنید که با افزونه mysql_native_password قدیمیتر، هرچند هنوز امن، احراز هویت کند:
CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
اگر مطمئن نیستید، همیشه می توانید کاربری ایجاد کنید که با caching_sha2_plugin احراز هویت می کند و سپس با این دستور آن را تغییر دهید:
ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
پس از ایجاد کاربر جدید خود، می توانید امتیازات مناسب را به آنها بدهید.
اعطای مجوزهای کاربر
دستور کلی برای اعطای امتیازات کاربر به شرح زیر است:
GRANT PRIVILEGE ON database.table TO 'username'@'host';
مقدار PRIVILEGE در این نحو مثال، مشخص می کند که کاربر مجاز است چه اقداماتی را در پایگاه داده و جدول مشخص شده انجام دهد. میتوانید با جدا کردن هر کدام با کاما، چندین امتیاز را در یک دستور به یک کاربر اختصاص دهید. همچنین می توانید با وارد کردن ستاره (*) به جای پایگاه داده و نام جدول، امتیازات جهانی را به کاربر اعطا کنید. در SQL، ستاره ها کاراکترهای خاصی هستند که برای نشان دادن “همه” پایگاه داده ها یا جداول استفاده می شوند.
برای نشان دادن، دستور زیر به کاربر امتیازات جهانی برای ایجاد، تغییر و رها کردن پایگاههای داده، جداول و کاربران و همچنین قدرت درج، بهروزرسانی و حذف دادهها از هر جدول روی سرور را میدهد. همچنین به کاربر این امکان را می دهد که داده ها را با SELECT
جستجو کند، کلیدهای خارجی را با کلمه کلیدی REFERENCES
ایجاد کند و عملیات FLUSH
را با امتیاز RELOAD
انجام دهد. با این حال، شما فقط باید به کاربران مجوزهای مورد نیاز خود را بدهید، بنابراین در صورت لزوم می توانید امتیازات کاربر خود را تنظیم کنید.
می توانید لیست کامل امتیازات موجود را در اسناد رسمی MySQL بیابید.
این بیانیه GRANT را اجرا کنید، و Sammy را با نام کاربری 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 را اعطا کنند، که به آنها امتیازات ابرکاربر گسترده ای شبیه به امتیازات کاربر اصلی ارائه می دهد، مانند:
GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
چنین امتیازات گسترده ای نباید به سادگی اعطا شود، زیرا هر کسی که به این کاربر MySQL دسترسی داشته باشد، کنترل کاملی بر هر پایگاه داده روی سرور خواهد داشت.
بسیاری از راهنماها پیشنهاد میکنند که دستور FLUSH PRIVILEGES را بلافاصله پس از یک عبارت CREATE USER یا GRANT اجرا کنید تا جداول اعطا را دوباره بارگیری کنید تا مطمئن شوید که امتیازات جدید اعمال میشوند:
FLUSH PRIVILEGES;
با این حال، طبق اسناد رسمی MySQL، هنگامی که جداول کمک هزینه را به طور غیرمستقیم با یک بیانیه مدیریت حساب مانند GRANT تغییر می دهید، پایگاه داده جداول کمک هزینه را بلافاصله در حافظه بارگذاری می کند، به این معنی که دستور FLUSH PRIVILEGES در مورد ما ضروری نیست. از طرفی اجرای آن هیچ تاثیر منفی روی سیستم نخواهد داشت.
اگر نیاز به لغو مجوز دارید، ساختار تقریباً مشابه اعطای آن است:
REVOKE type_of_permission ON database_name.table_name FROM 'username'@'host';
توجه داشته باشید که هنگام لغو مجوزها، سینتکس ایجاب می کند که به جای TO
که هنگام اعطای مجوزها استفاده می کردید، از FROM
استفاده کنید.
با اجرای دستور SHOW GRANTS
می توانید مجوزهای فعلی کاربر را بررسی کنید:
SHOW GRANTS FOR 'username'@'host';
همانطور که می توانید پایگاه داده ها را با DROP
حذف کنید، می توانید از DROP
برای حذف یک کاربر استفاده کنید:
DROP USER 'username'@'localhost';
پس از ایجاد کاربر MySQL و دادن امتیازات به آنها، می توانید از MySQL خارج شوید:
exit
در آینده، برای ورود به عنوان کاربر MySQL جدید، از دستوری مانند زیر استفاده خواهید کرد:
mysql -u sammy -p
-p باعث میشود که کلاینت MySQL از شما رمز عبور کاربر MySQL را برای احراز هویت درخواست کند.
نتیجه
با دنبال کردن این آموزش، یاد گرفتید که چگونه کاربران جدید اضافه کنید و مجوزهای مختلفی را در پایگاه داده MySQL به آنها بدهید. از اینجا، میتوانید به کاوش و آزمایش تنظیمات مجوزهای مختلف برای کاربر MySQL خود ادامه دهید، یا ممکن است بخواهید درباره برخی از تنظیمات سطح بالاتر MySQL اطلاعات بیشتری کسب کنید.