一、用户管理
创建用户,修改用户,删除用户,只是root用户的权限
1.1 用户客户端的登录与退出
语法:mysql -h hostname -p port -u username -p dbname -e
-h hostname:指定要连接MySQL的主机名或者ip hostname就是具体的主机名或者ip的值
-P port :指定要连接MySQL的端口 默认的端3306
-u username:连接数据库的用户名
-p :提示连接时候要输入的密码
dbname:指定登录要连接的数据库名,该参数可以不指定,登录以后使用use 来选择
-e:指定要执行的Sql语句 例如select语句
例如:使用dos窗口使用root命令登录test4数据库
mysql -h 127.0.0.1 -u root -p test4
例如:登录时候直接指定密码
mysql -h127.0.0.1 -uroot -proot test4
例如:在dos窗口,使用root登录 test4库,执行 select * from dept;
mysql -h127.0.0.1 -uroot -proot test4 -e "select * from dept"
2.Mysql的退出
使用quit 或者exit可以退出
1.2 创建用户
用户账号组成:
'USERNAME'@'HOST'
@'HOST': 主机名:
user1@'%',表示用户可以从哪个网段上远程登录过来
通配符: % 或 _
示例:wang@172.16.%.%
user2@'192.168.1.%'
tom@'10.0.0.0/255.255.0.0'
语法:create user '用户名'@'ip地址' identified by '密码' [,'用户名'@'ip地址' identified by '密码'].....
例如:创建test01用户,密码也是test01,只能在本地登录
create user 'test01'@'localhost' identified by 'test01'
mysql> flush privileges; # 刷新权限
Query OK, 0 rows affected (0.00 sec)
# 查看用户
mysql> select user,host from mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| tom | % |
| root | 127.0.0.1 |
| root | ::1 |
| | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
| test01 | localhost |
+---------------+-----------+
查看用户在 mysql.users表中
select * from mysql.user;
使用test01用户登录mysql
1.3 修改用户
RENAME USER old_user_name TO new_user_name
1.4 删除用户
a.drop user '用户名'@'ip地址'
;
例如删除test01用户
drop user 'test01'@'localhost'
b.删除mysql.user表中的数据 使用delete
语法 delete from mysql.user where user='' and host=''
例如:删除test3 用户
delete from mysql.user where user='test3' and host='localhost'
1.4 修改密码
注意:
新版mysql中用户密码可以保存在mysql.user表的authentication_string字段中
如果mysql.user表的authentication_string和password字段都保存密码,authentication_string优先生效
-
root用户修改自己的密码
(1) 使用mysqladmin 命令修改
语法mysqladmin -u username -p password "新密码"
例如:将root用户的密码修改为123[root@zabbix-db ~]# mysqladmin -uroot -p password '123' Enter password:
(2) 使用set修改自己的密码
首先root用户登录,使用set修改自己的密码
语法:set password="新密码"
例如:将root用户的密码修改为"root"set password="root";
-
root用户修改普通用户的密码
(1) 使用set修改普通用户的密码
语法:set password for 'username'@'hostname'='新密码'
1.创建用户 create user 'test02'@'localhost' identified by 'test02' 2.查询用户 select * from mysql.user; 3.修改用户密码 set password for 'test02'@'localhost'='123' 4.使用新密码登录 mysql -h127.0.0.1 -utest02 -p123
(2)alter user 修改密码
语法:alter user 'username'@'hostname' identified by '新密码'
例如:将test02用户的密码修改为’test02’alter user 'test02'@'localhost' identified by 'test02' 使用新密码登录 mysql -h127.0.0.1 -utest02 -ptest02
-
普通用户可以修改自己的密码
语法:set password='新密码'
例如:创建一个用户test03 密码也是test03create user 'test03'@'localhost' identified by 'test03' 使用test03登录 mysql -h127.0.0.1 -utest03 -ptest03 修改自己的密码为123 set password='123' 使用新密码登录 mysql -h127.0.0.1 -utest03 -p123
二、权限管理
权限类别
权限类别:
管理类
程序类
数据库级别
表级别
字段级别
管理类:
CREATE USER
FILE
SUPER
SHOW DATABASES
RELOAD
SHUTDOWN
REPLICATION SLAVE
REPLICATION CLIENT
LOCK TABLES
PROCESS
CREATE TEMPORARY TABLES
程序类:针对 FUNCTION、PROCEDURE、TRIGGER
CREATE
ALTER
DROP
EXCUTE
库和表级别:针对 DATABASE、TABLE
ALTER
CREATE
CREATE VIEW
DROP INDEX
SHOW VIEW
WITH GRANT OPTION:能将自己获得的权限转赠给其他用户
数据操作
SELECT
INSERT
DELETE
UPDATE
字段级别
SELECT(col1,col2,...)
UPDATE(col1,col2,...)
INSERT(col1,col2,...)
所有权限
ALL PRIVILEGES 或 ALL
2.1 查看权限
语法:show grants for 'username'@'hostname'
例如:查看root用户的权限
show grants for 'root'@'localhost'
2.授予权限
语法:
grant 权限类型1,权限类型1.... on 数据库名.表
to 'username'@'hostname' [,'username'@'hostname']
[with grant option] #表示可以把自己的权限传递给其他人
注:所有库中所有表 *.*
复杂版:
GRANT priv_type [(column_list)],... ON [object_type] priv_level TO 'user'@'host'
[IDENTIFIED BY 'password'] [WITH GRANT OPTION];
priv_type: ALL [PRIVILEGES]
object_type:TABLE | FUNCTION | PROCEDURE
priv_level: *(所有库) |*.* | db_name.* | db_name.tbl_name | tbl_name(当前库的
表) | db_name.routine_name(指定库的函数,存储过程,触发器)
with_option: GRANT OPTION
| MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
授权X用户在X网段对mydb库,mydbl表第一列有查权限,对第一列第二列有插入权限
GRANT SELECT (col1), INSERT (col1,col2) ON mydb.mytbl TO 'someuser'@'somehost';
# 授权wordpress用户从10.0.0.*网段登录,对wordpress库所有表,有所有权限
GRANT ALL ON wordpress.* TO wordpress@'10.0.0.%' ;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.0.0.%' WITH GRANT OPTION;
#创建用户和授权同时执行的方式在MySQL8.0取消了
GRANT ALL ON wordpress.* TO wordpress@'192.168.8.%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.8.%' IDENTIFIED BY '123456'
WITH GRANT OPTION;
例如:新创建test04 用户 密码test04
create user 'test04'@'localhost' identified by 'test04'
授予 所有库下所有表的查询 删除权限
grant select ,delete on *.* to 'test04'@'localhost' with grant option
查看test04的权限
show grants for 'test04'@'localhost'
Help SHOW GRANTS
SHOW GRANTS FOR 'user'@'host';
SHOW GRANTS FOR CURRENT_USER[()]; # 查看当前用户的权限
3.收回权限
revoke 权限类型1,权限类型2.... on 库名.表名
from 'username'@hostname'' [,'username'@hostname'']...
例如:收回test04的delete权限
revoke delete on *.* from 'test04'@'localhost'
三、管理员密码破解
忘记管理员密码的解决办法:
- 启动mysqld进程时,为其使用如下选项:
--skip-grant-tables
--skip-networking
- 使用UPDATE命令修改管理员密码
- 关闭mysqld进程,移除上述两个选项,重启mysqld
范例:Mariadb 和MySQL5.6版之前破解root密码
[root@centos8 ~]#vim /etc/my.cnf
[mysqld]
skip-grant-tables
skip-networking
[root@centos8 ~]#systemctl restart mysqld|mariadb
[root@centos8 ~]#mysql
#方法1
#mariadb 旧版和MySQL5.6版之前
MariaDB [(none)]> update mysql.user set password=password('ubuntu') where
user='root';
#mariadb 新版
MariaDB [(none)]> update mysql.user set authentication_string=password('ubuntu')
where user='root';
#方法2
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> alter user root@'localhost' identified by 'ubuntu';
MySQL5.7和8.0 破解root密码
[root@centos8 ~]#vim /etc/my.cnf
[mysqld]
skip-grant-tables
skip-networking #MySQL8.0不需要
[root@centos8 ~]#systemctl restart mysqld
#方法1
mysql> update mysql.user set authentication_string='' where user='root' and
host='localhost';
#方法2
mysql> flush privileges;
#再执行下面任意一个命令
mysql> alter user root@'localhost' identified by 'ubuntu';
mysql> set password for root@'localhost'='ubuntu';
[root@centos8 ~]#vim /etc/my.cnf
# 再次启动前,将其注释掉
[mysqld]
#skip-grant-tables
#skip-networking
[root@centos8 ~]#systemctl restart mysqld
[root@centos8 ~]#mysql -uroot -pubuntu
删库跑路
#此方法适用于包安装方式的MySQL或Mariadb
[root@centos8 ~]#systemctl stop mysqld
[root@centos8 ~]#rm -rf /var/lib/mysql/*
[root@centos8 ~]#systemctl start mysqld