私はいくつかのものをテストしていて、追加しました:
grant usage on statistics.* to cptnotsoawesome@localhost identified by 'password';
だから今私がするとき
show grants for cptnotsoawesome@localhost;
そのうちの1つは次のとおりです。
Grants for cptnotsoawesome@localhost
----------------------------------
GRANT USAGE ON *.* TO 'cptnotsoawesome'@'localhost' IDENTIFIED BY PASSWORD 'somePEW-PEWstring'
これはセキュリティ上の問題だと思うので削除したいので、次のようにします。
REVOKE USAGE ON *.* FROM 'cptnotsoawesome'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
しかし、それでも、許可リストにそのUSAGE許可が表示されます。
Grants for cptnotsoawesome@localhost
----------------------------------
GRANT USAGE ON *.* TO 'cptnotsoawesome'@'localhost' IDENTIFIED BY PASSWORD 'somePEW-PEWstring'
何かアイデアはありますか?何が悪いのですか?
内部的には、USAGEのみを持つユーザーが表示される場合、そのユーザーはすべてのグローバル権限がオフにされたmysql.userテーブルに書き込まれます。
あなたは最初にユーザーがこれを持っていると述べました:
grant usage on statistics.* to cptnotsoawesome@localhost identified by 'password';
MD5パスワードとN
に設定されたすべてのグローバル権限を持つmysql.user
の行が表示されます。 mysql.dbの行も表示されます。
あなたはこのクエリでそれらを見ることができるはずです
SELECT * FROM mysql.db
WHERE user='cptnotsoawesome'
AND Host='localhost'
AND db='statistics'\G
REVOKEコマンドを実行すると、mysql.db
から行が削除されます。これはmysql.user
の行には影響しませんでした。したがって、まだmysqlにログインして、実行する特権しか持っていません。
SHOW GLOBAL VARIABLES;
SHOW GLOBAL STATUS;
test
というテストデータベースがある場合、または最初の5文字がtest_
であるデータベースがある場合(SELECT * FROM mysql.db WHERE db LIKE 'test%';
を使用して検索します)、USAGEのみのユーザーは、データベースをテストします。 これについてはServerFault 2011で書いた 。
Mysql.userから行を削除する場合は、次のいずれかを実行できます。
DROP USER cptnotsoawesome@localhost;
または
DELETE FROM mysql.user WHERE
WHERE user='cptnotsoawesome'
AND Host='localhost';
FLUSH PRIVILEGES;
[〜#〜] usage [〜#〜]は、ユーザーに権限がないことを意味します。
You have to use 'DROP USER'.
drop user cptnotsoawesome@localhost;
ユーザーを削除せずに、実際にUSAGEを取り消すことはできません。USAGEはグローバルレベルの特権です。
このリンク をご覧ください。
この質問を見てください:-
基本的に、USAGE特権は、削除できないシステムレベルの特権のように機能します。これはMySQLによって内部的に使用されるため、特権システムを操作できます。