MySQL为单独用户添加访问单个数据库权限

Linux Mysql 发表时间:2018-03-30 18:23:42 作者:梁子亮 浏览次数:965

服务器输入密码登录并进入mysql

mysql -u root -p

添加新用户tim,设置密码为123456

create user 'tim'@'%' identified by '123456';

刷新权限

flush privileges;

为tim指定只能访问这台服务器的的one_site数据库

grant all privileges on `one_site`.* to 'tim'@'%' identified by '123456';

刷新权限

flush privileges;

如有必要重启一下mysql

service mysqld restart

期间,可以查看一下此用户拥有哪些数据库的权限

SHOW GRANTS FOR tim@'%';

若需要删除此用户的某个数据库权限,例如删除tim用户的ar_test的数据库权限

 REVOKE ALL ON ar_test.* FROM 'tim'@'%';

若需要删除此用户的所有数据库权限,则 - 未测试,暂未知可行性

DROP USER 'tim’@'%';

如果想为单独的用户配置单独的ip才可以远程连接数据库,则添加以下(非必须)

GRANT ALL PRIVILEGES ON one_site.* TO 'tim'@'14.123.237.125' IDENTIFIED BY '123456' WITH GRANT OPTION;

完成后即可在指定ip用Navicat连接数据库

1、注意:以上语句在MySQL 5.7中可能报错:ERROR 1146 (42S02): Table 'mysql.servers' doesn't exist,则执行以下

drop table if exists mysql.servers;

2、drop完table后新建回来servers

CREATE TABLE `servers` (
        `Server_name` char(64) NOT NULL,
        `Host` char(64) NOT NULL,`Db` char(64) NOT NULL,
        `Username` char(64) NOT NULL,
        `Password` char(64) NOT NULL,
        `Port` int(4) DEFAULT NULL,
        `Socket` char(64) DEFAULT NULL,
        `Wrapper` char(64) NOT NULL,
        `Owner` char(64) NOT NULL,
        PRIMARY KEY (`Server_name`)
        ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='MySQL Foreign Servers table';

3、若报什么GRANT ALL PRIVILEGES 的 @后面不能跟%,则把%改为localhost试试

grant all privileges on `one_site`.* to 'tim'@'localhost' identified by '123456';

4、若GRANT ALL PRIVILEGES ON one_site.* TO 'tim'@'localhost' IDENTIFIED BY '123456';报什么错时,可能是由于之前create了用户时IDENTIFIED BY了一个密码而这里又IDENTIFIED BY一次,所以会提示你用什么alter user语法,此时直接把IDENTIFIED BY后面的去除即可

GRANT ALL PRIVILEGES ON one_site.* TO 'tim'@'localhost';

5、若已经create的user密码需要修改,则(注意用户名tim没有引号)

alter user tim identified by 'Zmkm2020';

6、修改完用户密码记得flush一下

flush privileges;