sql >> データベース >  >> RDS >> Mysql

MySQLユーザー管理

    MySQLは、世界で最も人気のあるデータベースマネージャーの1つです。信頼性、効率性、堅牢性を高める多くの機能が含まれています。正しく使用すれば最大の信頼性が得られます。データベースに対する権限が制限されたユーザーを作成することは、MySQLのセキュリティを強化するための最も簡単で信頼できる方法の1つです。

    MySQL作成ユーザー

    MySQLをインストールする場合、rootユーザー(MySQL管理者)が最初に作成されるユーザーです。 rootユーザーは、MySQLデータベースで何でもすべてを行うことができます。他の人がこのアカウントを使用してデータベースにアクセスすると便利です。

    悪意のあるユーザーは、rootユーザーとしてログインして、ホストされている情報を盗んだり、データと一緒にサービスを破壊したりする可能性があります。したがって、システム管理者は、データベースに対する特定の権限を持つユーザーを作成する必要があります。これにより、そのユーザーのセキュリティが危険にさらされた場合でも、影響を最小限に抑えるか、管理しやすくなります。

    MySQL Create Userステートメントを使用すると、データベースサーバーに新しいユーザーアカウントを作成できます。これは、新しいアカウントの認証、リソース制限、役割、およびパスワード管理のプロパティを提供します。このステートメントにより、ロックまたはロック解除する必要のあるアカウントを制御することもできます。

    ユーザーを作成するには、「CREATEUSER」ステートメントのグローバル権限(rootユーザー)またはMySQLシステムスキーマのINSERT権限が必要です。すでに存在するユーザーを作成しようとするとエラーが表示されますが、「IF NOT EXISTS」句を使用すると、ステートメントはエラーメッセージの代わりに、すでに存在する名前付きユーザーごとに警告を表示します。

    root以外のユーザーを作成し、データベースにアクセスして変更するための特定の権限を付与するには、次の構文を使用します。

    CREATE USER IF NOT EXISTS 'fosslinux'@'localhost' IDENTIFIED BY 'foss12345';

    account_nameには2つの部分があります。 @記号で区切られたユーザー名とホスト名。ユーザー名はユーザーの名前であり、ホスト名はユーザーがデータベースサーバーに接続できるホストの名前です。

    username@hostname

    ホスト名はオプションです。ホスト名が指定されていない場合、ユーザーはサーバー上の任意のホストから接続できます。ホスト名のないユーザーアカウント名は、username @%

    と書くことができます。
    CREATE USER IF NOT EXISTS 'fosslinux@%' IDENTIFIED BY 'foss12345';

    create userステートメントは、フルアクセス権を持つ新しいユーザーを作成することに注意してください。ユーザーに特権を与えるには、GRANTステートメントを使用します

    次の手順を使用して、MySQLデータベースに新しいユーザーを作成します。

    1. MySQLクライアントツールを使用して、MySQLサーバーを開きます

    2.パスワードを入力し、Enterキーを押します。

    3.次のコマンドを使用して新しいユーザーを作成します

    create user 'foss'@'localhost' identified by 'foss12345'; 

    4.次のコマンドを使用して、MySQLサーバーのユーザーを表示します

    select user from mysql.user;

    表示された出力から、ユーザー「foss」は正常に作成されました。

    5.次に、次のコマンドを実行して、CREATEUSERステートメントでIFNOTEXISTS句を使用します。

    MySQLの新規ユーザーに特権を付与する

    MySQLサーバーによって新しいユーザーに提供される最も一般的な特権には次のものがあります。

    1. すべての特権: 新しいユーザーアカウントへのすべての特権を許可します

    2. 作成: ユーザーアカウントがデータベースとテーブルを作成できるようにします

    3. ドロップ: ユーザーアカウントがデータベースとテーブルを削除できるようにします

    4. 削除: ユーザーアカウントが特定のテーブルから行を削除できるようにします

    5. 挿入: ユーザーアカウントが特定のテーブルに行を挿入できるようにします

    6. 選択: ユーザーアカウントがデータベースを読み取れるようにします

    7. 更新: ユーザーアカウントがテーブルの行を更新できるようにします

    次のコマンドを実行して、すべての権限をユーザーに付与します

    GRANT ALL PRIVILEGES ON *.* TO 'foss'@'localhost';

    次のコマンドを実行して、新しく作成したユーザーに特定の権限を付与します。

    GRANT CREATE, SELECT, INSERT ON *.* TO 'foss'@'localhost';

    ユーザーに割り当てられているすべての特権をフラッシュするには、以下のコマンドを実行します。

    FLUSH PRIVILEGES;

    ユーザーに割り当てられている既存の権限を確認するには、次のコマンドを実行します。

    SHOW GRANTS FOR 'foss'@'localhost';

    MySQLDropユーザー

    MySQL Drop Userステートメントを使用すると、1つ以上のユーザーアカウントとその特権をデータベースサーバーから削除できます。ユーザーアカウントがデータベースサーバーに存在しない場合、エラーが返されます。

    Drop Userステートメントを使用するには、MySQLシステムスキーマのグローバル権限またはDELETE権限が必要です。

    データベースサーバーからユーザーアカウントを完全に削除するための構文は次のとおりです。

    DROP USER 'foss'@'localhost';

    注: 上記の例のアカウント名は、username@hostnameとして識別されます。ユーザー名はデータベースサーバーから削除するアカウントの名前であり、ホスト名はサーバーのユーザーアカウントの名前です。たとえば、「foss@localhost」。 フォス はユーザー名ですが、 localhost はホスト名です。

    以下は、MySQLサーバーデータベースから既存のユーザーを削除する際に従うべき手順です。

    1. MySQLクライアントツールを使用して、MySQLサーバーを開きます

    2.アカウントのパスワードを入力し、Enterキーを押します

    3.ユーザーアカウントを削除するには、次のコマンドを実行します

    DROP USER 'fosslinux'@'localhost';

    4.次のコマンドを実行して、ユーザーを表示します

    select user from mysql.user; 

    以下に示すように、ユーザー名fosslinuxが存在しない出力が表示されます。

    5. Dropユーザーを使用して、一度に複数のユーザーアカウントを削除することもできます。これを行うには、コンマを使用してaccount_namesを区切ります。

    注: すでにユーザーを削除しているので、ユーザーの作成の概念(fosslinuxtutsとfosslinux @%)を使用して2人のユーザーを作成します。その後、手順4でコマンドを実行して、以下に示すように既存のユーザーを表示します。

    次に、以下のコマンドを使用して2人のユーザーを同時にドロップします。次のコマンドを実行して、両方のユーザーをドロップします。

    DROP USER 'fosslinuxtuts'@'localhost', 'fosslinux@%' ;

    DROPステートメントは、開いているユーザーセッションを自動的に閉じることができないことに注意してください。ユーザーアカウントセッションがアクティブなときにDROPステートメントが実行されると、そのセッションが閉じられるまで、コマンドはそれに影響を与えません。ユーザーアカウントは、セッションが閉じられたときにのみ削除され、ユーザーの次回の試行では再度ログインできなくなります。

    MySQL show users / list all users

    MySQLでデータベースを管理するには、データベース内のすべてのユーザーのアカウントのリストを表示する必要があります。人々は、データベースサーバーで利用可能なすべてのユーザーのリストを表示するためのSHOWDATABASEまたはSHOWTABLESに似たSHOWUSERSコマンドがあると想定しています。残念ながら、MySQLサーバーには、MySQLサーバー内のすべてのユーザーのリストを表示するSHOWUSERSコマンドがありません。したがって、代わりに、次のクエリを使用して、データベースサーバー内のすべてのユーザーのリストを表示します。

    select user from mysql.user;

    コマンドを実行すると、MySQLデータベースサーバーのユーザーテーブルからユーザーデータを取得します。

    注: この例では、MySQLデータベースを使用します。以下のコマンドを実行してデータベースを選択し、select fromステートメントを使用して、以下の画像に示すように既存のユーザーを確認します。

    use mysql;
    SELECT user FROM user;

    ユーザーテーブルの詳細を確認するには、次のコマンドを実行します。

    DESC user;

    このコマンドは、mysql.userデータベースの使用可能なすべての列を一覧表示する次の出力を提供します。

    ホスト名、パスワードの有効期限ステータス、アカウントのロックなどの選択した情報を取得するには、次のクエリを実行します。

     SELECT user, host, account_locked, password_expired FROM user;

    クエリが正常に実行されると、次の出力が表示されます。

    現在のユーザーを表示

    以下に示すように、user()またはcurrent_user()関数を使用して、現在のユーザーの情報を取得できます。

    Select user(); 

    または

    Select current_user();

    上記のコマンドのいずれかを正常に実行すると、次の出力が表示されます。

    現在ログに記録されているユーザーを表示

    MySQLサーバーで次のコマンドを使用すると、データベースサーバーに現在ログインしているユーザーを確認できます。

    SELECT user, host, db, command FROM information_schema.processlist;

    上記のコマンドは、以下に示すものと同様の画面を出力します。

    MySQLユーザーパスワードを変更する方法

    MySQLユーザーレコードには、データベースにアクセスして管理するためのMySQLアカウントのログイン情報、アカウント権限、およびホスト情報が含まれています。ログイン情報には、ユーザー名とパスワードが含まれます。したがって、MySQLデータベースのユーザーパスワードを変更する必要がある場合があります。

    ユーザーアカウントのパスワードを変更するには、次の情報に注意してください。

    • 変更するユーザーアカウントの詳細
    • アプリケーションは、パスワードを変更するユーザーアカウントによって使用されます。アプリケーション接続文字列を変更せずにユーザーアカウントのパスワードがリセットされた場合、アプリケーションはデータベースサーバーに接続できません。

    MySQLでは、次の3つの方法でユーザーアカウントのパスワードを変更できます。

    1. UPDATEステートメント
    2. SETPASSWORDステートメント
    3. ALTERUSERステートメント

    UPDATEステートメントを使用したユーザーアカウントのパスワードの変更

    UPDATEステートメントを実行した後、FLUSH PRIVILEGEステートメントを使用して、MySQLデータベースの付与テーブルから特権をリロードします。
    ローカルホストからパスワードfoss12345で接続するユーザーアカウントfossのパスワードを変更するとします。次のコマンドを実行します:

    USE mysql;
    UPDATE user SET password=password('kip12345') WHERE user='foss'; 
    FLUSH PRIVILEGES;

    MySQLユーザーテーブルにはパスワードのみを格納する認証文字列列が含まれているため、上記のステートメントはMySQLバージョン5.7.6以降では機能しません。上位バージョンでは、次のステートメントに示すように、UPDATEステートメントに認証文字列列があります。

    USE mysql;
    UPDATE user SET authentication_string = password('foss12345') WHERE user = 'foss';

    FLUSH PRIVILEGES;

    注: この方法は、古いバージョンのMySQLでのみ機能します。したがって、MySQLの新しいバージョンまたは最新のバージョンを使用している場合は、他の方法にスキップしてください。

    SETPASSWORDステートメントを使用したユーザーアカウントのパスワードの変更

    別のアカウントパスワードを変更する場合は、UPDATE権限が必要です。ステートメントは、次の形式のユーザーアカウントを使用します:username @ localhost

    FLUSHPRIVILEGESを使用してMySQLデータベースのrantテーブルから特権を再ロードする必要はありません。 SET PASSWORDステートメントを使用してユーザーアカウント(foss)のパスワードを変更するには、次のステートメントを使用します。

    SET PASSWORD FOR 'foss'@'localhost' = PASSWORD('foss12345');

    MySQLバージョン5.7.6以降を使用している場合、上記のステートメントは非推奨であり、将来のリリースでは機能しません。代わりに、次のステートメントを使用してください。

    SET PASSWORD FOR 'foss'@'localhost' = 'foss12345';

    ALTERUSERステートメントを使用したユーザーアカウントのパスワードの変更

    MySQLは、IDENTIFIEDBY句でALTERUSERステートメントを使用します。これを行うには、次の構文を使用します。

    ALTER USER 'foss'@'localhost' IDENTIFIED BY 'foss12345';

    MySQLルートアカウントのパスワードをリセットする必要がある場合があります。これを行うには、許可テーブルの検証を使用せずに、MySQLデータベースサーバーを強制的に停止してから再起動します。

    結論

    この記事では、MySQLユーザー管理に関するすべての側面を包括的にカバーしています。問題の解決策を提供するのに十分詳細であると信じています。 MySQLを使用しているユーザーを表示しているときにエラーや問題が発生した場合は、コメントセクションからサポートを受けてください。読んでくれてありがとう。


    1. MySQLデータベースの使い方を学ぶ

    2. COALESCEとISNULLのどちらが速いですか?

    3. 行を連結するときにFORXMLPATH('')がどのように機能するか

    4. 再帰CTEで重複アイテムを検出する