zoukankan      html  css  js  c++  java
  • 28.Mysql权限与安全

    28.Mysql权限与安全
    28.1 Mysql权限管理
    28.1.1 权限系统的工作原理
    对连接的用户进行身份认证,合法的用户通过认证,不合法的用户拒绝连接;
    对通过认证的合法用户赋予相应的权限,用户可以在取得的权限范围内对数据库做相应的操作。
    身份认证在user表中包括三个属性:host、user、password。
    Mysql权限表在启动时就已加载在内存中,通过身份认证的用户直接在内存中存取权限表。

    28.1.2 账户管理
    1.创建账户
    语法:
    create user user_name identified by 'password';
    例子:
    create user user_1 identified by '123456';
    select * from user;
    -- 授予登录权限
    grant usage on *.* to 'user_1'@'%';
    2.修改账户[密码]
    命令行方式:
    # mysqladmin -h host_name -u user_name password "newpwd"
    SQL方式:
    mysql> set password for 'user_name'@'host_name'=password('newpwd');
    SQL方式修改自身密码:
    mysql> set password=password('newpwd');
    直接修改user表的方式:
    mysql> update user set password=password('newpwd') where host='host_name' and user='user_name';
    3.删除账户
    drop user user_name[,...];

    28.1.3 权限管理
    1.权限表按范围分为4级:
    user 全局级权限(物理数据库级)
    db 逻辑数据库级权限(对应其它数据库的模式级)
    tables_priv 表级权限
    columns_priv 列级权限
    权限获取顺序为:user-->db-->tables_priv-->columns_priv
    即当上一级没有该权限时才向下一级获取,范围更大的权限覆盖范围小的权限。
    2.权限的种类分为25种:
    select_priv 查询权限
    insert_priv 新增权限
    update_priv 修改权限
    delete_priv 删除权限
    index_priv 索引权限(create、alter、drop索引的权限)
    alter_priv 修改表权限
    create_priv 创建表权限
    drop_priv 删除表权限
    grant_priv 授权的权限
    create_view_priv 视图权限(create、alter、drop视图的权限)
    show_view_priv 查看视图的权限
    create_routine_priv 存储过程和函数的创建权限(create、alter、drop视图的权限)
    alter_routine_priv 存储过程和函数的修改、删除权限(create、alter、drop视图的权限)
    references_priv
    reload_priv
    shutdown_priv
    process_priv
    file_priv
    show_db_priv
    super_priv
    create_tmp_table_priv
    lock_tables_priv
    execute_priv
    repl_slave_priv
    repl_client_priv
    usage 登录权限
    all privileges 上述所有权限的统称(不包括grant_priv,grant_priv由with grant option选项决定)
    3.查看账户权限
    show grants for user@host;
    或者
    select * from user;
    select * from db;
    select * from information_schema.schema_privileges where grantee="user@host";
    select * from tables_priv;
    select * from columns_priv;

    4.授权
    语法:
    grant 权限 on [对象类型] {范围和对象} to user@host[,...] with grant option;
    说明:
    权限 上述的25种权限及统称all privileges。
    对象类型 分为table、function、procedure,默认为table,给函数或存储过程单独授权时需指定对象类型(function、procedure)。
    范围和对象 指授权的客体,即将某个对象或某个范围内的所有对象的权限授出。
    全局级(user表)用*.*表示,*.*即所有数据库的所有对象,该权限存储于user表;
    数据库级(db表)用db_name.*表示,db_name.*即db_name数据库的所有对象,该权限存储于db表;
    表级(tables_priv表)用db_name.tab_name表示,db_name.tab_name即db_name数据库的tab_name表,该权限存储于tables_priv表;
    列级(columns_priv表)用db_name.tab_name.col_name表示,db_name.tab_name.col_name即db_name数据库的tab_name表的col_name列,该权限存储于columns_priv表。
    user@host 指授权的主体,即授给谁。user表示用户,host表示用户的登录地址。
    with grant option 表示用户能否将获得的权限进行转授,转授功能对应grant_priv权限。
    例子1:给用户user_1授scott.emp.sal列的select权限。
    创建用户test
    create user user_1@localhost indetifyde by 'liwei';
    grant select on scott.emp.sal to user_1@localhost;
    select * from columns_priv;
    例子2:给用户user_1授scott.emp表的select权限。
    grant select on scott.emp to user_1@localhost;
    select * from tables_priv;
    例子3:给用户user_1授scott数据库的select权限。
    grant select on scott.* to user_1@localhost;
    select * from db;
    例子4:给用户user_1授所有对象的select权限。
    grant select on *.* to user_1@localhost;
    select * from user;
    例子4:给用户user_1授所有对象的select权限,并允许其转授权。
    grant select on *.* to user_1@localhost with grant option;
    select * from user;

    5.回收权限
    语法:
    revoke 权限 on 模式.对象 from 用户@host;

    6.账户限制(不建议设置)
    账户限制指限制某个账户访问,当超过user中max_questions、max_updates、max_connections、max_user_connections四个列设置的阈值时将提示资源不足。
    语法:
    grant ... with option;
    option包括下面4个选项:
    max_queries_per_hour count:每小时最大查询次数,对应max_questions列设置;
    max_updates_per_hour count:每小时最大更新次数,对应max_updates列设置;
    max_connections_per_hour count:每小时最大连接次数,对应max_connections列设置;
    max_user_connections count:最大用户连接次数,对应max_user_connections列设置;
    例子:


    28.2 mysql安全问题
    28.2.1 操作系统相关的安全问题
    28.2.2 数据库相关的安全问题
    28.3 其他安全设置选项
    28.3.1 old-passwords
    28.3.2 safe-user-create
    28.3.3 secure-auth
    28.3.4 skip-grant-tables
    28.3.5 skip-network
    28.3.6 skip-show-database
    28.4 小结

  • 相关阅读:
    Serverless 架构到底要不要服务器?
    Serverless 在 SaaS 领域的最佳实践
    20 行代码:Serverless 架构下用 Python 轻松搞定图像分类和预测
    创业公司用 Serverless,到底香不香?
    如何通过 Serverless 轻松识别验证码?
    Serverless 是一种思想状态
    都 2021 年了,Serverless 能取代微服务吗?
    从零入门 Serverless | 架构的演进
    Serverless 的价值
    实验楼前后端代码
  • 原文地址:https://www.cnblogs.com/BradMiller/p/10439945.html
Copyright © 2011-2022 走看看