• 第三章 mysql用户管理


    MySQL的用户管理	 
    
     
    Linux上用户操作创建用户:useradd 删除用户:userdel 修改用户:usermod
     
    MySQL上用户操作
    创建用户:create user 、 grant
    创建用户:create user 、 grant
    #创建用户
    create user zls@'%';
    #创建用户同时给密码(5.7)如果用户不存在没法使用grant
    create user qls@'%' identified by '123';
    grant all on *.* to qls@'%';
    
    
    删除用户:drop user
    mysql> drop user root@'db02';
    Query OK, 0 rows affected (0.00 sec)
    mysql> drop user ''@'db02';
    Query OK, 0 rows affected (0.00 sec)
    
    
    修改用户:update、alter、grant
    mysql> update mysql.user set p
    host='localhost';
    
    
    MySQL用户定义	 
    用户名@'主机域'
    root@'%' select root@'localhost' 超级用户 root@'127.0.0.1' 超级用户 root@'10.0.0.%' root@'10.%.%.%' root@'10.0.0.0/255.255.255.0' root@'db01'
    
    MySQL用户管理实战	 
    
    1.误删除root用户
    [root@db01 bin]# mysqld_safe --skip-grant_tables &
    --skip-grant_tables #跳过授权表
    [root@db01 bin]# mysqld_safe --skip-grant-tables --skip-networking &
    --skip-networking # 跳过网络(安全)
    mysql> insert into user(user,host,password) values( 'root','localhost',PASSWORD('123'));
    mysql> insert into user(user,host,password,ssl_cipher,x509_issuer,x509_subject)
    values('root','localhost',PASSWORD('123'),'null','null','null');
    
     
    2.忘记root密码
    先停止数据库
    mysqld_safe --skip-grant-tables --skip-networking &
    #1.update修改密码
    update mysql.user set password=PASSWORD('123') where user='root' and host='localhost';
    mysql> flush privileges;
    #2.set
    mysql> set password=PASSWORD('1');
    #3.grant
    mysql> grant all on *.* to root@'localhost' identified by '2';
    #4.mysqladmin
    [root@db01 ~]# mysqladmin -uroot -p2 password '123'
    #5.alter
    
    
    MySQL的权限管理	 
    
    INSERT,SELECT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN,  PROCESS, FILE, REFERENCES, 
    INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, 
    REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER 
    ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE
    
    给开发开权限
    grant INSERT,SELECT, UPDATE, DELETE on *.* to dev@ 'xxx';
    
    权限最小化,最小级别不是表级别,是列级别
    grant select on mysql.user.user to dev@'10.0.0.5%' identified by '123';
    
    主机域:10.0.0.5% 可以连接:10.0.0.50-59 10.0.0.5 脱敏:脱离敏感信息
    grant select(user,host) on wzry.user to no_vip@ '%' identified by '123';
    
    
    数据库集群,10.0.0.51 52 53 54 grant     all privileges    on     *.*    to   
    
    oldboy@’10.0.0.%’  identified by    ‘123’;                 权限               作用对象          归属               密码
    
    作用对象分解
    *.* [当前MySQL实例中所有库下的所有表] wordpress.* [当前MySQL实例中wordpress库中所有表(单库级别)] wordpress.user [当前MySQL实例中wordpress库中的user表(单表级别)] 单列级别,是最小级别
     create database wordpress;
    use wordpress;
    create table t1 (id int);
    create table t2 (id int);
    create database blog;
    use blog;
    create table tb1 (id int);
    
    
    mysql> show databases;
    +--------------------+
    | Database |
    +--------------------+
    | blog |
    | wordpress |
    +--------------------+
    mysql> show tables from wordpress
    +---------------------+
    | Tables_in_wordpress |
    +---------------------+
    | t1 |
    | t2 |
    +---------------------+
    mysql> show tables from blog;
    +----------------+
    | Tables_in_blog |
    +----------------+
    | tb1 |
    +----------------+
    
    1.grant select on *.* to wordpress@’10.0.0.5%’ identified by ‘123’; 针对wordpress@'10.0.0.5%' 授权 所有库所有表 查询权限  密码是 123
    2.grant insert,delete,update on wordpress.* to wordpress@’10.0.0.5%’ identified by ‘123’; 针对wordpress@'10.0.0.5%'  授权 插入、删除、修改 wordpress库中的所有表 密码是 123
    3.grant all on wordpress.t1 to wordpress@’10.0.0.5%’ identified by ‘123’; 针对wordpress@'10.0.0.5%' 授权所有权限 wordpress库中的t1表 密码是123
     
    
    一个客户端程序使用wordpress用户登陆到10.0.0.51的MySQL后
    [root@db02 ~]# mysql -uwordpress -p123 -h10.0.0.51
    
     
    对t1(wordpress)表的管理能力? t1:select ,insert,delete,update all 所有权限
    对t2(wordpress)表的管理能力?t2:select,insert,delete,update
    insert update delete select
    对tb1表的管理能力?只有select
    
     
    结论:
    如果在不同级别都包含某个表的管理能力时,权限是相加关系。
    但是我们不推荐在多级别定义重复权限。
    最常用的权限设定方式是单库级别授权,即:wordpress.* 【单库级别】
    
     
    在企业中,开发让你给他开一个MySQL的用户:
    grant insert,delete,update on wordpress.* to wordpress@’10.0.0.5%’ identified by ‘123’;
    1.权限是什么?insert,delete,update
    2.哪个库,哪几张表?哪些列? wordpress.*
    3.你从哪里连接?’10.0.0.5%’
    4.用户名和密码是什么?
    5.发邮件,走流程
    MySQL的连接管理
    	 mysql
    -u:指定用户
    -p:指定密码
    -P:指定端口
    -S:指定socket文件
    -h:指定主机域
    -e:指定SQL语句
    
    
    
    MySQL的启动方式	 
    
    /etc/init.d/mysqld start 
    service mysqld start 
    systemctl start mysqld
    mysqld_safe --defaults-file=/etc/my.cnf &
    
    MySQL的关闭方式	 
    
    /etc/init.d/mysqld stop 
    service mysqld stop 
    systemctl stop mysqld 
    mysqladmin -uroot -p123 shutdown 
    
    
    MySQL实例初始化配置	 
    kill -9
    pkill -9
    killall
    ??????
    
    配置文件读取顺序:
    
     
     
    /etc/my.cnf server_id=1
    /etc/mysql/my.cnf server_id=2
    /application/mysql/my.cnf server_id=3
    ~/.my.cnf server_id=4
    
    [root@db02 ~]# mysql -uroot -p123 -e "show variables like 'server_id'"
    Warning: Using a password on the command line interface can be insecure.
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | server_id | 4 |
    +---------------+-------+
    
    思考:
    
    #cmake:
    socket=/application/mysql/tmp/mysql.sock
    #命令行:
    --socket=/tmp/mysql.sock
    #配置文件:
    /etc/my.cnf中[mysqld]标签下: socket=/opt/mysql.sock
    #default参数:
    --defaults-file=/tmp/a.txt配置文件中[mysqld]标签下: socket=/tmp/test.sock
    
    1./tmp/mysql.sock
    3./tmp/test.sock
     
    优先级总结:
    1.命令行优先级最高
    2.--defaults-file
    3.配置文件读取顺序反着来
    4.cmake优先级最低
     
    mysql配置文件的作用:
    1.影响服务端的启动
    2.影响客户端的连接
     
    MySQL多实例	 
    
    什么是实例?
    一个进程+多个线程+预分配的内存结构
     
    什么是多实例?
    多个进程+多个线程+多个预分配内存结构
     
    配置文件 datadir 端口 socket 启动脚本
    1.准备多个配置文件
    #创建多个存放配置文件的目录
    [root@db02 ~]# mkdir /data/{3307,3308,3309} -p
    [root@db02 ~]# tree /data/
    /data/
    ├── 3307
    ├── 3308
    └──3309
    #创建多个配置文件
    [root@db02 ~]# vim /data/3307/my.cnf
    [mysqld]
    basedir=/application/mysql
    datadir=/data/3307/data
    socket=/data/3307/data/mysql.sock
    port=3307
    log_error=/data/3307/data/3307.err
    server_id=7
    pid_file=/data/3307/data/3307.pid
    -----------------------------------------------------
    [root@db02 ~]# vim /data/3308/my.cnf
    [mysqld]
    basedir=/application/mysql
    datadir=/data/3308/data
    socket=/data/3308/data/mysql.sock
    port=3308
    log_error=/data/3308/data/3308.err
    server_id=8
    pid_file=/data/3308/data/3308.pid
    -----------------------------------------------------
    [root@db02 ~]# vim /data/3309/my.cnf
    [mysqld]
    basedir=/application/mysql
    datadir=/data/3309/data
    socket=/data/3309/data/mysql.sock
    port=3309
    log_error=/data/3309/data/3309.err
    server_id=9
    pid_file=/data/3309/data/3309.pid
    -----------------------------------------------------
    [root@db02 ~]# tree /data
    /data
    ├── 3307
    │ └── my.cnf
    ├── 3308
    │ └── my.cnf
    └── 3309
    └──my.cnf
    
    
    2.初始化多个datadir
    [root@db02 ~]# cd /application/mysql/scripts/
    #初始化3307的数据目录
    [root@db02 scripts]# ./mysql_install_db --defaults-file=/data/3307/my.cnf --user=mysql --basedir=/application/mysql --datadir=/data/3307/data
    #3308
    [root@db02 scripts]# ./mysql_install_db --defaults-file=/data/3308/my.cnf --user=mysql --basedir=/application/mysql --datadir=/data/3308/data
    #3309
    [root@db02 scripts]# ./mysql_install_db --defaults-file=/data/3309/my.cnf --user=mysql --basedir=/application/mysql --datadir=/data/3309/data
    [root@db02 scripts]# tree -L 2 /data
    /data
    ├── 3307
    │ ├── data
    │ └── my.cnf
    ├── 3308
    │ ├── data
    │ └── my.cnf
    └──3309
    ├── data
    └my.cnf
    3.启动多实例
    mysqld_safe --defaults-file=/data/3307/my.cnf &
    mysqld_safe --defaults-file=/data/3308/my.cnf &
    mysqld_safe --defaults-file=/data/3309/my.cnf &
    #检查端口
    [root@db02 scripts]# netstat -lntup
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program
    name
    tcp6 0 0 :::3306 :::* LISTEN
    13052/mysqld
    tcp6 0 0 :::3307 :::* LISTEN
    13598/mysqld
    tcp6 0 0 :::3308 :::* LISTEN
    13428/mysqld
    tcp6 0 0 :::3309 :::* LISTEN
    13768/mysqld
    
    4.设置密码
    [root@db02 scripts]# mysqladmin -uroot -p3307 -S/data/3307/data/mysql.sock password '3307'
    [root@db02 scripts]# mysqladmin -uroot -p3308 -S/data/3308/data/mysql.sock password '3308'
    [root@db02 scripts]# mysqladmin -uroot -p3309 -S/data/3309/data/mysql.sock password '3309'
    5.连接MySQL
    [root@db02 scripts]# mysql -uroot -p3307 -S /data/3307/data/mysql.sock
    [root@db02 scripts]# mysql -uroot -p3308 -S /data/3308/data/mysql.sock
    [root@db02 scripts]# mysql -uroot -p3309 -S /data/3309/data/mysql.sock
    #小技巧
    [root@db02 bin]# vim mysql3309
    mysql -uroot -p3309 -S /data/3309/data/mysql.sock
    [root@db02 bin]# chmod +x mysql3309
    

      

    人的一生或多或少都在为一些事情努力着,有目标的人生是精彩的!朋友请不要在原地画圈圈,该行动了!
  • 相关阅读:
    作为一个iOS Developer 为什么我不用Swift?
    闲着蛋疼没事干,写个Mac端的Kcptun Client管理器
    macOS 10.12 解决模拟器不流畅的一段命令行
    「iOS造轮子」之UIButton 用Block响应事件
    Java spring security 开发企业级权限管理系统
    mysql性能优化30条
    Django高级实战-开发企业级问答网站(二)
    Django高级实战 开发企业级问答网站 (一)
    微信小程序云开发之云音乐
    flask全栈开发11 memcached,redis教程:CSRF攻击
  • 原文地址:https://www.cnblogs.com/ronglianbing/p/11801020.html
Copyright © 2020-2023  润新知