ユーザー アクセス制御の問題に直面しています。より明確にするために、私が作成した mysql ユーザーは、私がアクセスを許可したテーブル以外のテーブルにアクセスできます。root として mysql にログインし、多くのデータベースがあり、データベース "test" には多くのテーブルがあり、そのうちの 1 つが "news" であるとします。「test.news」から「選択」値にのみアクセスできるユーザーを作成したいと思います。これはそれがどのように見えたかです:
mysql> grant select on test.news to 'new_user2'@'localhost' identified by 'XXXXXXX';
Query OK, 0 rows affected (0.00 sec)
フラッシュされた特権:flush privileges;
ここでログアウトし、new_user2 としてログインします。
/opt/lampp/bin/./mysql -u new_user2 -p
そこにデータベースを見たい:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
+--------------------+
2 rows in set (0.00 sec)
「root」アカウントには、new_user2 には見えない他のデータベースがあったという意味で、これは良いことでした。次に、テスト中のテーブルを見たいと思いました。そう-
use test;
show tables;
これは私にとって最初のショックです..「テスト」データベースにすべてのテーブルがありましたが、これは予期していませんでした。私が見たかったのは「ニュース」テーブルだけでした。それとも、データベース内の 1 つのテーブルへのアクセス権を与えられたすべてのユーザーが実際にすべてのテーブルを表示できるのは正常ですか?
2 度目のショックで、select *
別のテーブル「ユーザー」に使用しました。これは本質的に「テスト」の別のテーブルであり、ユーザー テーブルのすべての内容を確認できました。
では、"new_user2" を作成し、test.news へのアクセスのみを許可した場合、どのようにして test.user にアクセスできるのでしょうか? select * from news
正常に動作しています..
「テスト」データベースの他のすべてのテーブルへのアクセスを本当に制限しましたか? そうでない場合、どうすればよいですか?
わかった。これでは不十分であるかのように、'root' によって作成されたテーブルを実際に削除できます。
mysql> drop table member;
Query OK, 0 rows affected (0.42 sec)
これらは、ルートにログインしたときの「new_user2」@「localhost」の許可です...
mysql> SHOW GRANTS FOR 'new_user2'@'localhost';
+------------------------------------------------------------------------------------------------------------------+
| Grants for new_user2@localhost |
+------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'new_user2'@'localhost' IDENTIFIED BY PASSWORD '*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' |
| GRANT SELECT ON `test`.`news` TO 'new_user2'@'localhost' |
+------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
ここで基本的な何かが欠けているように感じます。これを助けてください。どうもありがとう。