美文网首页
六、权限管理和日志管理

六、权限管理和日志管理

作者: 胖虎喜欢小红 | 来源:发表于2020-01-28 10:32 被阅读0次

    一、权限管理

    1.用户管理

    1. 登录和退出MySQL
    远程登陆:
    客户端语法:mysql  -u  用户名  -p  密码  -h  ip地址   -P端口号:如果没有改端口号就不用-P指定端口
    [root@linux_server ~]# mysql -h192.168.94.109 -P 3306 -uroot -pDuan@123
    

    如果报错进入server端服务器登陆mysql执行:
    mysql> use mysql
    mysql> update user set host = '%' where user = 'root';
    mysql> flush privileges;

    [root@linux_server ~]# mysql -h192.168.94.109 -P 3306 -uroot -pDuan@123 -e 'show databases;'
    -h  指定主机名            【默认为localhost】
    -大P MySQL服务器端口       【默认3306】
    -u  指定用户名             【默认root】
    -p  指定登录密码           【默认为空密码】
    -e  接SQL语句,可以写多条拿;隔开
    [root@linux_server ~]# mysql -h192.168.94.109 -P 3306 -uroot -pDuan@123 -D mysql -e 'select host from user;'
    此处 -D mysql为指定登录的数据库
    修改端口rpm安装:vim /etc/my.cnf
    在到【mysql】标签下面添加port=指定端口。重启服务
    

    2.创建用户

    方法一:CREATE USER语句创建
    mysql> create user tom@'localhost' identified by 'Tom@123'; #创建用户为tom,并设置密码。
    mysql> FLUSH PRIVILEGES; #更新授权表
    注:
    identified by :设置密码
    在用户tom@'  ' 这里 选择:
    %:允许远程登陆。也可以指定某个ip,允许某个ip登陆。也可以是一个网段。
    %:包括所有的主机,不包括本机(127.0.0.1),但是不包括(localhost)
    ==客户端主机     %                   所有主机
                192.168.94.%            192.168.94.0网段的所有主机
                192.168.94.109          指定主机
                localhost               指定主机
    
    方法二: GRANT语句创建  ---授权。
    mysql> GRANT ALL ON *.* TO 'jack'@’localhost’ IDENTIFIED BY 'Jack@123';
                #权限 库名.表名  账户名                设置密码
    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0.00 sec)
    
            修改远程登陆:
            将原来的localhost修改为%或者ip地址
            mysql> use mysql
            mysql> update user set host = '192.168.94.%' where user = 'jack';
            mysql> FLUSH PRIVILEGES;
    

    3、刷新权限

    修改表之后需要刷新权限
    方式1:
        mysql > flush privileges;
    
    使用命令授权:grant   
       也可创建新账户(不过后面的版本会移除这个功能,建议使用create user) 
    语法格式:
    grant 权限列表  on 库名.表名 to '用户名'@'客户端主机' IDENTIFIED BY 'Duan@123';
     ==权限列表     all         所有权限(不包括授权权限)
                select,update   
                select, insert  
                                    
     ==数据库.表名   *.*         所有库下的所有表                  Global level
                   web.*        web库下的所有表                  Database level
                web.stu_info    web库下的stu_info表              Table level
    给刚才创建的用户tom授权:
    mysql> grant select,insert on *.* to 'tom'@'localhost';
    mysql> FLUSH PRIVILEGES;
    

    4、查看权限

    查看权限
    1.看自己的权限:
    mysql> SHOW GRANTS\G
    *************************** 1. row ***************************
    Grants for root@%: GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION
        
    2.看别人的权限:
    mysql> SHOW GRANTS FOR tom@'localhost'\G
    *************************** 1. row ***************************
    Grants for tom@localhost: GRANT SELECT, INSERT ON *.* TO 'tom'@'localhost'  
    

    5、修改密码

    ===root修改自己密码
    方法一:
    # mysqladmin -uroot -p'123' password 'new_password'     //123为旧密码
    案例:
    # mysqladmin -uroot -p'Duan123' password 'Duan@123';
    方法二:
    mysql>SET PASSWORD='new_password';
    
    ==root修改其他用户密码
    mysql> use mysql
    mysql> SET PASSWORD FOR user3@'localhost'='new_password'
                                      用户   =   新密码
    

    6、破解密码

    [root@linux_server ~]# vim /etc/my.cnf  //在最后面添加下面两行
    lower_case_table_names=1
    skip-grant-tables
    [root@linux_server ~]# systemctl restart mysqld
    [root@linux_server ~]# mysqld --skip-grant-tables --user=mysql &
    [root@linux_server ~]# mysql -uroot
    mysql> UPDATE mysql.user SET authentication_string=password('Duan@123') WHERE user='root' AND host='localhsot';
    mysql> FLUSH PRIVILEGES;   
    

    7、删除用户

    方法一:DROP USER语句删除
    DROP USER 'jack'@'localhost';
    
    方法二:DELETE语句删除
    DELETE FROM mysql.user  WHERE user='tom' AND host='localhost';
    
    更新授权表:  FLUSH PRIVILEGES;
    

    8、权限控制机制

    mysql.user                  # 所有mysql用户的账号和密码,以及对用户对全库全表权限(*.*)
    mysql.db                    # 非mysql库的授权都保存在此(db.*)
    mysql.table_priv            # 某库某表的授权(db.table)
    mysql.columns_priv          # 某库某表某列的授权(db.table.col1)
    mysql.procs_priv            # 某库存储过程的授权
    四张表:user   db    tables_priv  columns_priv
    1.用户认证
    查看mysql.user表
    2.权限认证
    以select权限为例:
    1.先看 user表里的select_priv权限
     Y:不会接着查看其他的表  拥有查看所有库所有表的权限
     N:接着看db表
    2.db表:  存储了某个用户对一个数据库的权限。
     Y:不会接着查看其他的表  拥有查看所有库所有表的权限
     N:接着看tables_priv表
    3.tables_priv表:可以对单个表进行权限设置
     table_priv:如果这个字段的值里包括select  拥有查看这张表所有字段的权限,不会再接着往下看了
     table_priv:如果这个字段的值里不包括select,接着查看下张表还需要有column_priv字段权限
    4.columns_priv:针对数据列设置操作权限.
     column_priv:有select,则只对某一列有select权限
                 没有则对所有库所有表没有任何权限
     注:其他权限设置一样。
    

    二、日志管理

    1566308202065.png
    1 错误日志 :启动,停止,关闭失败报错。rpm安装日志位置 /var/log/mysqld.log #默认开启
    2 通用查询日志:所有的查询都记下来。 #默认关闭,一般不开启
    3 二进制日志(bin log):实现备份,增量备份。只记录改变数据,除了select都记。
    4 中继日志(Relay log):读取主服务器的binlog,在slave机器本地回放。保持与主服务器数据一致。
    5 slow log:慢查询日志,指导调优,定义某一个查询语句,执行时间过长,通过日志提供调优建议给开发人员。
    6 DDL log: 定义语句的日志。
    
    Error Log
    [root@mysql-server ~]# vim /etc/my.cnf
    log-error=/var/log/mysqld.log
    编译安装的在/usr/local/mysql/
    
    Binary Log:前提需要开启
    [root@mysql_server ~]# vim /etc/my.cnf
    log-bin=/var/log/mysql-bin/mylog  #如果不指定路径默认在/var/lib/mysql
    server-id=1   #AB复制的时候使用,为了防止相互复制,会设置一个ID,来标识谁产生的日志
    
    [root@mysql_server ~]# mkdir /var/log/mysql-bin
    [root@mysql_server ~]# chown mysql.mysql /var/log/mysql-bin/
    [root@mysql_server ~]# systemctl restart mysqld
    
    查看binlog日志:开启之后等一会
    [root@mysql_server mysql]# mysqlbinlog mylog.000001 -v
    # at 4     #位置点
    #190820 19:41:26  #时间点
    注:
    1. 重启mysqld 会截断
    2. mysql> flush logs; 会截断
    3. mysql> reset master; 删除所有binlog,不要轻易使用,相当于:rm -rf /
    4. 删除部分
    mysql> PURGE BINARY LOGS TO 'mylog.000004';   #删除mysqllog.000004之前的日志
    5. 暂停 仅当前会话
    SET SQL_LOG_BIN=0;  #关闭
    SET SQL_LOG_BIN=1;  #开启
    =====================================
    ***                     解决binlog日志不记录insert语句
    ***                     登录mysql后,设置binlog的记录格式:
    ***                     mysql> set binlog_format=statement;
    ***                     然后,最好在my.cnf中添加:
    ***                     binlog_format=statement
    ***                     修改完配置文件之后记得重启服务
    ================================================
    Slow Query Log : 慢查询日志
    slow_query_log=1  #开启
    slow_query_log_file=/var/log/mysql-slow/slow.log
    long_query_time=3    #设置慢查询超时间,单位是秒
    
    # mkdir /var/log/mysql-slow/
    # chown mysql.mysql /var/log/mysql-slow/
    # systemctl restart mysqld
    
    验证查看慢查询日志
    mysql> select sleep(6);
    # cat /var/log/mysql-slow/slow.log
    

    相关文章

      网友评论

          本文标题:六、权限管理和日志管理

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