zoukankan      html  css  js  c++  java
  • MySQL-快速入门(11)用户管理

    1、权限表

      存储用户权限信息表主要有:user、db、host、tables_priv、columns_priv、procs_priv。

      1》user表:

         记录允许连接到服务器的账号信息,里面的权限是全局级别的。user表有42个字段,这些字段可以分为4类,分别是用户列、权限列、安全列、资源控制列。

      2》db和host表

      3》tables_priv和columns_priv表

      4》procs_priv表

    2、账户管理

       1》登录和登出MySQL

    mysql [-h localhost] -uroot -p12345 -P端口号,默认3306 -e命令或SQL语句

       2》新建普通用户

         1>create user或grant语句:

    //create user ...
    create user user_specification[,user_specification] ... user_specification: user@host [ identified by [password]
    'password' |identified with auth_plugin [as 'auth_string'] ] user:表示创建的用户名称 host:表示允许登录的用户主机名 identified by:表示用来设置用户的密码。与identitied with互斥。 [password]:表示使用hash值设置密码 'password':表示登录时使用的普通明文密码 identified with:为用户指定一个身份验证插件。与identified by互斥。 auth_plugin:插件的名称 auth_string:该参数传值给身份验证插件,由该插件解析该参数的意义
    举例:create user 'lfy'@'localhost'  identified by '12345';
    或者
         create user 'lfy'@'localhost';
    //grant语句不仅可以创建用户,还可以在创建用户的同时授权
    grant  privileges on db.table
    to user@host [identified by 'password'] [,user [identified by 'password']] 
    [with grant option];

    privileges:表示赋予用户的权限类型
    db.table:表示用户的权限所作用的数据库中的表
    identified by:设置的密码
    [with grant option]:表示对新建立的用户赋予grant权限,即该用户可以对其他用户赋予权限。
    grant select,update on *.* 
    to 'lfy'@'localhost' identified by '12345';


    user、host字段区分大小写。查询的时候需要指定正确的值。

         2>直接操作MySQL授权表:

    insert into MySQL.user(user,host,password,[privilegelist]) values(...)

      3》删除普通用户,2种方式。

        1>drop user语句

    drop user user1 [,user2];

        2>delete删除用户

    delete from MySQL.user where host='hostname' and user='username';

      4》root用户修改自己的密码

        1>mysqladmin命令

    mysqladmin -u username -h localhost -p password 'newpwd';

        2>修改MySQL.user表

    update MySQL.user set password=password("rootpwd") where user="root" and host="localhost"; 

    执行完上面的语句修改密码后,还需要执行:
    mysql>FLUSH PRIVILEGES; //重新加载权限

         3>使用set语句修改root用户的密码

    //可以修改别的用户的密码,也可以修改自己的密码
    mysql>set password=password("rootpwd");
    
    mysql>FLUSH PRIVILEGES; 

       5》root用户修改普通用户的密码:set数据库的MySQL.user表,或者grant语句

          1>使用set语句修改普通用户的密码

    set password for 'user'@'host' = password('somepassword');
    
    
    //普通用户更改自己的密码
    set password=password('somepassword');

          2>使用update语句修改普通用户的密码

    update MySQL.user set password=password('pwd')
    where user='username' and host='hostname';

    PLUSH PRIVILEGES;

         3>使用grant语句修改普通用户密码

    grant urant on *.* to 'user'@'%' identified by 'somepassword';

    //全局界别使用grant usage语句(*.*)指定某个账户的密码而不影响账户当前的权限。


    使用grant ... identified by语句或者MySQLadmin password命令设置密码,它们俊辉加密密码。这种情况下,
    不需要使用password()函数

      6》普通用户修改密码

    set password = password('pwd');

      7》root用户密码丢失

        1>使用--skip-grant-tables选项启动MySQL服务

            使用使用--skip-grant-tables选项启动MySQL服务,MySQL数据库服务器将不加载权限判断,任何用户都能访问数据库。Windows操作系统中,可以使用MySQLLd或MySQLLd-nt来启动MySQL服务进程。

    mysqld --skip-grant-tables
    或者
    mysqld-nt --skip-grant-tables

         2>使用root用户登录,重新设置密码。

    3、权限管理

      1》MySQL的各种权限

      2》授权

         1>全局层级:全局权限适用于一个给定服务器中的所有数据库。这些权限存储在MySQL.user表中。grant all on *.*和revoke all on *.*只授予和撤销全局权限。

         2>数据库层级

           数据库权限适用于一个给定数据库中的所有目标。这些权限存储在MySQL.db和MySQL.host表中。grant all on db_name.和revoke all on db_name.*只授予和撤销数据库权限。

         3>表层级

           表权限适用于一个给定表中的所有列。

         4>列层级

           列权限适用于一个给定表中的单一列。

         5>子程序层级

      3》收回权限

    revoke ...

      4》查看权限

    mysql> show grants for 'mysql'@'localhost';
    +----------------------------------------------------------------------+
    | Grants for mysql@localhost                                           |
    +----------------------------------------------------------------------+
    | GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'localhost' WITH GRANT OPTION |
    +----------------------------------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql>

    4、访问控制

       1》连接核实阶段

           通过Host、user、password几个字段核实用户的连接请求。不能通过,则拒绝访问数据库服务器。

       2》请求核实阶段

          对于通过连接的会话,对于此链接上的每个请求,服务器检查用户要执行的操作,然后检查是否有足够的权限来执行它。

  • 相关阅读:
    Node.js入门学习笔记
    Memcached服务器安装、配置、使用详解
    基于Dubbo框架构建分布式服务
    Apache Beam:一个开源的统一的分布式数据处理编程库
    Spring Cloud Netflix构建微服务入门实践
    内部排序算法:快速排序
    内部排序算法:冒泡排序
    内部排序算法:基数排序
    Java常见面试题
    svn+ssh方式svn服务器和客户端的配置[转载]
  • 原文地址:https://www.cnblogs.com/ZeroMZ/p/11482234.html
Copyright © 2011-2022 走看看