摘要:Mysql存取权限系统
Mysql有一个高级的但不标准的存取权限系统.此部分即描述其如何工作.权限系统做什么
Mysql的权限系统的主要功能是验证从假定主机来的用户连接.以及检查用户对数据库的select,insert,update和delete操作权限.其附加功能还包括匿名用户验证及赋予权限以使用Mysql特殊的功能,如从文件中装入数据和管理操作.
Mysql的用户名和口令
Mysql的用户名和口令在Unix和Windows之间有一些差别:
·用户名,Mysql用于达到其验证目的.与Unix和Windows的用户名毫无干系(login names).大多数的Mysql客户端缺省的使用Uinx当前用户名作为
Mysql用户名去登录,但那只是为了方便而已.客户端程序允许使用-u或--user参数指定一个不同的名字.这意味着你不可能使Mysql数据库得到安全保护除非每一个Mysql用户名都具有口令.任何人都可以用任何名字来企图连接数据库,如果他们指定的某一个名字恰好没有口令,他们就会取得成功.
·Mysql用户名可以提高到十六位字符长,而典型的Unix用户名都限制在八位.
·Mysql的口令跟Unix口令毫无干系.不必把你登录进Unix机器的口令和你用来在该机器上存取数据库的口令联系起来.
·Mysql使用了与Unix登录进程不同的加密算法.请参见7.3.11节各种函数中对PASSWORD()和ENCRYPT()函数的描述.
连接上Mysql服务器
Mysql客户端程序通常会让你指定一些连接参数,但你想存取Mysql数据库的时候:你想连接的主机,你的用户名和口令.例如,Mysql客户端可以象这样开始(可选参数被加上了"["和"]"):
shell> mysql [-h 主机名] [-u 用户名] [-p口令]
也可以用--host=主机名,--user=用户名和--password=口令来代替-h,-u和-p选项.注意,在-p或--password和口令之间没有空格.
如果在命令行没有指定连接参数,Mysql将使用缺省值:
·缺省的主机名是localhost.
·缺省的用户名是你在Unix中的登录名.
·如果没有-p参数则将不提供口令.
因而,对于Unix用户Joe如下的命令是等价的
shell> mysql -h localhost -u joe
shell> mysql -h localhost
shell> mysql -u joe
shell> mysql
其它的客户端的动作与此类似.
在Unix系统中,你不必在每一次调用客户机程序进行连接的时候都在命令行敲入所有选项,可以为它们指定不同的缺省值.这可以用两种方法来办到:
·你可以在你的home目录中的".my.cnf"配置文件中的[client]一节指定连接参数.该文件的相关节看起来可能象这样:
[client]host=host_name
user=user_name
password=your_pass
·你也可以使用环境变量来指定连接参数.主机可以被指定使用MYSQL_HOST,Mysql用户名可以被指定使用USER,LOGNAME或是LOGIN(尽管这些变量可能已经被设置成你的Unix登录名,但它们可能被任意改变).口令可以被指定为使用MYSQL_PWD(但这是不安全的;参见下节)
如果通过多种不同的方法指定连接参数,那么在命令行中指定的值比在配置文件中和环境变量中指定的值具有更高的优先权.而在配置文件中指定的值又比在环境变量中指定的值具有更高的优先权.
使你的口令安全
在其它用户可以发现的情况下将你的口令用一种方法暴露的指定出来是相当失策的
.下面列出了当你使用客户端程序时可以用来指定密码的方法,比比较了每一种方法的优劣:
·在命令行使用一个 -p密码 或 --password=密码 参数.这确很方便,但极不安全,你密码能被系统状态检测程序看见(如ps),所以可以被其他用户调用出来显示在命令行上.(MySQL客户端特别在命令行参数初始化时用0覆盖它们,但在该值显得可见时仍有短暂的间隔).
·用一个-p或--password参数(不指定你的密码).这样,客户端程序会要求密码从终端输入:
shell> mysql -u 用户名 -p]
Enter password: ********
客户端把你输入的密码以*"字符显示在终端上,以使旁观者无法看见.如此输入密码比你在命令行上指定密码更安全,因为它对其他用户并不可见.但是,此输入密码的方法只在你使用交互式