对于有远程访问MySQL的需求的话,通过MySQL的权限管理,可以设置一个新的用户指定IP访问,指定数据库操作,指定表,这样用最小粒度确保安全。

创建新用户

可以通过SELECT user,host from mysql.user;查出当前的用户及Host。Host一般为localhost,127.0.0.1,%,固定IP%的意思是,任意IP都可以。

为单独的程序新建一个MySQL用户

CREATE USER 'username'%'host' INDENTIFIED BY 'userpassword';

即可创建一个新的用户。

给该用户设定权限

为了保证安全,一般都需要设定的权限最小。比如,定位到某个数据库的某个表,或者只能执行某些SQL操作。

GRANT SELECT, INSERT, UPDATE on dbname.tablename to 'username'@'host';

上面这个语句的意思是,给某个用户在某个host下的某个数据的某个表的查询,写入,更新权限。

这里需要注意的是,这个给权限的语句是叠加的,并不会覆盖。举例来说,你给了一个用户Select的权限,然后又通过命令给了Update的权限。那么这个用户就同时有了Select&Update权限。

执行这个命令结束后,记得调用flush PRIVILEGES;刷新一下权限,然后重启MySQL服务。

查看某个用户的权限

有时候不是特别清楚某个用户的权限时,可以使用以下命令查看:

show GRANTS for 'username'@'host';

默认新建的用户会有这样一个权限GRANT USAGE ON db.table TO 'pySpider’@‘%’。这个权限只能连接数据库和查询information_schema的权限,而且是没法revoke的。

提到revoke,就是可以撤销某个用户的某个权限的语句:

REVOKE all PRIVILEGES on db.table from 'username'@'host';

通过这个语句就可以撤销某个用户的对于db.table的所有权限了。