Python 随机用户可以访问mysql数据库

Python 随机用户可以访问mysql数据库,python,mysql,python-2.7,Python,Mysql,Python 2.7,我正在编写一个关于python和MySQL(MySQLdb,PyQT)的应用程序,并且面临一个问题。 我碰巧在登录表单上输入了一个随机值,这个随机用户可以访问数据库。此用户不能使用SELECT,但可以使用INSERT! 我是MySQL的新手,这是我第一次面对这样的问题。我看到的问题和我问的一样,但有一个随机用户可以登录到db,但没有做任何事情的权限。 我查看了MYSQL.user表,没有用户名的用户无权操作数据。输出如下所示 | localhost | root

我正在编写一个关于python和MySQL(MySQLdb,PyQT)的应用程序,并且面临一个问题。 我碰巧在登录表单上输入了一个随机值,这个随机用户可以访问数据库。此用户不能使用SELECT,但可以使用INSERT! 我是MySQL的新手,这是我第一次面对这样的问题。我看到的问题和我问的一样,但有一个随机用户可以登录到db,但没有做任何事情的权限。 我查看了MYSQL.user表,没有用户名的用户无权操作数据。输出如下所示

| localhost                | root             | Y           | Y           | Y               |
| 127.0.0.1                | root             | Y           | Y           | Y           |
| localhost                |                  | N           | N           | N           |
......

有人能告诉我为什么会发生这种情况,有没有解决办法?

是的,mysql中当然有解决问题的办法

使用GRANT和REVOKE来执行此操作,它们位于SQL中的数据控制语言下

我正在举例说明如何使用它

mysql> revoke all privileges on *.* from 'root'@'localhost';
使用这个查询,我撤销了root用户对所有数据库的所有表的所有权限。 如果我想在任何特定的数据库中使用它,那么

mysql> revoke all privileges on exampledatabase.* from 'root'@'localhost';
如果我想在任何特定的表格中使用这个

mysql> revoke all privileges on exampledatabase.mytable from 'root'@'localhost';
mysql> revoke select on exampledatabase.mytable from 'root'@'localhost';
mysql> grant select on exampledatabase.mytable
   to 'root'@'localhost' identified by password
   '*A4B6157319038724E3560894F7F932C8886EBFCF' with grant option ;
如果我想在任何特定的表中限制特定的权限,那么

mysql> revoke all privileges on exampledatabase.mytable from 'root'@'localhost';
mysql> revoke select on exampledatabase.mytable from 'root'@'localhost';
mysql> grant select on exampledatabase.mytable
   to 'root'@'localhost' identified by password
   '*A4B6157319038724E3560894F7F932C8886EBFCF' with grant option ;
现在我想为根用户授予一个特殊的特权,以防出现特殊的表

mysql> revoke all privileges on exampledatabase.mytable from 'root'@'localhost';
mysql> revoke select on exampledatabase.mytable from 'root'@'localhost';
mysql> grant select on exampledatabase.mytable
   to 'root'@'localhost' identified by password
   '*A4B6157319038724E3560894F7F932C8886EBFCF' with grant option ;

我想这与您在mysql上设置的数据库权限有关,而不是MySQLDBM。我猜您需要在python端控制访问。如何构造连接字符串?请告诉我您没有为每个应用程序用户创建mysql用户。谢谢。糟糕的是,我真的想创建不同的应用程序用户作为不同的db用户。但即使我为访问控制创建一组表,也无法解决问题的根源。每个人都可以通过命令shell编辑这些用户表。你知道吗?为什么不使用mysql的访问权限?你能举个例子吗?如上面的清单所示,没有用户名的用户根本没有任何权限('N'),但可以使用INSERT。您可能在谈论不同的权限?我建议在示例中使用除root以外的其他用户名。