• Mysql 初始化 及 密码管理


    安装好mysql后,第一次初始化数据库

    前言:启动mysql数据库最好不要使用root用户,而是使用mysql用户启动

    官方解释:

       (永远不要使用root帐号启动MySQL Server。这样做很危险,

    因为拥有FILE'权限的用户会使得MySQL Server使用root帐户创建文件(比如,~root/.bashrc),

    为了防止类似的事情发生,mysqld默认拒绝用户使用root帐户启动,


    但root用户可以通过在命令后面加上"--user=root"选项来强行启动mysqld。)

    使用mysql账户启动数据库

    /bin/mysqld --user=mysql


    在创建mysql帐户后,可以将下面的内容添加到my.cnf文
    件中:

    [mysqld]

          user=mysql

    这个选项可以使你使用指定的用户帐户启动MySQL,无论是mysqld_safe还是mysql.server命令,都可以使用

     

     

     1.旧版本的mysql默认密码为空,

    直接登录即可

    用密码登陆  mysql -uroot 

             

    2.在一些新版本的mysql会创建随机默认密码,

    使用mysql_install_db命令初始化数据库,该命令会在安装Mysql的用户根目录下创建一个.mysql_secret文件,
    该文件记录了初始化生成的随机密码

    位置在/root/.mysql_secret 中(在5.6版本中是放在 ~/.mysql_secret 文件里)

    安装结束时会有文字提示。 

     

     

    3. 对于Mysql 5.7.6以后的5.7系列版本

       Mysql使用mysqld --initialize

      或mysqld --initialize-insecure命令来初始化数据库,


    mysqld --initialize-insecure可以不生成随机密码,设置数据库空密码。

    安装Mysql时默认使用的是mysqld --initialize命令:

    这个命令也会生成一个随机密码。改密码保存在了Mysql的日志文件中。

           mysql 的日志文件位置:

    mysql的配置文件是/etc/my.cnf,打开该文件,可以看到mysql的datadir和log文件等的配置信息,如下:

    datadir=/var/lib/mysql

    log-error=/var/log/mysqld.log

    打开log文件并搜索:

    #less /var/log/mysqld.log2017-02-27T05:53:46.368129Z 1 [Note] A temporary password is generated for root@localhost: V2:Y!Nh5Gi/6

     

    4.这里推荐使用

    MySQL安全配置向导mysql_secure_installation

    安装完mysql-server 会提示可以运行mysql_secure_installation。运行mysql_secure_installation会执行几个设置:

      a)为root用户设置密码

      b)删除匿名账号

      c)取消root用户远程登录

      d)删除test库和对test库的访问权限

      e)刷新授权表使修改生效

    通过这几项的设置能够提高mysql库的安全。建议生产环境中mysql安装这完成后一定要运行一次mysql_secure_installation


    5.

    在Centos 7系统上使用rpm命令安装Mysql后,mysql的配置文件是/etc/my.cnf,打开该文件,可以看到mysql的datadir和log文件等的配置信息,如下:

    datadir=/var/lib/mysql

    log-error=/var/log/mysqld.log


    打开/var/log/mysqld.log文件,搜索字符串A temporary password is generated for root@localhost:,可以找到这个随机密码,通常这一行日志在log文件的最初几行,比较容易看到。

    使用找到的随机密码登录mysql,首次登录后,mysql要比必须修改默认密码,否则不能执行任何其他数据库操作,这样体现了不断增强的Mysql安全性。

     


     

     

    第一次登陆后必须更改密码mysql> show databases;ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.mysql> set password = password('xxxxxx');

     

    2.运行设置程序

    /usr/bin/mysql_secure_installation

     



    修改密码:

    方法1: 用SET PASSWORD命令 

    格式:mysql> set password for 用户名@localhost = password('新密码'); 

    例子:mysql> set password for root@localhost = password('123'); 

     

     

    方法2:用mysqladmin 

    格式:mysqladmin -u用户名 -p旧密码 password 新密码 

    例子:mysqladmin -uroot -p123456 password 123 

     

     

    方法3:用UPDATE直接编辑user表 

    mysql> use mysql; 

    mysql> update user set password=password('123') where user='root' and host='localhost'; 

    mysql> flush privileges; 

     

     

    注意:更改密码: update mysql.user set authentication_string=password('123qwe') where user='root' and Host = 'localhost';

    *特别提醒注意的一点是,新版的mysql数据库下的user表中已经没有Password字段了

    而是将加密后的用户密码存储于authentication_string字段

    mysql> flush privileges;

    mysql> quit;

     

     

     

     

     

     

    方法4:在忘记root密码的时候,可以这样 

    以windows为例: 

    1. 关闭正在运行的MySQL服务。 

    2. 打开DOS窗口,转到mysqlin目录。 

    3. 输入mysqld --skip-grant-tables 回车。--skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。 

    4. 再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysqlin目录。 

    5. 输入mysql回车,如果成功,将出现MySQL提示符 >。 

    6. 连接权限数据库: use mysql; 。 

    6. 改密码:update user set password=password("123") where user="root";(别忘了最后加分号) 。 

    7. 刷新权限(必须步骤):flush privileges; 。 

    8. 退出 quit。 

    9. 注销系统,再进入,使用用户名root和刚才设置的新密码123登录。

    Linux:修改 mysql服务的配置文件

    [root@sample ~]# vi /etc/my.cnf                

    [mysqld]  

    datadir=/var/lib/mysql

    socket=/var/lib/mysql/mysql.sock

    user=mysql

    # Disabling symbolic-links is recommended to prevent assorted security risks

    skip-grant-tables                     #添加这句话,这时候登入mysql就不需要密码

    symbolic-links=0

    重启服务

    [root@sample ~]# /etc/init.d/mysqld start     或者 service mysqld start           

      

    登入mysql并设置新密码

    [root@sample ~]# mysql                                  

    mysql> USE mysql ;

    mysql> UPDATE user SET Password = password(‘new-password‘) WHERE User = 'root';

    mysql> flush privileges ;

    mysql> quit

                      

    恢复配置文件原样。

    在把 /etc/my.cnf 中 skip-grant-tables 注释了,

     

     

    重启mysql服务

    [root@sample ~]# /etc/init.d/mysqld restart          

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    设置密码为简单密码:

    如果修改为一个简单的密码,会报以下错误:

    mysql>  ALTER USER USER() IDENTIFIED BY '12345678';ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

    这个其实与validate_password_policy的值有关。

     

     

    查看validate_password_policy的值:

    mysql> select @@validate_password_policy;+----------------------------+| @@validate_password_policy |+----------------------------+| LOW                        |+----------------------------+1 row in set (0.00 sec)

    validate_password_policy有以下取值:

    Policy Tests Performed

    0 or LOW Length

    1 or MEDIUM Length; numeric, lowercase/uppercase, and special characters

    2 or STRONG Length; numeric, lowercase/uppercase, and special characters; dictionary file

    默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。

    有时候,只是为了自己测试,不想密码设置得那么复杂,譬如说,我只想设置root的密码为123456。

        必须修改两个全局参数:

    首先,修改validate_password_policy参数的值

    mysql> set global validate_password_policy=0;       Query OK, 0 rows affected (0.00 sec)

        这样,判断密码的标准就基于密码的长度了。这个由validate_password_length参数来决定。

    我们来看一下这个参数的长度:

    mysql> select @@validate_password_length;+----------------------------+| @@validate_password_length |+----------------------------+|                          8 |+----------------------------+1 row in set (0.02 sec)

     

     

    我们可以修改这个参数长度:

    mysql> set global validate_password_length=6;Query OK, 0 rows affected (0.02 sec)

    validate_password_length参数默认为8,它有最小值的限制,最小值为4:

    validate_password_number_count+ validate_password_special_char_count+ (2 * validate_password_mixed_case_count)

    其中,validate_password_number_count指定了密码中数据的长度,validate_password_special_char_count指定了密码中特殊字符的长度,validate_password_mixed_case_count指定了密码中大小字母的长度。

    这些参数,默认值均为1,所以validate_password_length最小值为4,如果你显性指定validate_password_length的值小于4,尽管不会报错,但validate_password_length的值将设为4。如下所示:

           如果修改了validate_password_number_count,validate_password_special_char_count,validate_password_mixed_case_count中任何一个值,则validate_password_length将进行动态修改。

    前提是validate_password插件必须已经安装,MySQL5.7是默认安装的。

    那么如何验证validate_password插件是否安装呢?可通过查看以下参数,如果没有安装,则输出将为空。

    mysql> SHOW VARIABLES LIKE 'validate_password%';



  • 相关阅读:
    日月
    硕人
    式微
    芣苡
    樛木
    兔罝
    绿衣
    汉广
    小星
    惠子相梁
  • 原文地址:https://www.cnblogs.com/centos2017/p/7896779.html
Copyright © 2020-2023  润新知