MySQL道普請便り

第114回 MySQL 8.0から使えるさまざまな権限について

この記事を読むのに必要な時間:およそ 2 分

MySQLには,さまざまな操作や動作レベルにおいて適用される権限があります。それらは権限レベルによって分けられています。権限レベルについては,以前の記事 第69回 MySQLの権限レベルについてをご参照ください。

また権限の管理方法として,MySQL 5.7とそれ以前までは,静的権限のみで管理されていました。MySQL 8.0からは動的権限が追加されました。静的権限はすでにサーバに組み込まれた権限であり,動的権限はほとんどのものがサーバ起動時に定義されます。中にはプラグインやコンポーネントをインストールすることによって定義されるものもあります。

今回は,MySQL 8.0から追加された権限について紹介したいと思います。MySQLは2020/01/10現在最新のMySQL 8.0.18を使用しています。

静的権限

MySQL 8.0から新たに追加された権限はCREATE ROLEDROP ROLEの2つになります。これらは新機能のロールを扱うための権限です。

ロールについてはすでに以前の記事で説明していますので,そちら第102回 MySQLのROLE[その1]MySQLのROLE[その2]をご参照ください。

動的権限

動的権限はMySQL 8.0から追加されました。MySQL 5.7とそれ以前までは,スレッドを強制終了するためのKILLや,CHANGE MASTER TOステートメントなど,さまざまな管理操作が実行可能な強力な特権をもつ,SUPER権限を使用していました。この権限は今後のバージョンで削除される予定です。MySQL 8.0ではすでに非推奨になっています。

MySQL 8.0からは,SUPER権限を必要としていた多くの操作が細分化され,動的権限として付与できるようになりました。セキュリティの向上のためにも,アカウントには目的の操作のみを実行できる権限を設定するように推奨されています。

以下が動的権限の一覧になります。

  • APPLICATION_PASSWORD_ADMIN … セカンダリパスワードを操作を有効にします。セカンダリパスワードについては第90回 デュアルパスワード機能でパスワードを便利に変更するをご確認ください。
  • AUDIT_ADMIN … 監査ログの構成を有効にします。audit_logプラグインにより定義されます。
  • BACKUP_ADMIN … LOCK INSTANCE FOR BACKUPステートメントの実行とperformance_schema.log_statusテーブルへのアクセスを有効にします。
  • BINLOG_ADMIN … PURGE BINARY LOGSおよびBINLOGステートメントを使用してバイナリログ制御を有効にします。
  • BINLOG_ENCRYPTION_ADMIN … バイナリログとリレーログの暗号化を管理するシステム変数binlog_encryptionの設定を有効にします。
  • CLONE_ADMIN … CLONEステートメントの実行を有効にします。BACKUP_ADMINとSHUTDOWN特権が含まれています。
  • CONNECTION_ADMIN …
    • KILLステートメントまたはmysqladmin killコマンドの使用を有効にします。
    • init_connectシステム変数のコンテンツを実行しません。
    • max_connectionsシステム変数で設定された接続制限に達した場合でも,サーバはクライアントから1つの接続を受け入れます。
    • offline_modeが有効の場合でも新しい接続が可能です。
    • read_onlyシステム変数が有効になっている場合でも更新を実行できます。
  • ENCRYPTION_KEY_ADMIN … InnoDB暗号化キーのローテーション を有効にします。
  • GROUP_REPLICATION_ADMIN … START GROUP REPLICATIONやSTOP GROUP REPLICATIONステートメントなどを使用して,グループレプリケーションの操作を有効にします。
  • INNODB_REDO_LOG_ARCHIVE … InnoDB REDOログのアーカイブを有効化および無効化できるようにします。
  • PERSIST_RO_VARIABLES_ADMIN … SYSTEM_VARIABLES_ADMINも持っているユーザーの場合,SET PERSIST_ONLYを使用して,データディレクトリのmysqld-auto.cnfオプションファイルにグローバルシステム変数を保持できます。
  • REPLICATION_APPLIER … アカウントがレプリケーションチャネルのPRIVILEGE_CHECKS_USERとして機能し,mysqlbinlog出力でBINLOGステートメントを実行できるようにします。
  • REPLICATION_SLAVE_ADMIN … レプリケーション操作を有効にします。
  • RESOURCE_GROUP_ADMIN … リソースグループに関連するすべての操作を実行できます。
  • RESOURCE_GROUP_USER … リソースグループへのスレッドとステートメントの割り当てを有効にします。
  • ROLE_ADMIN … ロールの付与と取り消しの操作を有効にします。
  • SESSION_VARIABLES_ADMIN … binlog_formatやsql_log_binなどのセッション値を設定するために,特別な権限が必要なシステム変数を設定できます。
  • SET_USER_ID … ビューまたはストアドプログラムを実行するときに,有効な認証IDを設定できるようにします。
  • SYSTEM_USER … システムユーザーと通常のユーザーを区別します。
  • SYSTEM_VARIABLES_ADMIN … グローバルシステム変数に対するサーバ構成の変更を有効にします。
  • TABLE_ENCRYPTION_ADMIN … table_encryption_privilege_checkシステム変数が有効な場合,ユーザーがデフォルトの暗号化設定を上書きできるようにします。
  • VERSION_TOKEN_ADMIN … バージョントークンのユーザー定義関数の実行を有効にします。
  • XA_RECOVER_ADMIN … XA RECOVERステートメントの実行を有効にします。

まとめ

MySQL 8.0から追加された権限について紹介しました。今後はSUPER権限が削除される予定です。アカウントには,管理操作単位で権限を設定するようにしましょう。詳しい内容は,6.2.2 Privileges Provided by MySQLをご確認ください。

著者プロフィール

北川健太郎(きたがわけんたろう)

LINE株式会社所属のデータベースエンジニア。担当はMySQLとOracle Database。好きなMySQLの機能はレプリケーションで,好きなOracleDatabaseの機能はログオントリガー。

Twitter:@keny_lala