总而言之,最安全的方法是在客户端提示输入密码或将密码保存在受到正确保护的".my.cnf"文件中.
MySQL提供的权限
权限信息存放在mysql数据库(即数据库的名字叫mysql)的user, db, host, tables_priv and columns_priv表中.当MySQL服务器在启动时或在6.9节"改变的权限何时生效"指出的情况下读取这些表中的项目.
此手册所提及的MySQL提供的权限的名字列在其下,各列列出了权限的名字,对应的操作和适用的范围.
权限 列名 范围 select select_priv 表 insert Insert_priv 表 update Update_priv 表 delete Delete_priv 表 index Index_priv 表 alter Alter_priv 表 create Create_priv 数据库,表或索引 drop Drop_priv 数据库或表 grant Grant_priv 数据库或表 reload Reload_priv 服务器管理 shutdown Shutdown_priv 服务器管理 process Process_priv 服务器管理 file File_priv 服务器上文件存取
select, insert, update 和 delete 权限允许你在一个数据库中存在的表的行上执行操作.
仅当你真要从表中返回行时SELECT表达式才需要select权限.你可以执行一个SELECT表达式,甚至当你在服务器上没有存取任何数据库的权限时也行.比如,你可以用mysql客户端作一个简单的计数:
mysql> SELECT 1+1; mysql> SELECT PI()*2;
index权限允许你create或drop(删除)索引.
alter权限允许你使用ALTER TABLE.
create和drop权限允许你create新数据库和表,或drop(删除)存在的数据库和表.
注意,如果你允许一个用户拥有对mysql数据库的drop权限,那么该用户可以drop掉MySQL用来存放存取权限的地方.
grant权限允许你授予其他用户你所拥有的那些权限.
file权限允许你用LOAD DATA INFILE 和 SELECT ... INTO OUTFILE语句存取服务器上的文件.任何用户如果具有了这个权限他就可以存取任何MySQL服务器可以存取的文件. 剩下的权限用于管理操作,在执行mysqladmin程序时会用到.下表列出了mysqladmin命令允许你执行的每一个管理权限:
权限 权限拥有者可以执行的操作 reload reload, refresh, flush-privileges, flush-hosts, flush-logs, flush-tables shutdown shutdown process processlist, kill
reload命令告诉服务器重新读取认证表.refresh命令刷新所有的数据库,打开和关闭日志文件.flush-privileges是reload的一个同义词.其它flush-*执行和refresh大致相同的功能,但是在更有限的范围内,也许在某些场合效果更好.例如,如果你仅想刷新日志文件,flush-logs就是比refresh更好的选择.
shutdown命令关闭服务器.
processlist命令列出有关服务器中所执行的线程的信息.kill命令杀掉服务器的线程.你通常只能列出和杀掉你自己的线程,但如果你有process权限就可以列出或杀掉由其他用户启动的线程.
通常只授予相关用户一些必须权限是一个好办法,当你得学会小心谨慎的授出下列权限:
·grant权限允许用户把他们自己的权限授予另外一些用户.如果两个用户有不同的权限,而又同时具有grant权限的话,那他们就共同具有了这所有的这些权限. ·alter权限拥有者可以用给表重命名的方式破坏权限系统. ·file权限些许会被滥用,以在数据库表中读取任何的全程文件,该项目可以使用SELECT进行存取. ·shudown权限也可能被滥用.关闭服务器,对其他所有用户拒绝服务. ·process权限可以以纯文本的方式显示出当前正执行的查询,包含设置和修改密码的查询. ·mysql数据库上的权限可以用来改变密码和其它存取权限信息.(密码是加密存储的,所以一个有恶意的用户不能简单的读取它们.但是,如果有足够的权限,他可以把它改成另一个不同的密码.)
通过MySQL权限系统无法实现下面一些事情:
·你不能明确的指定一个用户将被拒绝存取.也就是说,你不能明确指定匹配一个用户,拒绝它的连接. ·你不能指定一个用户能在一个数据库中创建和删除表,而不能创建和删除该数据库自身. |