初めてのデート

导航

MySQL的访问控制与用户管理

  MySQL服务器的安全基础是用户应该对他们需要的数据具有适当的访问权,既不能多也不能少。管理访问控制需要创建和管理用户账号。

  使用MySQL Administrator,MySQL Administrator提供了一个图形用户界面,可以用来管理用户及账号权限。

  防止无意的错误,访问控制的目的不仅仅是防止用户的恶意企图。数据梦魇更为常见的是无意识的错误的结果,如打错MySQL语句,在不合适的数据库中操作或其它一些用户错误。通过保证用户不能执行它们不应该执行的语句,访问控制有助于避免这些情况的发生。

  不要使用root,应该严肃对待root登录的使用。尽在绝对需要的时候使用它(或许在你不能登录其它管理账号时使用)。不应该在日常的操作中使用root。

  MySQL用户账号和信息存储在名为mysql的MySQL的数据库中。一般不需要直接访问mysql数据库和表,但有时需要直接访问。需要访问的时机是在需要获得所有用户账号列表时。为此,可以用以下代码:

USE mysql;
SELECT user FROM user;

  mysql数据库有一个名为user的表,它包含所有用户账号。user表中有一个名为user的列,它存储登录用户名。新安装的服务器可能只有一个用户。

  创建用户账号

  为了创建一个新用户账号,使用CREATE USER语句,如下所示:

CREATET USER ben IDENTIFIED BY 'p@$$w0rd';

  CREATE USER创建了一个新用户账号。在创建用户账号时不一定需要口令,不过这个例子用IDENTIFIED BY 'p@$$w0rd' 给出了一个口令。

  指定散列口令:IDENTIFIED BY 指定的诶纯文本,MySQL将在保存到user表之前对其进行加密,为了作为散列值指定口令,使用IDETIFIED BY PASSWORD。

  使用GRANT和INSERT

  使用GRANT也可以用来创建用户账号,但一般来说,CREATET USER是最清楚和最简答的句子。此外,也可以通过直接插入行到user表来增加用户,不过为了安全起见,一般不建议这么做。MySQL用来存储用户账号信息的表(以及表模式等)极为重要,对它们的任何毁坏都可能严重伤害到MySQL服务器。因此,相对于直接处理来说,最好是用标记和函数来处理这些表。

  重命名一个用户账号:使用RENAME USER语句,如下所示:

RENAME USER ben TO bforta;

  删除用户账号:使用DEOP USER语句;

DROP USER bforta;

   设置访问权限:

  用户创建后,必须分配访问权限。新创建的用户账号和没有访问权限。它们能登录MySQL,但不能看到错误,不能执行任何数据库操作。

  为看到赋予用户账号的全线。使用SHOW GRANTS FOR,如下所示: 

SHOW GRANTS FOR bforta;

 输出结果:

Grants for bforta@%;
GRANT USAGE ON * .* TO 'bforta'@'%';

  输出结果显示,用户bforta有一个权限USAGE ON *.*  。USAGE表示根本没有权限,所以,此结果表示在任意数据和任意表上对任何东西没有权限。

  为设置权限,使用GRANT语句。GRANT语句要求:

  1.要授予的全线;

  2.被授予访问权限的数据库或表。

  3.用户名。

  以下例子给出GRANT的用法:

GRANT SELECT ON  crashcourse.* To bforta;

  说明:词GRANT允许用户在crashcourse.*(crashcourse数据库的所有表)上使用SELECT。通过只授予SELECT访问权限,用户bforta对crashcourse数据库中的所有数据具有只读访问权限。

  SHOW GRANTS反映这个结果。
SHOW GRANTS FOR bforta;--输入
GRANTS FOR bforta;--输出
GRANT USAGE ON *.*  TO 'bforta'@'%';--输出
GRANT SELECT ON 'crashcourse'.* TO 'bforta'@'%'--输出

  每个GRANT添加(或更新)用户的一个权限。MySQL读取所有授权,并根据他们确定权限。

  GRANT的反操作是REVOKE,用来撤销特定的全线。例子:

REVOKE SELECT ON crashcourse.* FROM bforta;

  这条REVOKE语句取消钢赋予用户bforta访问权限。被撤销的访问权限必须更改。

  GRANT和REVOKE可在几个层次上控制访问权限:

  1.整个服务器,使用GRANT ALL 和 REVOKE ALL;

  2.整个数据库,使用ON database.* ;

  3.特定的表,使用ON database.table;

  4.特定的列;

  5.特定的存储过程;

posted on 2018-12-25 12:02  saman_--  阅读(714)  评论(0编辑  收藏  举报