Mysql存取权限系统(转)

Mysql存取权限系统(@more@) Mysql有一个高级的但不标准的存取权限系统。此部分即描述其如何工作。

权限系统做什么

Mysql的权限系统的主要功能是验证从假定主机来的用户连接。以及检查用
户对数据库的选择、插入、更新和删除操作权限。

其附加功能还包括匿名用户验证及赋予权限以使用Mysql特殊的功能,如从
文件中装入数据和管理操作。

Mysql的用户名和口令

Mysql的用户名和口令在Unix和Windows之间有一些差别:

·用户名,Mysql用于达到其验证目的。与Unix和Windows的用户名毫无干系
(登录名)。大多数的Mysql客户端缺省的使用Uinx当前用户名作为
Mysql用户名去登录,但那只是为了方便而已。客户端程序允许使用- u或——
用户参数指定一个不同的名字。这意味着你不可能使Mysql数据库得到安全
保护除非每一个Mysql用户名都具有口令。任何人都可以用任何名字来企图
连接数据库,如果他们指定的某一个名字恰好没有口令,他们就会取得成功


·Mysql用户名可以提高到十六位字符长,而典型的Unix用户名都限制在八位


·Mysql的口令跟Unix口令毫无干系。不必把你登录进Unix机器的口令和你用
来在该机器上存取数据库的口令联系起来。

·Mysql使用了与Unix登录进程不同的加密算法。请参见7.3.11节各种函数中
对密码()和()加密函数的描述。

6.3连接上Mysql服务器

Mysql客户端程序通常会让你指定一些连接参数,但你想存取Mysql数据库的时
候:你想连接的主机,你的用户名和口令。例如,Mysql客户端可以象这样开始(
可选参数被加上了“[”和“]”):

壳> Mysql [- h主机名][- u用户名][p口令]

也可以用——主机=主机名,——用户=用户名和——密码=口令来代替- h, - u和- p
选项。注意,在p或——密码和口令之间没有空格。

如果在命令行没有指定连接参数,Mysql将使用缺省值:

·缺省的主机名是localhost。
·缺省的用户名是你在Unix中的登录名。
·如果没有- p参数则将不提供口令。

因而,对于Unix用户乔如下的命令是等价的

壳> mysql - h localhost乔- u
壳> mysql - h localhost
壳> mysql - u乔
壳mysql>

其它的客户端的动作与此类似。

在Unix系统中,你不必在每一次调用客户机程序进行连接的时候都在命令行敲入
所有选项,可以为它们指定不同的缺省值。这可以用两种方法来办到:

·你可以在你的家里目录中的“.my.cnf”配置文件中的[客户]一节指定连接参
数。该文件的相关节看起来可能象这样:

[客户]主机=host_name
用户=user_name
密码=your_pass

请参见4.15.4选项文件一节
·你也可以使用环境变量来指定连接参数。主机可以被指定使用MYSQL_HOST, Mysql
用户名可以被指定使用用户,LOGNAME或是登录(尽管这些变量可能已经被设置
成你的Unix登录名,但它们可能被任意改变)。口令可以被指定为使用MYSQL_PWD (
但这是不安全的;参见下节)

如果通过多种不同的方法指定连接参数,那么在命令行中指定的值比在配置文件中
和环境变量中指定的值具有更高的优先权。而在配置文件中指定的值又比在环境变
量中指定的值具有更高的优先权。

使你的口令安全

在其它用户可以发现的情况下将你的口令用一种方法暴露的指定出来是相当失策的
。下面列出了当你使用客户端程序时可以用来指定密码的方法,比比较了每一种方法
的优劣:

·在命令行使用一个p密码或——密码=密码参数。这确很方便,但极不安全,
你密码能被系统状态检测程序看见(如ps),所以可以被其他用户调用出来显示在
命令行上。(MySQL客户端特别在命令行参数初始化时用0覆盖它们,但在该值显得
可见时仍有短暂的间隔)。
·用一个p或——密码参数(不指定你的密码)。这样,客户端程序会要求密码从终
端输入:

壳> mysql - u用户名- p)
输入密码:* * * * * * * *

客户端把你输入的密码以*”字符显示在终端上,以使旁观者无法看的见。如此输入
密码比你在命令行上指定密码更安全,因为它对其他用户并不可见。但是,此输入
密码的方法只在你使用交互式程序时才有效。如果你想非交互的从一个脚本中调
用客户端,则没有机会从终端输入密码了。
·把你的密码保存在一个配置文件中。举例来说,你可以把你的密码列在你家里目录

Mysql存取权限系统(转)