DBAtlas · データベース運用アトラス

リスクのあるアカウントを監査する: 空パスワード、'%' ホスト、SUPER、mysql_native_password

MySQLセキュリティ

コマンド

SELECT user, host, plugin,
       CONCAT_WS(', ',
         IF(authentication_string = '' AND account_locked = 'N', 'EMPTY PASSWORD', NULL),
         IF(host = '%', 'ANY HOST', NULL),
         IF(plugin = 'mysql_native_password', 'NATIVE AUTH', NULL),
         IF(Super_priv = 'Y', 'SUPER', NULL),
         IF(Grant_priv = 'Y', 'GRANT OPTION', NULL),
         IF(File_priv = 'Y', 'FILE', NULL),
         IF(ssl_type = '', 'NO TLS REQUIRED', NULL),
         IF(password_expired = 'Y', 'EXPIRED', NULL),
         IF(account_locked = 'Y', 'LOCKED', NULL)) AS findings,
       password_last_changed
FROM mysql.user
WHERE user NOT IN ('mysql.sys', 'mysql.session', 'mysql.infoschema')
ORDER BY (Super_priv = 'Y') DESC, user;

-- Accounts holding powerful dynamic privileges
SELECT GRANTEE, PRIVILEGE_TYPE FROM information_schema.USER_PRIVILEGES
WHERE PRIVILEGE_TYPE IN ('SUPER', 'SYSTEM_VARIABLES_ADMIN', 'CONNECTION_ADMIN', 'BINLOG_ADMIN', 'REPLICATION_SLAVE_ADMIN')
ORDER BY GRANTEE;

概要

アカウントごとのセキュリティ上の指摘事項を 1 行で一覧表示する: パスワードなし、任意の場所から接続可能、レガシー認証プラグイン、SUPER / GRANT / FILE 権限、TLS 要件なし。2 番目のクエリは危険な動的権限を表示する。

使用する場面

定期的なセキュリティ監査時、新たに引き継いだサーバー、8.4 へのアップグレード前に。

注意

このクエリは mysql.user を直接読み取るため、それに対する SELECT 権限が必要。ロールアカウントはパスワードなしでロックされているため、EMPTY PASSWORD はロックされていないアカウントについてのみ報告される。Super_priv は静的な SUPER 権限である。8.0 ではこれが動的権限に分割されたため、2 番目のクエリも確認する。NATIVE AUTH とフラグが付いたアカウントは、8.4 より前に caching_sha2_password へ移行する必要がある: ALTER USER 'u'@'h' IDENTIFIED WITH caching_sha2_password BY '...'。古いクライアント / コネクタは caching_sha2_password をサポートしていない場合があるため、先にテストする。

DBAtlas で開く →

関連項目