如何实现My SQL中的用户的管理问题

2016-02-19 18:04 1 1 收藏

每个人都希望每天都是开心的,不要因为一些琐事扰乱了心情还,闲暇的时间怎么打发,关注图老师可以让你学习更多的好东西,下面为大家推荐如何实现My SQL中的用户的管理问题,赶紧看过来吧!

【 tulaoshi.com - 编程语言 】

  1、授权机制的主要作用是什么?

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  授权机制的基本作用是给某个主机上的用户对某个数据库以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表

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  字段 类型 健 默认值
  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。

来源:https://www.tulaoshi.com/n/20160219/1616738.html

延伸阅读
SQL Server有很多很好用的小功能,但是有时候这些功能反过来给你制造麻烦。其中一个这样的问题是别名用户的使用。本技巧教你如何在数据库中建立别名用户时找到安全漏洞,不过在SQL Server 2008种不推荐这个功能。 首先,你可以对每个数据库运行下面的简单查询或者针对所有数据库操作它来运行以便找到带有“dbo”访问权限的用户。 ...
标签: MySQL mysql数据库
有很多朋友虽然安装好了mysql但却不知如何使用它。在这篇文章中我们就从连接MYSQL、修改密码、增加用户等方面来学习一些MYSQL的常用命令。 一、连接MYSQL。 格式: mysql -h主机地址 -u用户名 -p用户密码 1、例1:连接到本机上的MYSQL。 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码...
有很多朋友虽然安装好了mysql但却不知如何使用它。在这篇文章中我们就从连接MYSQL、修改密码、增加用户等方面来学习一些MYSQL的常用命令。 一、连接MYSQL 格式:mysql-h主机地址-u用户名-p用户密码 1、例1:连接到本机上的MYSQL。 首先在打开DOS窗口,然后进入目录mysqlbin,再键入命令mysql-uroot-p,回车后提示你输...
标签: PHP
 MySQL管理员应该知道如何设置MySQL用户账号,指出哪个用户可以连接服务器,从哪里连接,连接后能做什么。MySQL 3.22.11开始引入两条语句使得这项工作更容易做:GRANT语句创建MySQL用户并指定其权限,而REVOKE语句删除权限。两条语句扮演了mysql数据库的前端角色,并提供与直接操作这些表的内容不同的另一种方法。CREATE和RE...
标签: SQLServer
1:得到客户端的IP地址 /************* IP  **************/ declare @ip varchar(20),@hst varchar(20),@sql varchar(100) declare @str varchar(100) set @str='PING '+Host_Name() create table #tmp(aa varchar(200)) insert #tmp exec master..xp_cmdshell @str select top 1 @ip = replace(left(aa,charindex(':',aa)-1),'Reply from...

经验教程

516

收藏

98
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部