登录远程数据库:
mysql -h192.168.56.101 -uroot -p123
登录本地mysql,可以省去host的输入
mysql -uroot -p123
创建账号
#指定账号在某个host才可以登录
#CREATE USER 'username'@'host' IDENTIFIED BY 'password';
create user 'username'@'%' identified by 'password';
flush privileges;
username
:用户名;host
:指定在哪个主机上可以登录,本机可用localhost;%
: 通配所有远程主机;password
:用户登录密码;
账号授权database_name数据库所有权限
#授权
#GRANT ALL PRIVILEGES ON *.* TO ‘username’@‘%’ IDENTIFIED BY 'password’;
grant all privileges on `database_name`.* to 'username'@'%' identified by 'password';
flush privileges;
格式
:grant 权限 on 数据库名.表名 to 用户@登录主机 identified by "用户密码";*.*代表所有权;
@ 后面是访问MySQL的客户端IP地址(或是 主机名) % 代表任意的客户端,如果填写 localhost 为本地访问(那此用户就不能远程访问该mysql数据库了)。
只读权限
grant select on database1.* to 'username'@'%' identified by 'password';
grant select on database2.* to 'username'@'%' identified by 'password';
flush privileges;
关于其他权限的说明:
- select 查询权限,all privileges 所有权限或指定select,delete,update,create,drop权限
- database1 数据库
- username 用户账号
- password 密码
- % 所有电脑可访问
修改密码
方法一:
使用root登录mysql
mysql -uroot -p
update mysql.user set authentication_string=password('newPassword') where user='userName';
最后刷新权限:
flush privileges;
方法二:
可以用navicat连接上数据库
@
后面的localhost
是指当初创建账号的时候有没有指定host才能登录mysql.
如果没有指定host的话就写%
指定了host
alter user 'userName'@'localhost' identified by 'newPassword';
没有指定host
alter user 'userName'@'%' identified by 'newPassword';
最后刷新权限:
flush privileges;
mysql查看当前用户权限
SHOW GRANTS FOR CURRENT_USER();
SHOW GRANTS FOR 'root';
mysql配置白名单访问
切换至mysql库
use mysql;
查看有白名单权限的用户
select Host,User from user;
指定ip有权限访问mysql
GRANT ALL ON *.* to root@'192.168.1.4' IDENTIFIED BY 'your-root-password';
如果没有密码则不用填,@后面的是指定白名单的ip
GRANT ALL ON *.* to root@'192.168.110.20' ;
如果想让改用户在任意ip下都能连接的话就填%
GRANT ALL ON *.* to your_user_name@'%' ;
最后记得刷新权限
flush privileges;