安全,是一种态度,一种品质,做事情的保障,没有绝对的安全,我们只能尽可能地让危险降到最小。下面我们就聊聊MySQL的安全问题。
先来说说MySQL的认证机制:
要想对数据库进行操作,首先,必须要连接到数据库,无论哪个客户端,mysql命令,sqlyog或是其他什么GUI的客户端去连接MySQL,你都需要提供一个合法用户。MySQL是通过ip地址或主机名加上用户名共同来确认你这个用户,即使你使用同一个用户名,如果是通过不同的ip去连接,那么MySQL也会认为它们是不同的用户,例如:root@127.0.0.1和root@192.169.0.11;而这些信息都被存储在系统默认安装的mysql数据库中的user表里,记录在这三个字段中host,user,password,如果都满足那么就会成功连接到数据库上,看到期待已久的 mysql> 或相应提示符。
接下来,通过验证的用户就会被赋予相应的权限,对数据库作进行有效范围的操作。不是你进来就可以为所欲为,除非你的遇到人是我(每天让hiro头痛的主,其实我真的很谨慎了),一个root用到黑。你还要受mysql数据库中user ,db,tables_priv和columns_priv这几张权限表中所有权限字段的约束,如果你看了它们的表结构,会发现它们大部分字段都是重合的;这里就又有个全局和局部的概念,按照以下权限表的顺序去赋予数据库权限:useràdbàtables_privàcolumns_priv,权限范围是依次递减的,查询原则“Y”停止,“N”继续,最终取比较字段,权限是“Y”的为用户权限。对所有数据库赋予某个相同权限(例如:grant select on *.* to zhang@localhost),只会记入user表的该字段为“Y”;对部分数据库赋予某个权限时(例如:grant create on test.* to zhang@localhost),user表中的相应字段仍为”N”,而db表中的字段将被设置为“Y”。
我们现在就来反省一下,看看我们的奶酪是不是安全。
» 继续阅读 MySQL安全
最新评论