MySQL设置用户访问权限
对于有远程访问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的所有权限了。