当前位置:七道奇文章资讯数据防范MySQL防范
日期:2011-05-02 15:44:00  来源:本站整理

若何实现MySQL中的用户管理?[MySQL防范]

赞助商链接



  本文“若何实现MySQL中的用户管理?[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
MySQL有一套先进的但非尺度的安全/受权系统,掌握其受权机制是开始操作MySQL数据库必必要走的第一步,关于一个熟习SQL基本操作的人来说,也是MySQL全部的知识中对比难以理解的一个部份.本文通过揭开其受权系统的运作机制,但愿大家可以可以更好地操作和利用这个优异的数据库系统.

本文主要参考了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)
values
('%','customers','custom','Y','Y','Y','Y','Y','Y');

3、受权数据表

受权数据表对表的行操作包含select,insert,update和delete,对表和数据库的操作包含create和drop.别的的受权还包含如LOAD DATA INFILE和SELECT INTO OUTFILE和管理号令:shutdown, reload, refresh 和process.三个受权数据表的构造以下所示:
user表
字段 范例 健 默许值
Host char(60) PRI ""
User char(16) PRI ""
Password char(16) - ""
Select_priv enum('N','Y') - N
Insert_priv enum('N','Y') - N
Update_priv enum('N','Y') - N
Delete_priv enum('N','Y') - N
Create_priv enum('N','Y') - N
Drop_priv enum('N','Y') - N
Reload_priv enum('N','Y') - N
Shutdown_priv enum('N','Y') - N
Process_priv enum('N','Y') - N
File_priv enum('N','Y') - N

db表
字段 范例 健 默许值
Host char(60) PRI ""
Db char(64) PRI ""
User char(16) PRI ""
Select_priv enum('N','Y') - N
Insert_priv enum('N','Y') - N
Update_priv enum('N','Y') - N
Delete_priv enum('N','Y') - N
Create_priv enum('N','Y') - N
Drop_priv enum('N','Y') - N

host 表只有在db的数据项中呈现host为空的情形下利用.
字段 范例 健 默许值
Host char(60) PRI ""
Db char(64) PRI ""
Select_priv enum('N','Y') - N
Insert_priv enum('N','Y') - N
Update_priv enum('N','Y') - N
Delete_priv enum('N','Y') - N
Create_priv enum('N','Y') - N
Drop_priv enum('N','Y') - N

在数据表中可以利用统配标记.

4、最常见的Access denied呈现错误的缘由

(1)你能否通过mysql_install_db脚本成立mySQL的受权表,你可以通过mysql -u root举行测试,精确的情形下应当不会发生错误.大概,你能否有一个文件为:user.ISD,普通其位置在install_dir/var/mysql/user.ISD.
(2)最初利用的时刻你应当利用mysql -u root mysql以存取数据库,大概以root身份举行操作.
(3)更改了受权之后能否利用了mysqladmin reload举行了更新?
(4)在以测试为目的的时刻,你该当选用--without-grant-tables选项启动mysqld服务,你可以在这时更改受权表的相关内容,也可以用mysqlaccess查抄你的受权能否到位.
(5)没有利用password("口令")设定了口令,后果也会呈现错误,在利用-p的选项的时刻,注意-ppassword之间没有空格.

5、若何使得MySQL越发安全?

(1)为每个MySQL用户利用口令.记着,假如你不加设口令的话,其他人可以通过mysql --user other_user database的方法拜候你的数据库,在利用MySQL举行检测的时刻系统也会给你呼应的告诫信息.
(2)不要用root方法启动MySQL服务.MySQL可以以任何用户启动.你可以通过增添一个新用户的方法来启动数据库服务.这也不会对系统造成任何影响,因为MySQL的用户和Unix的用户根本来说就使差别的.
(3)不要把'Process_priv','File_priv'等权限授与任何人.
(4)假如你不信任你的DNS,你该当利用IP来代替主机名.在任何情形下都要当心带匹佩符的主机名.以下的一些选项可以影响到你的系统的安全:
--secure
顾名思义,可以使系统根加安全,因为它可以查抄IP地址的一致性.(实际衔接IP地址和通过解析的IP地址),不过这使得mySQL在防火墙工作的时刻很难被防火墙外的人所拜候.
--skip-grant-tables
普通情形下不要利用这个选项,这可以试的任何人不受限制地拜候你的系统.
--skip-name-resolve
不举行主机名的解析.在受权数据表中的全部主机名必须为ip地址大概'localhost'.
--skip-networking
不答应通过网络举行衔接.全部的衔接必须通过Unix Socket.

  以上是“若何实现MySQL中的用户管理?[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • Windows Professional 7 (专业版)中若何实现自动登入系统
  • 若何实现MySQL中的用户管理?
  • 若何实现MSSQL中Sql标签select随机读取数据
  • 在Java中若何实现长时间任务
  • 若何实现二维向量
  • <b>在Java Web操纵中若何实现任务有效调度</b>
  • 若何实现鼠标拖放文件
  • 若何实现大图标气势的翻开对话框
  • <b>若何实现进程间数据通讯技术</b>
  • <b>C++编译器若何实现非常处理</b>
  • <b>若何实现开源操作系统Ubuntu服务器系统备份</b>
  • <b>Linux系统下FTP服务器若何实现安全性</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .