1.登录MySQL数据库
(1):当数据库密码为空时,可以使用mysql -h localhost -u root 进行登录
mysql指明要连接数据库,-h指明要连接的主机,localhost指明从本地登录,-u指明登录用户,root指明以root身份登录。
mysql默认是从本机登录,因此可以使用mysql -u root 进行登录
(2):当数据库密码不为空时,可以使用mysql -h localhost -u root -p进行登录
可以看出,若不使用-p则会报错。
同样也可以使用mysql -u root -p 继续登录
2.修改数据库密码
注意:在MySQL中修改数据库密码时,如果在修改密码时使用password,则密码将以密文形式存储,若不使用password,密码将以明文形式存储。
例如:update user set password=password('密码') where user='root' and host='localhost' ; 此时密码将以密文形式存储
update user set password=('密码') where user='root' and host='localhost' ; 此时密码将以明文形式存储
(1):使用shell命令修改数据库root用户密码(在shell命令行中操作,而不是在mysql中操作)
mysqladmin -u root -p password '密码';
(2):使用mysql数据库命令修改root用户密码(先使用之前的密码进行登录,然后再在MySQL数据库中修改root密码)
update user set password=password('密码') where user='root' and host='localhost';
root和localhost一定要用引号引起来,因为是字符串,否则会报错。
3.在管理员root遗忘数据库密码的情况下修改数据库密码
(1):跳过数据库授权表
killall -TERM mysqld 杀死MySQL数据库进程
mysqld_safe --skip-grant-tables & 在后台跳过数据库授权表,相当于不需要使用密码就能够登录
mysql -u root 进行登录
可以看见并没有要输入之前的密码
进入数据库后可以用之前的方法修改数据库密码
use mysql; 切换到mysql数据库下
update user set password=password('密码') where user='root' and host='localhost' ; 修改数据库密码
FLUSH PRIVILEGES; 刷新数据库
(2):修改配置文件
- MySQL默认配置文件是/etc/my.cnf。内容如下:
- 修改/etc/my.cnf文件
- 配置文件内容如下:(在[mysqld]中添加一句 skip-grant-tables)
- 重启MySQL服务:service mysqld restart
- 然后可以不要输入密码就登录到数据库,也可以像上面一样修改数据库密码
完成验证后为了安全起见,将数据库的配置文件改成初始的文件。
4.添加数据库用户(添加用户时需要具有root权限)
(1):向mysql数据库中插入用户信息
use mysql; 先切换到mysql这个数据库下
insert into user (host,user,password,select_priv,insert_priv,update_priv) values ('localhost','zhangsan','password('密码'),'Y','Y','Y'); 向数据库中添加数据
查看是否添加了zhangsan用户
select user,password,host from mysql.user;
使用zhangsan用户进行登录(先重启服务然后再用zhangsan账号登录数据库)
(2):使用create创建用户
use mysql; 先切换到mysql这个数据库下
create user 'lisi'@'localhost' identified by '密码';
查看是否添加了zhangsan用户
select user,password,host from mysql.user;
使用lisi用户进行登录(先重启服务然后再用lisi账号登录数据库)
5.登录数据库的账号信息
MySQL数据库与生俱来的就有一个mysql数据库,MySQL数据库的所有登录信息都存放在mysql下的user表中。
由上图可以看出来,一个有三个root账号
第一个root账号的host是localhost,这个root是用来本地登录的;
第二个root账号的host是localhost.localdomain,这个root是用来通过网络远程登录的;
第三个root账号的host是127.0.0.1,这个root是用来进行本地环回测试的;
为了安全起见,最好将数据库中的多余的账号(比如空账号删除)
delete from mysql.user where user='';
注意:删除用户时一定要有where语句,如果没有where语句将删除所有的用户账号信息
6.用户授权
- 新用户授权
mysql> GRANT 权限列表 ON 数据库或数据库中的表 TO '用户名'@'登录IP或域名' IDENTIFIED BY '密码';
- 老用户授权
mysql> GRANT 权限列表 ON 数据库或数据库中的表 TO '用户名'@'登录IP或域名'
- 权限列表
all——所有权限
select(查询权),insert(插入权),update(更新权),drop(删除数据库或者数据库中的表权),delete(删除数据权),create(创建数据库或数据库中的表权)等
- 数据库或者数据库中的表
*.*——所有数据库以及所有数据库中的表
数据库名字.*——该数据库下的所有表
*.表名——所有数据库中的表的名字与该表名相同的表
- 登录IP或域名
%——表示没有限制,在任何主机都可以登录
例如:192.168.120.%——表示在192.168.120.0网段可以登录
(1):新用户授权
select user,password,host from mysql.user; 可以看见,并没有wangwu用户。现在新建一个wangwu用户并且给他赋予权限
grant select,insert,update on fruitsdb.* to 'wangwu'@'localhost' identified by '123456'; 对wangwu用户授予查看、插入、更新fruitsdb数据库中的所有表的权力
show grants for 'wangwu'@'localhost'; 查看wangwu用户对fruitsdb数据库的权限
可以看见,wangwu用户已经有了查询、插入、更新fruitsdb数据库的权力。
(2):老用户授权
先登录数据库,然后进入fruitsdb数据库。
show grants for 'lisi'@'localhost'; 查看lisi用户对fruitsdb数据库的权限
grant select,insert,update on fruitsdb.* to 'lisi'@'localhost' identified by '123456'; 对lisi用户授予查看、插入、更新fruitsdb数据库中的所有表的权力
grant select,insert,update on fruitsdb.* to 'lisi'@'localhost' ; 对lisi用户授予查看、插入、更新fruitsdb数据库中的所有表的权力(这两种方法都可以)
show grants for 'lisi'@'localhost'; 再次查看lisi用户对fruitsdb数据库的权限
可以看见,lisi用户已经有了查询、插入、更新fruitsdb数据库的权力。
7.网络连接权限
grant all on *.* to 'wangwu'@'%'; 授予wangwu用户对所有数据库的所有表具有所有权。%表示wangwu用户可以从任何主机进行登录。
show grants for 'wangwu'@'%'; 查看wangwu用户的权限
从另一台Linux的Mysql客户端登录验证(这台客户机当然也要按照MySQL服务器)
mysql -h 192.168.100.2 -P 3306 -u wangwu -p123456
-h指明主机;-P指明端口;-u指定用户;-p指明密码(-p和密码之间不能使用空格)。
发现可以从远程登录到MySQL服务器。(严格按照上面的登录格式)
8.撤销权限
revoke all on *.* from 'wangwu'@'%'; 撤销wangwu用户的权限
show grants for 'wangwu'@'%'; 查看wangwu用户的权限
可以看见,wangwu用户没有了远程登录的权限。
FLUSH PRIVILEGES; 刷新服务,使设置生效
从刚才那一台Linux的Mysql客户端登录验证
mysql -h 192.168.100.2 -P 3306 -u wangwu -p123456
仍然可以登录。但是却没有了增删改查的权限。可以发现,现在登录上去看不见之间的fruitsdb数据库。说明权限已经被撤销。
如果不想让zhangsan用户进行登录,可以修改mysql.user中zhangsan账号的信息。使其host变为localhost。