web-dev-qa-db-ja.com

「GRANT USAGE」は削除できません

私はいくつかのものをテストしていて、追加しました:

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' 

何かアイデアはありますか?何が悪いのですか?

15
Katafalkas

内部的には、USAGEのみを持つユーザーが表示される場合、そのユーザーはすべてのグローバル権限がオフにされたmysql.userテーブルに書き込まれます。

あなたは最初にユーザーがこれを持っていると述べました:

grant usage on statistics.* to cptnotsoawesome@localhost identified by 'password'; 

MD5パスワードとNに設定されたすべてのグローバル権限を持つmysql.userの行が表示されます。 mysql.dbの行も表示されます。

  • user = 'cptnotsoawesome'
  • Host = 'localhost'
  • db = 'statistics'
  • すべてのDBレベルの特権は 'Y'に設定されています

あなたはこのクエリでそれらを見ることができるはずです

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;
20
RolandoMySQLDBA

[〜#〜] usage [〜#〜]は、ユーザーに権限がないことを意味します。

You have to use 'DROP USER'. 

drop user cptnotsoawesome@localhost;

ユーザーを削除せずに、実際にUSAGEを取り消すことはできません。USAGEはグローバルレベルの特権です。

このリンク をご覧ください。

9
Abdul Manaf

この質問を見てください:-

https://stackoverflow.com/questions/2126225/why-is-a-grant-usage-created-the-first-time-i-grant-a-user-privileges

基本的に、USAGE特権は、削除できないシステムレベルの特権のように機能します。これはMySQLによって内部的に使用されるため、特権システムを操作できます。

2
Kiri