linux下mysql用户授权相关问题
1.关闭mysql
service mysqld stop
2.重启数据库
sudo service mysql restart
3.允许root用户远程访问所有的数据库
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'
4.刷新数据库
flush privileges
5.MySQL允许远程访问的设置
1.注释bind-address = 127.0.0.1
>cd /etc/mysql
>sudo vim my.cnf
将bind-address = 127.0.0.1注释掉(即在行首加#),如下:
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
# bind-address = 127.0.0.1
除了注视掉这句话之外,还可以把后面的IP地址修改成允许连接的IP地址。但是,如果只是开发用的数据库,为了方便起见,还是推荐直接注释掉。
6.更改用户密码两种方式
use mysql
update user set password=password('123456') where user='root';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密码';
7.mysql设置了密码之后,本地还可以直接访问,不需要输入密码就可以登录数据库了?
原因:数据库里面有空用户,通过 select * from mysql.user where user='';
查询如果有,然后通过
use mysql;
delete from user where user = '';
删除了多余的空白账户, 然后刷新数据库
flush privileges;
重载一次权限表,最后用
service mysqld restart
重启mysql服务,问题得到解决,至此mark一下!
Tip:
1、一定要记住重启mysql服务,否则不会生效,自己就是因为没有重启msyql导致一直得不到解决!
2、msyql的用户表在mysql数据库中的user表中,主要字段有host,user,password等,作为mysql用的管理的主要表。
8.创建用户
命令:
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器
例子
CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';
CREATE USER 'pig'@'192.168.1.101_' IDENDIFIED BY '123456';
CREATE USER 'pig'@'%' IDENTIFIED BY '123456';
9.用户授权
命令:
GRANT privileges ON databasename.tablename TO 'username'@'host'
- privileges:用户的操作权限,如
SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL - databasename:数据库名
- tablename:表名,如果需要所有权限,则可用
*表示,如*.*
例子:
GRANT SELECT, INSERT ON test.user TO 'chen'@'%'; #chen用户拥有test库下user表的查询、插入权限
GRANT ALL ON *.* TO 'chen'@'%'; #chen拥有所有库的所有权限
GRANT ALL ON dalan.* TO 'chen'@'%'; #chen拥有dalan库下所有表的所有权限
注意:
用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
10.撤销用户权限
REVOKE privilege ON databasename.tablename FROM 'username'@'host';
例子:
REVOKE SELECT ON *.* FROM 'chen'@'%'; #撤销chen用户所有库查询的权限
11.删除用户
DROP USER 'username'@'host';
为什么mysql设置了密码之后,本地还可以直接访问,不需要输入密码就可以登录数据库了?
补充:
查看默认的授权列表:
select Host,User,authentication_string from mysql.user;
可以发现,默认已经将root用户设置了远程访问,也就是%的那条记录。但是密码和localhost的不一样。
因此,需要修改密码,并刷新权限
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;
相关连接:
https://www.cnblogs.com/ccw869476711/p/11856620.html .........................Mysql添加用户并授权
https://www.cnblogs.com/starof/p/4680083.html ...................................centos安装mysql (Mariadb修改root密码及跳过授权)
https://www.cnblogs.com/surplus/p/11073843.html........................................解决 MariaDB无密码就可以登录的问题
浙公网安备 33010602011771号