用户管理
定义用户
#格式
用户名@'白名单'
#示例
wordpress@'10.0.0.%' #允许来自10.0.0.0网段的wordpress数据库用户登录
wordpress@'%' #允许来自所有网段
wordpress@'10.0.0.200' #仅允许10.0.0.200地址登录
wordpress@'localhost' #仅允许本地登录
wordpress@'db02' #仅允许主机名db02登录
wordpress@'10.0.0.5%' #仅允许10.0.0.50-59登录
wordpress@'10.0.0.0/255.255.254.0'
案例
增删改查
#增加一个用户
mysql> create user tz@'10.154.0.%' identified by '123';
#查询一个用户
mysql> desc mysql.user; #得到authentication_string字段,此字段记录密码。
mysql> select user ,host ,authentication_string from mysql.user
#更改用户密码
mysql> alter user tz@'10.154.0.%' identified by '456';
#删除一个用户
mysql> drop user tz@'10.154.0.%';
权限操作
授权用户需要注意
是否有邮件批复
对哪个数据库以及表进行操作
执行什么操作
从哪个IP登录
密码强度要求
如果开发人员索要root密码,提示他需要走流程。
常用权限
ALL:
SELECT,INSERT, 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
ALL : 以上所有权限,是普通管理员拥有的
with grant option:超级管理员才具备的,拥有给别的用户授权的功能
权限范围
*.* #管理员用户,能操作所有数据库跟表
wordpress.* #开发和应用用户,只能操作wordpress数据库下的所有表
wordpress.t1 #开发和应用用户,只能操作wordpress数据库下的t1表
授权命令
#创建管理员用户
mysql> grant all on *.* to root@'10.154.0.%' identified by '123';
#创建应用用户,用户名为app,只能对app数据库进行增删改查
mysql> grant select ,update,insert,delete on app.* to app@'10.154.0.%' identified by '123';
#查看权限
mysql> show grants for app@'10.154.0.%';
#回收删除授权
mysql> revoke delete on app.* from app@'10.154.0.%';
#添加with grant option能让tz666用户将自己拥有的权限授权给别人
mysql> grant all privileges on testdb.* to tz666@'localhost' identified by '123' with grant option;
8.0以后版本的差别
#8.0以后的版本先创建用户,再给用户授权
mysql> create user tz@'10.154.0.%' identified by '123';
mysql> grant all privileges on *.* to 'tz'@'10.154.0.%' identified by '123';
#8.0以前的版本可以边创建用户边授权
mysql> grant all on mysql.* to tz@'%' identified by '123';
mysql常用参数
-u 用户
-p 密码
-h IP
-P 端口
-S socket文件
-e 免交互执行命令
< 导入SQL脚本
mysql> select @@socket;
+-----------------+
| @@socket |
+-----------------+
| /tmp/mysql.sock |
$ mysql -uroot -p -S /tmp/mysql.sock
$ mysql -uroot -p -e "select user,host from mysql.user;"
Enter password:
+---------------+-----------+
| user | host |
+---------------+-----------+
| abc | 10.0.0.% |
| app | 10.0.0.% |
| root | 10.0.0.% |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+
$ mysql -uroot -p
三种启动方式
mysqld启动:/usr/local/mysql/bin/mysqld 即可启动mysql。
mysqld_safe 启动(推介):这是启动脚本,在mysqld上再封装了一个监控程序,当mysqld挂了的时候,可以帮忙重启,并把运行信息记录到error log中。
#启动
mysql> mysqld_safe --defaults-file=my.cnf > mysqld.log 2>&1 &
#关闭
mysql> mysqladmin -uroot -p shutdown
mysql.server:这也是启动脚本,调用mysqld_safe启动,启动mysql.server start
配置文件
查看/etc/my.cnf配置文件
$ cat /etc/my.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql-5.7.26
datadir=/usr/local/mysql-5.7.26/data
socket=/tmp/mysql.sock
#服务器id号,用于主从复制,需要设置大于0的数字
server_id=6
port=3306
[mysql]
socket=/tmp/mysql.sock
配置文件读取顺序
$ mysqld --help --verbose |grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
注:
默认情况下,MySQL启动时,会依次读取以上配置文件,如果有重复选项,会以最后一个文件设置的为准。
但是,如果启动时加入了--defaults-file=/etc/my.cnf时,就只会读取my.cnf配置文件.
修改密码
1、使用mysqladmin
$ mysqladmin -uroot -p password 123 #修改后的密码
Enter password: #输入原密码
2、使用alter命令
mysql> alter user tz@'10.154.0.%' identified by '456';
忘记密码
1、关闭mysql服务
$ ps -ef | grep -i mysql
$ systemctl stop mysqld
2、编辑修改配置文件
#在[mysqld]标签下添加skip-grant-tables
$ vim /etc/my.conf
[mysqld]
...省略
skip-grant-tables
3、修改密码
在mysql5.7版本中存放密码字段为authentication_string
$ systemctl start mysqld
$ mysql -uroot
mysql> use mysql;
mysql> update mysql.user set authentication_string=password('修改后的密码') where user='root';
#刷新授权表
mysql> flush privileges;
4、删除步骤2配置文件中的skip-grant-tables
5、重启数据库
$ systemctl restart mysqld
学习来自:郭老师博客,老男孩深标DBA课程 第二章