源码库对MySQL存取权限的一些理解
2024-07-24 12:40:43
供稿:网友
MySQL使用于认证目的的用户名,与Unix用户名(登录名字)或Windows用户名无关。缺省地,大多数MySQL客户尝试使用当前Unix用户名作为MySQL用户名登录,但是这仅仅为了方便,客户程序允许用-u或--user选项指定一个不同的名字。及与安全的考虑,所有的MySQL用户名都应该有口令。 1. MySQL 用户名和口令 * MySQL使用于认证目的的用户名,与Unix用户名(登录名字)或Windows用户名无关。缺省地,大多数MySQL客户尝试使用当前Unix用户名作为MySQL用户名登录,但是这仅仅为了方便,客户程序允许用-u或--user选项指定一个不同的名字。及与安全的考虑,所有的MySQL用户名都应该有口令。 * MySQL用户名最长可以是16各字符;典型地,Unix用户名限制为8个字符。 * MySQL口令与Unix口令没关系。 * MySQL加密口令使用了一个Unix登录期间所用的不同算法,PASSWORD()和ENCRYPT() 函数PASSWORD(str) 从纯文本口令str计算一个口令字符串。该函数被用于为了在user授权表的Password列中存储口令而加密MySQL口令。 mysql> select PASSWORD('badpwd'); -> '7f84554057dd964b' PASSWORD()加密是非可逆的。PASSWORD()不以与Unix口令加密的相同的方法执行口令加密。你不应该假定如果你的Unix 口令和你的MySQL口令是一样的,PASSWORD()将导致与在Unix口令文件存储的相同的加密值。见ENCRYPT()。 ENCRYPT(str[,salt]) 使用Unix crypt()系统调用加密str。salt参数应该是一个有2个字符的字符串。(MySQL 3.22.16中,salt可以长于2个字符。) mysql> select ENCRYPT("hello"); -> 'VxuFAJXVARROc' 如果crypt()在你的系统上不可用,ENCRYPT()总是返回NULL。ENCRYPT()只保留str起始8个字符而忽略所有其他,至少在某些系统上是这样。这将由底层的crypt()系统调用的行为决定。 1. 与MySQL服务器连接 语法格式: shell> mysql [-h host_name][-u user_name][-pyour_pass ] -h, -u和-p选项的另一种形式是--host=host_name、--user=user_name和--password=your_pass。 注意:在-p或--password=与跟随它后面的口令之间没有空格。(在命令行上指定一个口令是不安全的!) 对于命令行没有的联接参数,mysql使用缺省值: * 缺省主机名是localhost。 * 缺省用户名是你的Unix登录名。 * 如果没有-p,则没有提供口令。 缺省值参数的指定: 在你的主目录下“.my.cnf”的配置文件的[client]小节里指定连接参数: [client] host=host_name user=user_name password=your_pass 注:命令行上被指定的值优先于在配置文件和环境变量中指定的值 最安全的方法是让客户程序提示口令或在一个适当保护的“.my.cnf”文件中指定口令。 1. 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 数据库或表 references References_priv 数据库或表 reload Reload_priv 服务器管理 shutdown Shutdown_priv 服务器管理 process Process_priv 服务器管理 file File_priv 在服务器上的文件存取 注:grant权限允许你把你自己拥有的那些权限授给其他的用户。 file权限给予你用LOAD DATA INFILE和SELECT ... INTO OUTFILE语句读和写服务器上的文件,任何被授予这个权限的用户都能读或写MySQL服务器能读或写的任何文件。 2. 存取控制:连接证实 身份检查使用user表3个(Host, User和Password)范围字段。服务器只有在一个user表条目匹配你的主机名和用户名并且你提供了正确的口令时才接受连接。 注:一个Host值可以是主机名或一个IP数字,或'localhost'指出本地主机。 可以在Host字段里使用通配符字符“%”和“_”。 Host值'%'匹配任何主机名。当一个连接被尝试时,服务器浏览排序的条目并使用找到的第一个匹配。 普遍的误解是认为,对一个给定的用户名,当服务器试图对连接寻找匹配时,明确命名那个用户的所有条目将首先被使用。这明显不是事实。