一:MySQL权限经验原则:
权限控制主要是出于安全因素,因此需要遵循一下几个经验原则:
1、只授予能满足需要的最小权限,防止用户干坏事。比如用户只是需要查询,那就只给select权限就可以了,不要给用户赋予update、insert或者delete权限。
2、创建用户的时候限制用户的登录主机,一般是限制成指定IP或者内网IP段。
3、初始化数据库的时候删除没有密码的用户。安装完数据库的时候会自动创建一些用户,这些用户默认没有密码。
4、为每个用户设置满足密码复杂度的密码。
5、定期清理不需要的用户。回收权限或者删除用户。
权限分布 |
可能的设置的权限 |
表权限 |
'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter' |
列权限 |
'Select', 'Insert', 'Update', 'References' |
过程权限 |
'Execute', 'Alter Routine', 'Grant' |
grant命令:
mysql> grant all privileges on *.* to def@'localhost' identified by "123456" with grant option; Query OK, 0 rows affected (0.09 sec)
grant:赋予
privileges:特权
*.*:前面的*号用来指定数据库名,后面的*号用来指定表名
identified by:指定密码
def@localhost:前面的def表示用户名,后面的localhost是主机,也可以填写IP类。
with grant option:这个选项表示该用户可以将自己拥有的权限授权给别人
=>总之那句sql语句就是创建一个只允许从本地登录的超级用户def,并允许将权限赋予别的用户,密码为:123456
查看当前权限:
mysql> show grants; +---------------------------------------------------------------------+ | Grants for root@localhost | +---------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION | | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION | +---------------------------------------------------------------------+ 2 rows in set (0.01 sec)
查看某一个用户的权限:
mysql> show grants for 'jack'@'%'; +-----------------------------------------------------------------------------------------------------+ | Grants for def@% | +-----------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'def'@'%' IDENTIFIED BY PASSWORD '*9BCDC990E611B8D852EFAF1E3919AB6AC8C8A9F0' | +-----------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
删除用户:
mysql> drop user ’def'@'localhost'; Query OK, 0 rows affected (0.01 sec)