MySQLで新しいユーザーを作成し、権限を付与する方法

0 株式
0
0
0
0

MySQLで新しいユーザーを作成し、権限を付与する方法

導入

MySQLはオープンソースのリレーショナルデータベース管理システムです。LAMPスタック(Linux、Apache、MySQL、PHPの略)の一部として広く使用されており、この記事の執筆時点では、世界で最も人気のあるオープンソースデータベースです。.

このガイドでは、新しい MySQL ユーザーを作成し、さまざまなアクションを実行するために必要な権限を付与する方法について説明します。.

前提条件

このガイドを実行するには、MySQLデータベースへのアクセスが必要です。このガイドでは、データベースがUbuntu 20.04を実行する仮想プライベートサーバーにインストールされていることを前提としていますが、ここで説明する原則は、データベースへのアクセス方法に関係なく適用されます。.

MySQLデータベースにアクセスできず、自分で設定したい場合は、MySQLのインストール方法に関するガイドをご覧ください。繰り返しになりますが、サーバーのオペレーティングシステムに関係なく、新しいMySQLユーザーを作成し、権限を付与する手順は通常同じです。.

新しいユーザーを作成する

インストール後、MySQL はユーザー アカウントを作成します。 データベースの管理に使用できるユーザーを作成します。このユーザーはMySQLサーバー上で完全な権限を持ち、すべてのデータベース、テーブル、ユーザーなどを完全に制御できます。そのため、管理機能以外ではこのアカウントを使用しないことをお勧めします。この手順では、MySQLのルートユーザーを使用して新しいユーザーアカウントを作成し、権限を付与する方法を説明します。.

MySQL 5.7以降を実行しているUbuntuシステムでは、MySQLのルートユーザーはデフォルトでパスワードではなくauth_socketプラグインを使用して認証されます。このプラグインでは、MySQLクライアントを起動するオペレーティングシステムのユーザー名と、コマンドで指定されたMySQLユーザー名が一致する必要があります。つまり、MySQLのルートユーザーにアクセスするには、mysqlコマンドの前にsudoを付けて、Ubuntuのルートユーザーの権限で起動する必要があります。

$ 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 اطلاعات بیشتری کسب کنید.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

あなたも気に入るかもしれない