zoukankan      html  css  js  c++  java
  • 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.特定的存储过程;

  • 相关阅读:
    CoreJava逻辑思维-顺时针打印自定义矩阵
    微信公众号开发引言
    .Net自动更新程序GeneralUpdate,适用于wpf,winfrom,控制台应用
    .net技术栈转型心路历程分享
    TCP/IP网络编程之数据包协议
    TCP/IP网络编程之字节序和网络字节序
    TCP/IP网络编程之socket交互流程
    Linux入门笔记
    WPF新手快速入门系列 3.MVVM
    WPF新手快速入门系列 2.绑定
  • 原文地址:https://www.cnblogs.com/luoshengjie/p/10173130.html
Copyright © 2011-2022 走看看