あなたの質問は答えが難しいものでしたが、最終的にどのような種類の特権も割り当てられていないユーザーアカウントを表示するための「単純な」クエリが得られました。今、私たちのDB :)
をきれいにするために、クエリを理解するために、それが一定のレベルに
まずレベルを分割しましょう、列レベルのアクセス権を持っていないすべてのユーザーを一覧表示します。
第2レベルでは、テーブルレベルの権限を持たないユーザーと、列レベルのアクセス権を持たないユーザーのみを一覧表示します。
SELECT B.User FROM mysql.user B LEFT JOIN mysql.tables_priv ON (mysql.tables_priv.User = B.User) WHERE
mysql.tables_priv.Db IS NULL AND (Table_priv=0 OR Table_priv IS NULL) AND (Column_priv=0 OR Column_priv IS NULL)
AND B.User IN (
SELECT C.User FROM mysql.user C LEFT JOIN mysql.columns_priv ON (mysql.columns_priv.User = C.User) WHERE
(Column_priv=0 OR Column_priv IS NULL) AND mysql.columns_priv.Db IS NULL)
第三レベル、リストのデータベースレベルの権限を持たないユーザー、およびリストだけ前の2つのクエリのアクセスを持っていない人。
SELECT A.User FROM mysql.user A LEFT JOIN mysql.db ON (mysql.db.User = A.User) WHERE
mysql.db.Db IS NULL
AND A.User IN (
SELECT B.User FROM mysql.user B LEFT JOIN mysql.tables_priv ON (mysql.tables_priv.User = B.User) WHERE
mysql.tables_priv.Db IS NULL AND (Table_priv=0 OR Table_priv IS NULL) AND (Column_priv=0 OR Column_priv IS NULL)
AND B.User IN (
SELECT C.User FROM mysql.user C LEFT JOIN mysql.columns_priv ON (mysql.columns_priv.User = C.User) WHERE
(Column_priv=0 OR Column_priv IS NULL) AND mysql.columns_priv.Db IS NULL)
)
第3レベルでは、データベースレベルでアクセスできるユーザーを確認し、テーブル/列レベルのアクセス権を持たないユーザーのみを一覧表示します。
最後に、
SELECT mysql.user.Host, mysql.user.User
FROM mysql.user WHERE mysql.user.User IN (
SELECT A.User FROM mysql.user A LEFT JOIN mysql.db ON (mysql.db.User = A.User) WHERE
mysql.db.Db IS NULL
AND A.User IN (
SELECT B.User FROM mysql.user B LEFT JOIN mysql.tables_priv ON (mysql.tables_priv.User = B.User) WHERE
mysql.tables_priv.Db IS NULL AND (Table_priv=0 OR Table_priv IS NULL) AND (Column_priv=0 OR Column_priv IS NULL)
AND B.User IN (
SELECT C.User FROM mysql.user C LEFT JOIN mysql.columns_priv ON (mysql.columns_priv.User = C.User) WHERE
(Column_priv=0 OR Column_priv IS NULL) AND mysql.columns_priv.Db IS NULL)
)
) AND CONCAT(Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv,Reload_priv,Shutdown_priv,Process_priv,File_priv,Grant_priv,References_priv,Index_priv,Alter_priv,Show_db_priv,Super_priv,Create_tmp_table_priv,Lock_tables_priv,Execute_priv,Repl_slave_priv,Repl_client_priv,Create_view_priv,Show_view_priv,Create_routine_priv,Alter_routine_priv,Create_user_priv,Event_priv,Trigger_priv,Create_tablespace_priv) NOT LIKE '%Y%'
グローバルアクセス権が割り当てられておらず、他のサブクエリの基準に一致するもののみをリストします。
EDIT
"プリティ・ストレート":このクエリでのみ5.5バージョンでテストされたよう、フィードバックをお願いします。
インストール済みの完全なMySQLサーバのバージョン –
'5.0.51a-24 + lenny5-log'、 、' 5.5.54-0 + deb7u2'、 '5.6.35'の3つの異なるサーバにそれぞれ提供してください – TomRA