通过修改user表授权
MySQL 权限控制信息存储在表mysql.user中.
mysql.user 表字段如下:
host:用户通过哪台主机访问;
user: 用户名称
password: 加密密码
*_priv等字段就是对应的权限.
如下记录:
(host, user, select_priv) = (192.168.1.1, zhangsan, Y) 即在客户机192.168.1.1上通过zhangsan账号访问数据库, 具有查询权限.
(host, user, select_priv) = (192.168.1.2, zhangsan, N) 即在客户机192.168.1.2上通过zhangsan账号访问数据库, 没有有查询权限.
host 的值可以是127.0.0.1, localhost 代表本机的IP, 即在mysql服务器上登录mysql. %代表除本机外的其他客户机的IP.
(host, user, select_priv) = (%, zhangsan, Y) 即在任何客户机上通过zhangsan账号登录具有查询权限.
向user表中插入数据时, password需要用PASSWORD函数加密, 如:
INSERT INTO user (Host,User,Password) VALUES ('%','root', PASSWORD('123456'));
插入完成后执行FLUSH PRIVILEGES 刷新权限.
使用grant 命令授权
语法格式为 grant 权限 on 数据库对象名.表明 to 用户;
如grant select on testdb.* to zhangsan@'%' 张三通过任何客户机登录数据库可以对testdb下的任何表执行select操作.
grant all on *.* to zhangsan@localhost; zhangsan在本机登录可以管理 MySQL 中的所有数据库
解决远程客户端无权限登录mysql服务器的问题
刚安装完成mysql后, 通过客户端连接mysql可能会出现这样的问题:
Access denied for user 'root'@'localhost'
这就是没有授权给客户机登录, 解决办法可以参考上面的授权.
grant all on *.* to zhangsan@localhost;
或INSERT INTO user (Host,User,Password) VALUES ('%','root', PASSWORD('123456'));
使用insert into user比较繁琐, 每个权限字段都要赋值, 建议使用grant命令.
如果root也没有权限远程连接而又不能直接操作服务器, 可以进入mysql的安全模式进行授权,
开启mysql安全模式步骤如下:
1. 停止mysql服务 service mysqld stop
2. 执行mysqld_safe --user=mysql --skip-grant-tables --skip-networking
3. 执行mysql命令, 看是不是进入mysql啦!
进入后按上面说的配置权限就ok啦, 配置完成后退出mysql ,然后重启mysql服务 service mysqld restart.