• 幕客老师召集小伙伴
  • 运维高手36项修炼
  • python自动化运维项目实战
  • nginx从入门到实战
  • 阿里云与Centos7实战

MySQL安全机制

MySQL安全机制

========================================================
MySQL权限表
MySQL用户管理
MySQL权限管理
SSL加密连接


一、MySQL权限表
mysql.user                        Global level
    用户字段
    权限字段
    安全字段
    资源控制字段
mysql.db、mysql.host        Database level
    用户字段
    权限字段
mysql.tables_priv                Table level
mysql.columns_priv            Column level
procs_priv


二、MySQL用户管理
1. 登录和退出MySQL
    示例:
    mysql -h 192.168.5.240 -P 3306 -u root -p123 mysql -e ‘select user,host from user’
    -h    指定主机名
    -P    MySQL服务器端口
    -u    指定用户名
    -p    指定登录密码
    此处mysql为指定登录的数据库 
    -e    接SQL语句

2. 创建用户
方法一:CREATE USER语句创建
    CREATE USER user1@’localhost’ IDENTIFIED BY ‘123456’;

方法二: INSERT语句创建
    INSERT INTO mysql.user(user,host, password,ssl_cipher,x509_issuer,x509_subject)
    VALUES(‘user2’,’localhost’,password(‘123456’),’’,’’,’’);
    FLUSH PRIVILEGES;

方法三: GRANT语句创建
    GRANT SELECT ON *.* TO user3@’localhost’ IDENTIFIED BY ‘123456’;
    FLUSH PRIVILEGES;

3. 删除用户
方法一:DROP USER语句删除
    DROP USER user1@’localhost’;

方法二:DELETE语句删除
    DELETE FROM mysql.user 
        WHERE user=’user2’ AND host=’localhost’;
    FLUSH PRIVILEGES;


4. 修改用户密码
===root修改自己密码
方法一:
    # mysqladmin -u root -p password 'new_password'    //将提示输入旧密码

方法二:
    UPDATE mysql.user SET password=password(‘new_password’)
           WHERE user=’root’ AND host=’localhost’;
    FLUSH PRIVILEGES;

方法三:
    SET PASSWORD=password(‘new_password’);
    FLUSH PRIVILEGES;


==root修改其他用户密码
方法一:
    SET PASSWORD FOR user3@’localhost’=password(‘new_password’);
    FLUSH PRIVILEGES;

方法二:
    UPDATE mysql.user SET password=password(‘new_password’)
        WHERE user=’user3’ AND host=’localhost’;
    FLUSH PRIVILEGES;

方法三:
    GRANT SELECT ON *.* TO user3@’localhost’ IDENTIFIED BY ‘tianyun’; 
    FLUSH PRIVILEGES;


===普通用户修改自己密码
       SET password=password(‘new_password’);
   
===丢失root用户密码
    # vim /etc/my.cnf

   [mysqld]
    skip-grant-tables
    # service mysqld restart
    # mysql -uroot
    mysql> UPDATE mysql.user SET password=password(‘new_password’)
    WHERE user=’root’ AND host=’localhost’;
    mysql> FLUSH PRIVILEGES;

===mysql库下的user表如果为空

则需要通过正常的数据库中,拷贝root用户一行属性值,insert这一行数据进来,如下:

INSERT INTO user(host, user, password, select_priv, insert_priv, update_priv,ssl_cipher,x509_issuer,x509_subject) VALUES ('localhost','root',PASSWORD('123456'),'Y','Y','Y','','','')

 

注:权限都需要给足

 

三、MySQL权限管理
权限应用的顺序:
    user (Y|N) ==> db ==> tables_priv ==> columns_priv
    
语法格式:
    grant 权限列表  on 库名.表名 to 用户名@'客户端主机'  [identified by ‘密码’  with option参数];
    ==权限列表                    all                             所有权限(不包括授权权限)
                                        select,update    
                                        
    ==数据库.表名                *.*                        所有库下的所有表
                                        web.*                    web库下的所有表
                                        web.stu_info        web库下的stu_info表
                                        SELECT (col1), INSERT (col1,col2) ON mydb.mytbl
                                        
    ==客户端主机                %                            所有主机
                                        192.168.2.%        192.168.2.0网段的所有主机
                                        192.168.2.168        指定主机

with_option参数
    GRANT OPTION:                                授权选项
    MAX_QUERIES_PER_HOUR:             定义每小时允许执行的查询数
    MAX_UPDATES_PER_HOUR:            定义每小时允许执行的更新数
    MAX_CONNECTIONS_PER_HOUR:    定义每小时可以建立的连接数
    MAX_USER_CONNECTIONS:            定义单个用户同时可以建立的连接数

Grant示例:
    GRANT ALL ON *.* TO admin1@'%' IDENTIFIED BY 'tianyun';

    GRANT ALL ON *.* TO admin2@'%' IDENTIFIED BY 'tianyun' WITH GRANT OPTION;

    GRANT ALL ON bbs.* TO admin3@'%' IDENTIFIED BY 'tianyun';

    GRANT ALL ON bbs.user TO admin4@'%' IDENTIFIED BY 'tianyun';

    GRANT SELECT(col1),INSERT(col2,col3) ON bbs.user TO admin5@'%' IDENTIFIED BY 'tianyun';


回收权限REVOKE
查看权限
    SHOW GRANTS FOR admin1@'%'\G

回收权限REVOKE
    语法:
    REVOKE 权限列表 ON 数据库名 FROM 用户名@‘客户端主机’

    示例:
    REVOKE DELETE ON *.*  FROM admin1@’%’;             //回收部分权限
    REVOKE ALL PRIVILEGES FROM admin2@’%’;          //回收所有权限
    REVOKE GRANT OPTION FROM admin2@’%’;            //回收授权权限
    REVOKE ALL PRIVILEGES,GRANT OPTION FROM 'admin2'@'%';
========================================================

练习
建立一个普通用户cj 密码:123 只有192.168.1.56 可以访问,并且只有只读权限。

 

 

 

MySQL安全机制

Pingbacks已打开。

引用地址

暂无评论

发表评论