如何实现MySQL中的用户管理?
2008-02-23 07:41:30来源:互联网 阅读 ()
本文主要参考了MySQL安装所附的使用手册第六章中的部分内容。假如有任何疑问,请和我联系(lidong@wh.027.net)
1、授权机制的主要作用是什么?
授权机制的基本作用是给某个主机上的用户对某个数据库以select,insert,update和detete的权限。而其额外的功能还包括是否允许匿名使用数据库,使用MysQL的一些特定函数,如:LOAD DATA INFILE之类。在这里请注意,MySQL中的用户名和Unix系统中的用户名并没有什么关系。虽然许多客户端程式允许您能够用当前的用户名进行登录,但是最标准的做法还是通过--user的选项。
2、授权机制是如何进行运作的?
在MySQL中主机和用户的联合视为唯一标志。比如说,在主机1和主机2上的用户lee实际上是不同的,他们对MySQL的使用权限也能够是有差别的。而整个授权机制的核心问题就是要解决授予从某个主机上登录的某个用户对某个数据库的使用权限。您能够通过脚本mysqlaccess测试一个主机上用户的对数据库操作的权限。而任何的授权信息都被存储在数据库mysql的user、host和db表中。我们能够通过mysql mysql的指令连接到这个数据库中,并且通过select * from user(或db,host)显示每个数据表中的内容。user表中所授予的权限是整个授权机制的基本授权,也就是说,user中的定义对于任何一个用户 主机来说都是适用的,除非在db表中另外有所定义,因此,对于用户来说最好是就某个数据库为基础进行授权。而host表的主要目的是维护一个“安全”服务器的列表。而在具体考虑某个用户/主机对某个数据库的权限的的时候,我们还需要研究一下授权机制的的匹配搜索机制:
其次,在授权机制中能够对一个用户的口令进行加密,而且是必须加密,加密的方法是password('口令'),假如直接填写口令的话,会导致数据库无法访问。user表中所授予的权限是整个授权机制的基本授权,也就是说,user中的定义对于任何一个用户 主机来说都是适用的,除非在db表中另外有所定义,因此,对于用户来说最好是就某个数据库为基础进行授权。而host表的主要目的是维护一个“安全”服务器的列表。而在具体考虑某个用户/主机对某个数据库的权限的的时候,我们还需要研究一下授权机制的的匹配搜索机制:
首先,我们需要介绍一下统配符的概念,统配符包括“%”,其意思为任意(的主机、用户或数据库),而假如一条记录为空的话,也表示任意的意思。其次,在授权机制中能够对一个用户的口令进行加密,而且是必须加密,加密的方法是password('口令'),假如直接填写口令的话,会导致数据库无法访问。
从我们对这三个表的显示我们能够看到,这三个表中的每一条记录包含了对于某个用户的授权情况的描述,MySQL数据库中几个相关的授权机制的数据表被搜索的顺序为:user,db,host。也就是说,我们将首先首先检索user数据表,找到第一个匹配的记录,我们把在user数据表中首先匹配的记录称之为Priv;然后搜索db表,获得相应的授权。假如在db数据表相应记录中host字段的为空,并且Priv记录中主机也被包含在host表的host字段之中,这样的话,对于某个user来说,则能够在user表中加入在host表中的一些为“Y”的权限设定。假如在db表中的host字段不为空的话,那么也就不会对该用户/主机的授权产生什么影响了。
了解了这一点之后,我们需要讨论在各个数据表中的记录的搜索的优先权的问题,也就是说,怎样确定第一匹配的记录,这并不是按照数据表中的记录的自然先后顺序来确定的。在各个数据表内的各条记录的优先权排列如下:
(1)user表:根据先host后user的顺序确定。搜索规则如下:不包含统配符的记录,包含统配符的记录,空记录。而在同样一个host里面,继续按照user来排列,规则和上述的相同。
(2)db表:检索的顺序根据host字段确定:不包含统配符的记录,包含统配符的记录,空记录。
(3)host表:检索的顺序根据host字段确定:不包含统配符的记录,包含统配符的记录,空记录。我们用下面的例子来说明进行匹配搜索的规则:请记住假如您更改了这些数据表,您必须使用mysqladmin reload使其生效。
下面是演示系统是如何进行搜索的:
----------- --------- -
| Host | User | ...
----------- --------- -
| % | root | ...
| % | jeffrey | ...
| localhost | root | ...
| localhost | | ...
----------- --------- -
搜索的顺序应当是:
localhost/root
localhost/any
any/jeffrey
any/root
这样,假如在localhost的用户jeffrey要连接数据库的话,那么其授权应当根据localhost/“任意” 行所规定的权限而非“任意”/jeffrey行所规定的权限,请大家注意这一点,因为假如不合适的配置完全可能会使得您无法正常地使用这个数据库系统。
我们现在来看一个添加一个用户的例子:需要添加一名叫做“custom”用户,他分别从主机'localhost', 'server.domain' 和 'whitehouse.gov'连接到数据库中,他的口令为“stupid”,对于数据库'bankaccount'他只想从“localhost”进行访问,而“customer”数据库则应当被上述3个主机所访问。我们通过以下的sql语句来完成其操作。
shell> mysql mysql.
mysql> insert into user (host,user,password)
values('localhost','custom',password('stupid'));
mysql> insert into user (host,user,password)
values('server.domain','custom',password('stupid'));
mysql> insert into user (host,user,password)
values('whitehouse.gov','custom',password('stupid'));
mysql> insert into db
(host,db,user,Select_priv,Insert_priv,Update_priv,Delete_priv,
Create_priv,Drop_priv)
values
('localhost','bankaccount','custom','Y','Y','Y','Y','Y','Y');
mysql> insert into db
(host,db,user,Select_priv,Insert_priv,Update_priv,Delete_priv,
Create_priv,Drop_priv)
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: 修改MySQL中一个用户的密码
下一篇: MYSQL出错代码及出错信息对照
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash