MySQLアクセス制御とユーザー管理


アクセス制御
 ユーザーに必要なアクセス権を提供し、必要なアクセス権のみを提供する必要があります.これはいわゆるアクセス制御であり、管理アクセス制御にはユーザーアカウントの作成と管理が必要である.
  • 多くのユーザーはテーブルの読み取りと書き込みしか必要ありませんが、少数のユーザーはテーブルの作成と削除さえ必要とします.
  • 一部のユーザーはテーブルを読む必要がありますが、テーブルを更新する必要はありません.
  • ユーザーにデータの追加を許可したいかもしれませんが、データの削除は許可されません.
  • 一部のユーザー(管理者)は、ユーザーアカウントを処理する権限を必要とする場合がありますが、多くのユーザーは必要ありません.
  • ユーザーにストレージ・プロシージャを介してデータにアクセスさせたい場合がありますが、直接データにアクセスすることはできません.
  • ユーザーがログインした場所に基づいて、いくつかの機能へのアクセスを制限したい場合があります.

  •  rootを使用しないでrootログインの使用を厳粛に扱うべきです.絶対必要な場合にのみ使用します(他の管理アカウントにログインできない場合に使用するかもしれません).日常のMySQL操作でrootを使用するべきではありません.
    ユーザーの管理
    mysql> USE mysql;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> SELECT user FROM user;
    +------------------+
    | user             |
    +------------------+
    | debian-sys-maint |
    | mysql.infoschema |
    | mysql.session    |
    | mysql.sys        |
    | root             |
    +------------------+
    5 rows in set (0.00 sec)
    
  • mysqlデータベースにはuserというテーブルがあり、すべてのユーザーアカウントが含まれています.userテーブルには、ユーザーログイン名を格納するuserというカラムがあります.

  • ユーザーアカウントの作成
    mysql> CREATE USER ben IDENTIFIED BY 'p@$$w0rd';
    Query OK, 0 rows affected (0.06 sec)
    
  • CREATE USERは新しいユーザーアカウントを作成します.ユーザーアカウントを作成するときにパスワードは必要ありません.
  • ハッシュ・パスワードIDENTIFIED BYで指定されたパスワードは純粋なテキストであり、MySQLはuserテーブルに保存する前に暗号化されます.ハッシュ値としてパスワードを指定するには、IDENTIFIED BY PASWORDを使用します.
  • GRANTまたはINSERT GRANT文(後述)を使用してユーザーアカウントを作成することもできますが、一般的にCREATE USERは最も明確で最も簡単な文です.また、userテーブルに行を直接挿入することでユーザーを増やすこともできますが、安全のため、一般的には推奨されません.MySQLユーザーアカウント情報を格納するためのテーブル(およびテーブルモードなど)は極めて重要であり、それらの破壊はMySQLサーバに深刻なダメージを与える可能性があります.したがって、直接処理に対して、これらのテーブルをタグと関数で処理することが望ましい.

  • アカウント名の変更
    mysql> RENAME USER ben TO bforta;
    Query OK, 0 rows affected (0.01 sec)
    
  • MySQL 5以前はMySQL 5以降のみRENAME USERをサポートしていました.以前のMySQLでユーザーの名前を変更するには、UPDATEを使用してuserテーブルを直接更新します.

  • ユーザーアカウントの削除
    mysql> DROP USER bforta;
    Query OK, 0 rows affected (0.00 sec)
    
  • MySQL 5以前、DROP USERはユーザーアカウントを削除するだけで、関連する権限を削除することはできませんでした.したがって、旧バージョンのMySQLを使用する場合は、REVOKEでアカウントに関する権限を削除してからDROP USERでアカウントを削除する必要があります.

  • アクセス権の設定
    SHOW GRANTS FOR username@localhost;
    
  • ユーザーアカウントに付与された権限を見るためにSHOW GRANTS FORを使用する.
  • ユーザー定義user@hostMySQLの権限は、ユーザー名とホスト名で定義されます.ホスト名を指定しない場合は、デフォルトのホスト名%を使用します(ホスト名に関係なくユーザーにアクセス権を付与します).

  • 権限を設定するには、GRANT文を使用します.GRANTは少なくとも以下の情報を要求します.
  • に付与される権限.
  • アクセス権が付与されたデータベースまたはテーブル.
  • ユーザー名.
  • GRANT SELECT ON crashcourse.* TO bforta;
    
  • このGRANTは、crashcourse.*(crashcourseデータベースのすべてのテーブル)にSELECTを使用します.SELECTアクセスのみを付与することで、ユーザーbfortaはcrashcourseデータベース内のすべてのデータに読み取り専用アクセス権を有します.

  • GRANTのリバースはREVOKEとして,それを用いて特定の権限を取り消す.
    REVOKE SELECT ON crashcourse.* FROM bforta;
    
  • このREVOKE文は、ユーザbfortaに付与されたばかりのSELECTアクセス権を取り消します.取り消されたアクセス権は存在する必要があります.そうしないとエラーが発生します.

  • GRANTおよびREVOKEは、アクセス権をいくつかの階層で制御できます.
  • サーバ全体で、GRANT ALLとREVOKE ALLを使用します.
  • データベース全体で、ON database.*を使用します.
  • 特定のテーブルは、ON databaseを使用する.table;
  • 特定の列.
  • 特定のストレージ・プロシージャ.

  • 付与または取り消すことができる各権限をリストします.
    アクセス権
    説明
    ALL
    GRANT OPTION以外のすべての権限
    ALTER
    ALTER TABLEの使用
    ALTER ROUTINE
    ALTER PROCEDUREとDROP PROCEDUREの使用
    CREATE
    CREATE TABLEの使用
    CREATE ROUTINE
    CREATE PROCEDUREの使用
    CREATE TEMPORARY TABLES
    CREATE TEMPORARY TABLEの使用
    CREATE USER
    CREATE USER、DROP USER、RENAME USER、REVOKE ALL PRIVILEGESを使用
    CREATE VIEW
    CREATE VIEWの使用
    DELETE
    DELETEの使用
    DROP
    DROP TABLEの使用
    EXECUTE
    CALLとストレージ・プロシージャの使用
    FILE
    SELECT INTO OUTFILEとLOAD DATA INFILEを使用
    GRANT OPTION
    GRANTとREVOKEの使用
    INDEX
    CREATE INDEXとDROP INDEXの使用
    INSERT
    INSERTの使用
    LOCK TABLES
    LOCK TABLESの使用
    PROCESS
    SHOW FULL PROCESSLISTを使用
    RELOAD
    FLUSHの使用
    REPLICATION CLIENT
    サーバの場所へのアクセス
    REPLICATION SLAVE
    レプリケーション依存で使用
    SELECT
    SELECTを使う
    SHOW DATABASES
    SHOW DATABASESを使う
    SHOW VIEW
    SHOW CREATE VIEWを使う
    SHUTDOWN
    mysqladmin shutdownの使用(MySQLを閉じるために使用)
    SUPER
    CHANGE MASTER、KILL、LOGS、PURGE、MASTER、SET GLOBALを使用します.mysqladminデバッグログインも許可
    UPDATE
    UPDATEの使用
    USAGE
    アクセス権なし
  • 将来のライセンスGRANTとREVOKEを使用する場合、ユーザーアカウントは存在する必要がありますが、関連するオブジェクトにはこの要求はありません.これにより、管理者はデータベースとテーブルを作成する前にセキュリティ対策を設計および実装できます.このような副作用は、データベースまたはテーブルが削除された場合(DROP文で)、関連するアクセス権が依然として存在することです.また、将来データベースまたはテーブルを再作成する場合も、これらの権限は機能します.
  • 複数の許可を簡略化するには、各権限をリストし、カンマで区切ることによって、複数のGRANT文を
  • に直列化することができる.
    パスワードの変更
    mysql> SET PASSWORD FOR bforta=PASSWORD ('P@ssW0rd');
    Query OK, 0 rows affected (0.01 sec)
    
  • SET PASSWORDユーザーパスワードを更新します.新しいパスワードはPassword()関数に渡されて暗号化する必要があります.
  • SET PASWORDは、自分のパスワード
  • を設定するためにも使用できます.
    mysql> SET PASSWORD =PASSWORD ('P@ssW0rd');
    Query OK, 0 rows affected (0.01 sec)
    
  • ユーザー名が指定されていない場合、SET PASWORDは現在のログインユーザーのパスワードを更新します.