Mysql初始化及密码管理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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帐户后,可以将下⾯的内容添加到f⽂件中:
[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/f,打开该⽂件,可以看到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/f,打开该⽂件,可以看到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(
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 er 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窗⼝,转到mysql\bin⽬录。
3. 输⼊mysqld --skip-grant-tables 回车。
--skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。
4. 再开⼀个DOS窗⼝(因为刚才那个DOS窗⼝已经不能动了),转到mysql\bin⽬录。
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/f
[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/f 中 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%';。