• NoteOfMySQL-11-权限管理


    一、权限系统

      MySQL数据库中使用3种不同类型的安全检查:登录验证、授权、访问控制。

    二、权限表

      MySQL权限表存储在名为mysql的数据库中,常用的表有user、db、tables_priv、columns_priv、procs_priv。进行身份验证时也按照上述的顺序依次查找验证。

    权限表详解

    1. user表

    字段 字段名 说明
    用户字段 host、user、password、...
    权限字段 …_priv 包含几十个
    安全字段 ssl_type
    ssl_cipher
    x509_issuer
    x509_subject
    ssl用于加密
    x509用户标识用户
    plugin是用户验证用户身份的插件
    资源控制列 max_questions
    max_updates
    max_connections
    max_user_connections
    用户每小时允许的查询操作次数
    用户每小时允许的更新操作次数
    用户每小时允许执行的连接操作次数
    单个用户可以同时具有的连接次数。
    以上默认值都为0,表示无限制次数

      MySQL5.7 版本的mysql.user表中,password字段改成authentication_string。

    2. db表和host表

    • db表中存储用户对某个数据库的操作权限,决定用户能从那个主机存取哪个数据库。
    • host表中存储了某个主机对数据库的操作权限,配合db表对给定主机上数据库级操作权限有更细致的控制。

    这两个表不受grant、revoke语句的影响。

      user表中的权限是针对所有数据库的。如果user表中的select_ priv字段取值为y,那么该用户可以查询所有数据库中的表。如果为某个用户只设置了查询test表的权限,那么user表的select_ priv字段的取值为n。而这个select权限则记录在db表中,db 表中select_ priv 字段的取值将会是y。由此可知,用户先根据user表的内容获取权限,然后再根据db表的内容获取权限。

    3. tables_priv表

      tables_priv表对单个表进行权限设置,用来指定表级权限,权限用于一个表的所有列。

    4. columns_priv表

      columns_priv表对表的某一列进行权限设置。

    5. procs_priv表

      procs_priv表对存储过程和函数进行权限设置。

    三、用户管理

    1. 添加用户

    1.1 create user语句

    create user user_name[@host_name] [identified by passwd] [login policy policy_name] [force password change {on | off}]
    
    参数 说明
    user_name 用户名
    host_name 主机名,省略时默认为%,表示一组主机
    passwd 密码
    policy_name 用户登录的策略名称
    force password change 指定用户登录时是否需重新设置新密码

    注意点

    • user_name、passwd必须是有效的标识符:不能以空格、单引号、双引号开头,不能以空格结尾,不能含有分号。
    • 使用create user语句必须具有对mysql数据库的INSERT权限或全局的CREATE USER权限
    • 新创建的用户不能访问相关的数据库或表。

    create user语句添加用户

    1.2 insert语句

      可以直接使用insert语句将用户信息插入到mysql.user表中,但需要具有对user表的INSERT权限。用于user表中字段较多,要保证没有默认值的字段一定要给出值,即至少插入6个字段的值:host、user、password、ssl_cipher、x509_issuer、x509_subject。插入数据之后需要执行下面语句来使用户生效,这个命令需要RELOAD权限

    -- 插入数据到mysql.user表中
    insert into mysql.user(host,user,authentication_string,ssl_cipher,x509_issuer,x509_subject)
    values('host_aame', 'user_name', password('passwd'), '', '', '');
    
    -- 使新用户生效
    flush privileges;
    

    insert语句添加用户

    2. 查看用户

    select * from mysql.user [where host='host_name' and user='user_name'];
    

    3. 修改用户信息

    3.1 修改用户账户

      修改用户账户需要具有对mysql数据库的UPDATE权限或全局的CREATE USER权限

    rename user user_name@host_name to user_name@new_host [, ...];
    

    3.2 修改用户密码

    (1)mysqladmin命令

    mysqladmin -uuser_name -p password
    

      输入上述命令之后,根据提示输入旧密码和新密码即可。

    例子:将kate密码由kate90改为1234。

    修改密码前登录
    修改密码后登录

    (2)set语句

    set password [for 'user_name'@'host_name'] = password('new_passwd');
    

      可选参数省略时为修改当前用户的密码。

    (3)update语句

    -- 更新数据到mysql.user表中
    update mysql.user set authentication_string = password('new_passwd')
    where user = 'user_name' and host = 'host_name';
    
    -- 使修改生效
    flush privileges;
    

      此方法需要具有对mysql数据库的UPDATE权限和RELOAD权限

    4. 删除用户

    4.1 drop语句

    drop user user_name@host_name;
    

    4.2 delete语句

    -- 删除mysql.user表的数据
    delete from mysql.user where user = 'user_name' and host = 'host_name';
    
    -- 时删除生效
    flush privileges;
    

    删除用户

    四、账户权限管理

    待续...
  • 相关阅读:
    Python-TXT文本操作
    Appium-处理系统弹窗
    Appium-服务关键字
    App Inspector-iOS真机功能详解
    Appium+Python3+iOS真机环境搭建
    Appium-超过60s的应用场景如何处理
    python-入门的第一个爬虫例子
    Mysql(五) JDBC
    Mysql(四)正则表达式
    Mysql(三)约束
  • 原文地址:https://www.cnblogs.com/bpf-1024/p/14060100.html
Copyright © 2020-2023  润新知