Day56
用户授权
用户授权
grant授权
授权:添加用户并设置权限。
命令格式
grant 权限列表 on 库名 to 用户名@“客户端地址”
identified by “密码” //授权用户密码
wIth grant option; //有授权权限,可选项
权限列表
all //所有权限
usage //无权限
seelct,update,insert //个别权限
select,update(字段1,……,字段N) //指定字段
库名
*.* //所有库所有表
库名.* //一个库
库名.表名 //一张表
用户名
授权时自定义 要有标识性
存储在mysql库的user表里
客户端地址
% //所有主机
192.168.4.% //网段内所有的主机
192.168.4.1 //1台主机
localhost //数据库服务器本机
相关命令
登录用户使用
命令 | 作用 |
---|---|
select user(); | 显示用户名及客户端地址 |
show grants; | 用户显示自身访问权限 |
show grants for 用户名@“客户端地址”; | 管理员查看已有授权用户权限 |
set password= password(“密码”); | 授权用户连接后修改连接密码 |
set password for 用户@“客户端地址”=password(“密码”); | 管理员重置授权用户连接密码 |
drop user 用户名@“客户端地址”; | 删除授权用户(必须有管理员权限) |
授权库
mysql库记录授权信息,主要表如下:
user表 记录已有授权用户及权限
db表 记录已有授权用户对数据库的访问权限
tables_priv表 记录已有授权用户对表的访问权限
columns_priv表 记录已有授权用户对字段的访问权限
查看表记录可以获取用户权限:也可以通过更新记录,修改用户权限、
撤销权限
命令格式:
revoke 权限列表 on 库名.表 from 用户名@“客户端地址”;
root密码
root密码忘记怎么办
1.停止MySQL服务程序
[root@dbsvr1 ~]# systemctl stop mysqld.service //停止服务
[root@dbsvr1 ~]# systemctl status mysqld.service //确认状态
mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled)
Active: inactive (dead) since 五 2017-04-07 23:01:38 CST; 21s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 20260 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
Process: 20238 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 20262 (code=exited, status=0/SUCCESS)
2.跳过授权表启动MySQL服务程序
这一步主要利用mysqld的 --skip-grant-tables选项
修改my.cnf配置,添加 skip_grant_tables=1启动设置:
[root@dbsvr1 ~]# vim /etc/my.cnf
[mysqld]
skip_grant_tables
.. ..
[root@dbsvr1 ~]# systemctl start mysqld.service
[root@dbsvr1 ~]# service mysql status
mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled)
Active: active (running) since 五 2017-04-07 23:40:20 CST; 40s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 11698 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
Process: 11676 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 11701 (mysqld)
CGroup: /system.slice/mysqld.service
└─11701 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.p...
3.修改root密码
由于前一步启动的MySQL服务跳过了授权表,所以可以root从本机直接登录
[root@dbsvr1 ~]# mysql //直接回车即可
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.17 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
进入 mysql> 环境后,通过修改mysql库中user表的相关记录,重设root用户从本机登录的密码:
mysql> UPDATE mysql.user SET authentication_string=PASSWORD('123qqq…A')
-> WHERE user='root' AND host='localhost'; //重设root的密码
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
mysql> FLUSH PRIVILEGES; //刷新授权表
Query OK, 0 rows affected (0.01 sec)
mysql> exit //退出mysql> 环境
Bye
通过执行“FLUSH PRIVILEGES;”可使授权表立即生效,对于正常运行的MySQL服务,也可以用上述方法来修改密码,不用重启服务。本例中因为是恢复密码,最好重启MySQL服务程序,所以上述“FLUSH PRIVILEGES;”操作可跳过。
4.已正常方式重启MySQL服务程序
如果前面是修改/etc/my.cnf配置的方法来跳过授权表,则重