第九章 访问控制与安全管理

9.1  用户账号管理

  登录和退出MySQL服务器

    mysql –h 主机名 –u 用户名 –p 用户密码

  【例】使用Root用户登录到本地MySQL服务器的test库。

    D:\xampp\mysql\bin>mysql -h localhost -u root -p test

    其中:

      1.-h 主机名,可以使用该参数指定主机名或ip

      2.-u 用户名,可以使用该参数指定用户名

      3.-p 密码,可以使用该参数指定登录密码,如果没有,登录时会提醒

      退出:exit

  MySQL的用户账号查看

    MySQL的用户账号及相关信息都存储在一个名为mysql的数据库中,这个数据库里有一个名为user的数据表,包含了所有的用户账号,并且由一个名为user的列存储用户的登录名。

    利用SELECT语句查看MySQL数据库的使用者账号。

SELECT user FROM mysql.user;

    请注意,root账号具有对数据库所有的管理权限,因此在日常的操作中,尽量要少用root用户对数据库进行操作。

  1.创建用户账号

    作为一个新安装的系统,当前只有一个名为root的用户。这个用户是在成功安装mysql服务器后,由系统创建的,并且被赋予了操作和管理mysql的所有权限。

    为了避免恶意用户冒名使用root账号操控数据库,通常需要创建一系列具备适当权限的账号,而尽可能地不用或少用root账号登录系统统,以此来确保数据的安全访问。

    (1)使用create use创建用户账号

      语法格式:

CREATE USER <用户名> [IDENTIFIED] BY [PASSWORD] <口令>

      1.<用户名>:指定创建用户账号,其格式为式为'user name'@ 'host name‘

      2.选项PASSWORD:用于指定散列口令,即若使用明文设置口令时,需忽略PASSWORD关键字;如果不想以明文设置口令,且知道PASSWORD()函数返回给密码的散列值,则可以在口令设置语句中指定此散列值,但需要加上关键字PASSWORD。

      3.IDENTIFIED BY子句:用于指定用户账号对应的口令,若该用户账号无口令,则可省略此子句。

      4.<口令>:指定用户账号的口令,在IDENTIFIED BY关键字或PASSWORD关键字之后。给定的口令值可以是只由字母和数字组成的明文,也可以是通过PASSWORD()函数得到的散列值。

      【例】在MySQL服务器中添加一个新用户,其用户名为cau,主机名为localhost,用户口令设置为明文123456。

      CREATE USER语句应该注意:

         可以不为用户指定口令,不推荐这种做法。

        使用CREATE USER语句,必须拥有MySQL中mysql数据库的INSERT权限或全局CREATE USER权限。

        使用CREATE USER语句创建一个用户账号后,会在系统自身的mysql数据库的user表中添加一条新记录。

        新创建的用户拥有的权限很少。可以登录到MySQL,只允许进行不需要权限的操作,如使用SHOW语句查询所有存储引擎和字符集的列表等。

        如果两个用户具有相同的用户名和不同的主机名,MySQL会将他们视为不同的用户,并允许为这两个用户分配不同的权限集合。

  2. 查看用户

    语法格式:

select * from  mysql.user                                                                               
where host=host_nameand user=user_name

    【例】 查看本地主机上的所有用户名。

  3. 修改用户账号

     rename user语句可以修改一个或多个已经存在的mysql用户账号。要使用rename user语句,必须拥有mysql数据库的update权限或全局create user权限。

     语法格式: 

RENAME USER<旧用户>TO<新用户>

    【例】添加一个新的账号lihui,密码为111111,主机为localhost,然后修改成jinzi。

 

  4. 修改用户口令

     (1)使用mysqladmin命令来修改密码

       语法格式:

mysqladmin –u username p password 

      【例】修改root密码为 “123456“;

    (2)使用set语句来修改密码

      语法格式:

set password [for 'username'@'hostname'] =password('new_password');

      【例】修改xiaohong密码为'123' 

  5. 删除用户

     (1)用drop user语句来删除普通用户

       语法格式:

DROP USER <用户名1>[,<用户名2>]...

      【例12】删除xiaohong用户,其host值为localhost

 

    (2) 使用delete语句来删除普通用户

      【例13】删除xiaohong用户,主机名为localhost

 

 

 

9.2 安全管理

  查询用户的权限

    当成功创建用户账户后,还不能执行任何操作,需要为该用户分配适当的访问权限。可以使用SHOW GRANT FOR语句来查询用户的权限。

    :新创建的用户只有登录MySQL服务器的权限,不能进行其他操作。

    【例】利用SHOW GRANT FOR语句来查询用户“cau”的权限。

SHOW GRANTS FOR 'cau'@'localhost';

    根据语句执行后的输出结果,可以看到用户'cau'仅有一个权限USAGE ON*.*,表示该用户对任何数据库和任何表都没有权限。

  1.权限授予

    语法格式:

GRANT
<权限类型>[(<列名>)][,<权限类型>[(<列名>)]]
ON <对象> <权限级别> TO <用户>

    【例】授予用户“cau”对数据库studentinfo的表student,拥有列sno和列sname的SELECT权限。

    【例15】当前系统中不存在用户liming和用户huang,要求创建这两个用户,并设置对应的系统登录口令,同时授予他们在数据库studentinfo的表student上拥有select和update的权限。

 

    【例16】授予系统中已存在用户lili可以在数据库studentinfo中执行所有数据库操作的权限。

 

  2. 权限的转移和限制

    (1)转移权限

      【例17】授予当前系统中一个不存在的用户zhou在数据库studentinfo的表student上拥有select和update的权限,并允许其可以将自身的这个权限授予其他用户。

 

    (2) 限制权限

    【例18】授予系统中的用户huang在数据库studentinfo的表student上每小时只能处理一条delete语句的权限。

 

  3. 权限的撤销

     第一种:

REVOKE<权限类型>[(<列名>)][,<权限类型>[(<列名>)]]...
ON <对象类型><权限名>FROM<用户1>[,<用户2>]...
第二种:REVOKE ALL PRIVILEGE,GRANT OPINION FROM user <用户1>[,<用户2>]...

    语法说明如下:

      1.REVOKE语法和GRANT语句的语法格式相似,但具有相反的效果。

      2.第一种语法格式用于回收某些特定的权限。

      3.第二种语法格式用于回收特定用户的所有权限。

      4.要使用REVOKE语句,必须拥有mysql数据库的全局CREATE USER权限或UPDATE权限。

      【例19】回收系统中已存在的用户zhou在数据库studentinfo的表student上的select权限。

 

posted @ 2019-05-19 20:23  souwote  阅读(451)  评论(0)    收藏  举报