《MySQL入门很简单》学习笔记(15)之第15章MySQL用户管理(关键词:MySQL/用户管理/权限表/普通用户/root用户)

第15章 MySQL用户管理

MySQL用户主要包括普通用户和root用户。

    root用户是超级管理员,拥有所有的权限,包括:
        创建用户;
        删除用户;
        修改普通用户的账户、权限等。
    普通用户只拥有创建该用户时赋予它的权限。

15.1 权限表

    安装MySQL时,会自动安装一个名为mysql的数据库。
    mysql数据库下面存储的都是权限表。
    这些权限表中,最重要的是:
        user表;
        db表;
        host表;
    除此之外,还有:
        tables_priv表;
        columns_priv表;
        proc_priv表。

15.1.1 user表

    user表是MySQL中最重要的一个权限表。
    DESC语句可以查看user表的基本结构。
    user表有39个字段,大致可以分为4类:
        用户列;
        权限列;
        安全列;
        资源控制列。

1. 用户列
user表的用户列包括:

    Host,表示主机名;
    User,表示用户名;
    Password,表示密码。
详见书上。

2. 权限列

    user表的权限列包括Select_priv、Insert_priv等以priv结尾的字段。
    这些字段决定了用户的权限。包括:
        查询权限、修改权限等普通权限,用于操作数据库;
        关闭服务、超级权限、加载用户等高级管理权限,用于对数据库进行管理。
    详见书上。

3. 安全列

    user表的安全列只有4个字段,分别是:
        ssl_type
        ssl_cipher
        x509_issuer
        x509_subject
  1. 资源控制列

    user表的4个资源控制列是:
        max_questions,规定每小时可以允许执行多少次查询;
        max_updates,规定每小时可以允许执行多少次更新;
        max_connections,规定每小时可以建立多少连接;
        max_user_connections,规定单个用户可以同时具有的连接数。
        这些字段的默认值为0,表示没有限制。
    

15.1.2 db表和host表

db表和host表也是MySQL中非常重要的权限表。

    db表中存储了某个用户对一个数据库的权限。
    db表比较常用,host表很少用到。
    DESC语句可以查看这2个表的基本结构。

db表和host表的字段大致可以分为两类:用户列、权限列。
1. 用户列

    db表的用户列有3个字段,分别是:
        Host,表示主机名;
        Db,表示数据库名;
        User,用户名。
    host表是db表的扩展。如果db表中找不到Host字段的值,就需要到host表中去寻找。但host表很少用到,通常db表的设置已经满足要求了。

2. 权限列

    db表和host表的权限列几乎一样,只是db表中多了一个Create_routine_priv字段和Alter_routine_priv字段。这两个字段决定用户是否具有创建和修改存储过程的权限。
    详见书上。

15.1.3 tables_priv表和columns_priv表

    tables_priv表可以对单个表进行权限设置。
    colums_priv表可以对单个数据列进行权限设置。
    DESC语句可以查看这两个表的基本结构。

详见书上。

15.1.4 procs_priv表

    procs_priv表可以对存储过程和存储函数进行权限设置。
    DESC语句可以查看procs_priv表的基本结构。

15.2 账户管理

包括:

    登录和退出MySQL服务器;
    创建用户;
    删除用户;
    密码管理;
    权限管理等。

15.2.1 登录和退出MySQL服务器

15.2.2 新建普通用户

在MySQL中:
    CREATE USER语句可以创建新的用户;
    INSERT语句可以在mysql.user表中添加用户;
    GRANT语句可以新建用户。

详见书上。

15.2.3 删除普通用户

    在MySQL中,删除普通用户的方法包括:
        使用DROP USER语句;
        使用DELETE语句。

详见书上。

15.2.4 root用户修改自己的密码

  1. 使用mysqladmin命令来修改root用户的密码
    语法:

    mysqladmin -u username -p password "new_password";
    
  2. 修改mysql数据库下的user表
    使用UPDATE语句,语法:

    UPDATE mysql.user SET Password=PASSWORD("new_password")
            WHERE User="root" AND Host="locahost";
    

    执行了UPDATE语句之后,需要执行FLUSH PRIVILEGES语句来加载权限。

  3. 使用SET语句来修改root用户的密码

        SET PASSWORD=PASSWORD("new_password");
    

15.2.5 root用户修改普通用户密码

root用户登录服务器后,修改普通用户密码的方式包括:

    使用SET语句;
    使用UPDATE语句,修改user表;
    GRANT语句。

15.2.6 普通用户修改密码

语法:

    SET PASSWORD=PASSWORD('new_password');

15.2.7 root用户密码丢失的解决办法

步骤:
1. Linux中,

使用mysqld_safe来启动MySQL服务:
    mysqld_safe --skip-grant-tables user=mysql
也可以使用/etc/init.d/mysql来启动MySQL服务:
    /etc/init.d/mysql start --mysqld --skip-grant-tables

2. 登录root用户,并且设置新的密码
通过上述方式启动MySQL服务以后,可以不输入密码就登录root用户。登录以后,可以使用UPDATE语句来修改密码。
mysql -u root(亲测会出现”Access denied”)
3. 加载权限表
修改完密码以哦户,必须用FLUSH PRIVILEGES语句来加载权限表。加载权限表后,新密码开始有效。而且MySQL服务器开始进行权限认证。用户必须输入用户名和密码才能登录MySQL数据库。

15.3 权限管理

15.3.1 MySQL的各种权限

15.3.2 授权

MySQL中,使用GRANT关键字来为用户设置权限。
MySQL中,必须拥有GRANT权限的用户才可以执行GRANT语句。语法:

    详见书上。

15.3.3 收回权限

收回权限就是取消某个用户的某些权限。
MySQL中,可以使用REVOKE关键字来为用户设置权限。
语法:

    详见书上。

15.3.4 查看权限

MySQL中,

    可以使用SELECT语句来查询user表中各用户的权限;
    可以直接使用SHOW GRANTS语句来查看权限;

详见书上。

15.6 常见问题及解答

  1. mysqladmin命令不能修改普通用户的密码?
  2. 新创建的MySQL用户不能在其他机器上登录MySQL数据库?

参考文献:
1.《MySQL入门很简单》。

你可能感兴趣的:(数据库,MySQL)