美文网首页DevOps
MySQL用户和权限管理

MySQL用户和权限管理

作者: 4e8ea348373f | 来源:发表于2018-04-26 11:17 被阅读0次

    一,权限类别

    (1).库和表级别 table or database

    1.create
    2.alter
    3.create view
    4.drop
    5.index
    6.show view
    7.grant option 能有把自己获得的权限赠给其他用户一个副本

    (2).字段级别 MySQL权限力度支持到字段级别

    1.select
    2.insert
    3.delete 没有字段级别的权限,要删就是一行
    4.update

    (3).管理类

    1.cerate temporary tables 创建临时表 临时表不等同于普通表
    2.create user
    3.super
    4.file
    5.show databases
    6.reload 重新装载授权表
    7.shutdown
    8.repliaction slave
    9.replication client
    10.lock tables
    11.process

    (4).程序类 是否有权限运行某个存储过程,存储函数

    1.function
    2.procedure
    3.trigger
    4.用法 create,alter,drop,excute 个数为3*4=12个

    所有权限 all,all privileges

    二,元数据数据库 mysql

    1.授权表 db,host,user 限制哪些用户,通过哪些主机,连接到哪个数据库
    2.授权表 columns_priv,tables_priv,proxies_priv,procs_priv

    三,用户账号

    1.'username'@'host': @'host':主机名(需要反解),ip,通配符
    2.创建用户 create user 'username'@'host' [indentified by 'password']
    3.查看用户获得授权 show grants for 'username'@'host'
    4.重命名用户, rename user old_user_name to new_user_name
    5.删除用户 drop user 'username'@'host'
    6.修改密码 set password for ,update mysql.user set password=PASSWORD('pw') where clause(需要刷新授权表,不能自动触发); mysqladmin password -u -p mysqladmin -uroot -p123456 password

    ps:忘记root密码

    1.启动mysqld进程时,为期使用 --skip-grant-tables 跳过用户授权表,不检查授权和密码,--skip-networking 禁止网络连接
    2.使用update命令修改管理员密码
    3.关闭mysqld进程,移除上述两项,重启mysqld

    image.png

    四,权限管理

    (1).授权

    1.grant priv_type[,...] on [{table|function|procedure}] db.{table|routine} to 'username'@'host' [identified by 'pw'] 密码可省 [requitre ssl ] [with with_option]

    (2).取消授权

    1.revoke priv_type [(column_list)] [, priv_type [(column_list)]] ... on [object_type] priv_level from user [, user]...

    五,查询缓存

    1.如果表有变化,与其有关的缓存将会失效,所有数据更改比较多的时候,不建议开启
    2.用户和应用程序透明
    3.如果服务器cpu核心过多,缓存可能成为瓶颈,多核心竞争,建议调小,以减少他的使用率或关闭
    4.哈希因素:查询本身,查询的数据库,客户端使用协议版本
    5.查询语句任何字符的不同,都会导致缓存不能命中
    6.哪些查询可能不会被缓存 1.包含自定义函数,2.存储函数,3.用户自定义变量,4.临时表,5.mysql系统表,6.包含列级别权限的表,7.有着不确定级别的函数(now())
    7.存储在内存,要有高效的内存回收算法,否则容易发生内存碎片
    8.不能简单的认为,命中率小,就没用,这样就不正确的,
    9.show global variables like '%query%';
    10.set query_cache_type=ON;
    11.query_cache_min_res_unit 查询缓存中内存块的最小分配单位 按需调整,较小的值会减少浪费,但是会导致频繁的内存分配操作,较大的值,会导致浪费,导致碎片过多,调整合适的值,就是平衡cpu和内存
    12.query_cache_limit 能够缓存的最大的查询结果
    13.对于较大结果的查询语句,建议在select 中使用sql_no_cache
    14.query_cache_size 查询缓存总共可用的内存空间,单位为字节,必须为1024的整数倍
    15.query_cache_type ON,OFF,demand
    16.query_cache_wlock_invalidate 如果某表被其他的连接锁定,是否仍然可用从查询中返回结果,默认值为OFF 表示可以返回,ON表示不允许

    六,提高查询缓存命中率

    image.png
    MariaDB [(none)]> show global status like 'Qcache%'
        -> ;
    +-------------------------+---------+
    | Variable_name           | Value   |
    +-------------------------+---------+
    | Qcache_free_blocks      | 1       |
    | Qcache_free_memory      | 1031336 |
    | Qcache_hits             | 0       |
    | Qcache_inserts          | 0       |
    | Qcache_lowmem_prunes    | 0       |
    | Qcache_not_cached       | 0       |
    | Qcache_queries_in_cache | 0       |
    | Qcache_total_blocks     | 1       |
    +-------------------------+---------+
    8 rows in set (0.00 sec)
    
    MariaDB [(none)]> show global status like 'Com_select%';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | Com_select    | 6     |
    +---------------+-------+
    
    

    缓存命中率的评估 Qcache_hits/(Qcache_hits+Com_select)

    相关文章

      网友评论

        本文标题:MySQL用户和权限管理

        本文链接:https://www.haomeiwen.com/subject/wycplftx.html