MySQLのuser作成 MySQL 8.0以降はROLE機能が追加 Grantでユーザ作成は不可に
  • facebookページ
  • twitterページ
  • 2020.01.22

    MySQLのuser作成 MySQL 8.0以降はROLE機能が追加 Grantでユーザ作成は不可に

    MySQL 8.0以降でのuser作成についてまとめています。

    以下、データベースとして、MySQLのサンプルデータベースEmployeesを使っています。

    MySQL 8でのユーザ作成

    MySQL8では、ROLE機能が導入されました。これまで、create userとGrant文を実行してユーザ作成・権限付与を行っていた手順に加えて、ROLEというアクセス権限のコレクションを扱えるようになりました。

    create userでユーザ作成

    ユーザ作成は、従来通り以下の構文で作成可能です。

    MySQL5.7では可能だった「GRANT文でユーザ作成と権限付与を同時に実行」ができなくなりました。以下のとおりSyntaxエラーとなります。

    create roleでROLE作成

    ROLEによる権限付与をおこなうには、まず以下のようにROLEの作成をおこないます。

    ROLEは、userと同じくmysql.userテーブルに格納されます。上記の例では、インストール直後にデフォルトで作成されるユーザに加えて、select_onlyというROLEが格納されているのが確認できます。

    grant文でROLEに権限付与、ROLEをユーザに付与

    GRANT文にて、ROLE「select_only」に、employeesデータベースの全テーブルへのselect権限を付与します。

    ROLE「select_only@localhostname」を、user0@localhostに付与します。

    ROLEは、userと全く同じ扱いなので、以下のSQLで「user0@localhostと全く同じ権限をuser1@localhostに付与する」ことも可能です。

    付与された権限は、show grantsで確認できます。

    default roleの設定

    実は、grantで権限を付与しただけではアクセスが可能になりません。default roleというログイン時に設定されるロールを設定する必要があります。

    新しく作成されたユーザ「user0」でログインしなおしてみます。

    ログインできたことと、current_role()がselect_only@localhostであることを確認できました。

    実際にemployeesデータベースのemployeesテーブルにselect文でアクセスできました。

    delete文を実行しようとすると、権限がない(command denied)エラーが起こります。

    ROLEの剥奪は、revokeを使用

    user0@localhostから、ROLE「select_only」を剥奪するには、以下のようにします。

    show grantsで、ROLEがなくなっていることが確認できました。

    まとめ

    ポテパンダの一言メモ
    • create roleでROLE作成
    • grantでROLEを付与、revokeでROLEを剥奪可能
    • MySQL 8.0以降では、grant文でユーザ作成と権限付与を自動に実行することはできなくなった


    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE