二、MySQL权限经验原则:
权限控制主要是出于安全因素,因此需要遵循一下几个经验原则:
1、只授予能满足需要的最小权限,防止用户干坏事。比如用户只是需要查询,那就只给select权限就可以了,不要给用户赋予update、insert或者delete权限。
2、创建用户的时候用户的登录主机,一般是成指定IP或者内网IP段。
3、初始化数据库的时候删除没有密码的用户。安装完数据库的时候会自动创建一些用户,这些用户默认没有密码。
4、为每个用户设置满足密码复杂度的密码。
5、定期清理不需要的用户。回收权限或者删除用户。
三、权限增、删、查、改操作
添加:
权限的添加用grant (文档)命令来添加,具体格式如下:
GRANTpriv_type[(column_list)] [,priv_type[(column_list)]] ... ON [object_type]priv_levelTOuser_specification[,user_specification] ... [REQUIRE {NONE |ssl_option[[AND]ssl_option] ...}] [WITHwith_option...]object_type: TABLE | FUNCTION | PROCEDUREpriv_level: * | *.* |db_name.* |db_name.tbl_name|tbl_name|db_name.routine_nameuser_specification:user[IDENTIFIED BY [PASSWORD] 'password']ssl_option: SSL | X509 | CIPHER 'cipher' | ISSUER 'issuer' | SUBJECT 'subject'with_option: GRANT OPTION | MAX_QUERIES_PER_HOURcount| MAX_UPDATES_PER_HOURcount| MAX_CONNECTIONS_PER_HOURcount| MAX_USER_CONNECTIONScount
with_option 是对所授权限的一些或管理,例如 with grant option 表示被授权的用户拥有对其他用户授予同样权限的能力
删除:
权限的删除用revoke (官方文档)命令来添加,具体格式如下:
REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [object_type] priv_level FROM user [, user] ... REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
假如你要删除用户jeffrey@localhost 对所有数据库的插入权限,请用下边命令
REVOKE INSERT ON *.* FROM 'jeffrey'@'localhost';
假如你还要随便删除其授权的权限,可用:
REVOKE grant option ON *.* FROM 'jeffrey'@'localhost';
当然,你也可以向赋予权限那样用all privilege删除所有权限(ps:all privilege 不包含 grant 权限)
REVOKE all
privileges ON *.* FROM 'jeffrey'@'localhost';
查看:
show grants (官方文档)命令由于查看用户的权限
SHOW GRANTS [FOR user]
当 for user被缺省时,显示所有查询用户可见用户的权限:
mysql> show grants; +------------------------------------------------------------------------------- ---------------------------------------------------------+ | Grants for root@localhost | +------------------------------------------------------------------------------- ---------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*81F 5E21E35407D884A6CD4A731AEBFB6AF209E1B' WITH GRANT OPTION | | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION | +------------------------------------------------------------------------------- ---------------------------------------------------------+ 2 rows in set (0.00 sec)查看root用户权限:
SHOW GRANTS FOR 'ROOT'@'LOCALHOST'
四、实际应用及一些坑