云服务器上的MySQL数据库 , 如果只用一个root用户进行远程连接 , 不但风险较大 , 而且使用起来也不方便 , 这时候新建一个角色来管理MySQL其中一个数据库用起来就放心多了 !
创建MySQL用户及赋予用户权限
通过的help查看grant帮助文档 :
在命令行输入help grant
得到如下帮助信息
*** 省略部分 ***
For example:
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON db1.* TO 'jeffrey'@'localhost';
GRANT SELECT ON db2.invoice TO 'jeffrey'@'localhost';
ALTER USER 'jeffrey'@'localhost' WITH MAX_QUERIES_PER_HOUR 90;
*** 省略部分 ***
通过查看grant的命令帮助,可以很容易的找到创建用户并授权的例子 !
比较常用的创建用户的方法是,使用grant命令在创建用户的同时进行权限授权。具体授权例子为:
GRANT ALL ON db1.* TO 'jeffrey'@'localhost' IDENTIFIED BY 'password';
参数说明 :
grant | all privileges | on dbname.* | to username@localhost | identified by ‘password’ |
---|---|---|---|---|
授权命令 | 对应权限 | 目标 : 库和表 | 用户名和客户端主机 | 用户密码 |
操作案例
创建 oldboy
用户 , 对test库具备所有权限,允许从localhost主机登录管理数据库,密码是oldboy123
实现的命令具体为
grant all privileges on test.* to oldboy@'localhost' identified by 'oldboy123';
这个出现了一个问题 , 我在本地MySQL上执行会失败 ; 但是在服务器上执行成功了
检查是否新建成功
执行下面命令
#查看是否创建成功
select user,host from mysql.user;
#查看权限
show grants for oldboy@localhost;
可以看到 oldboy
用户已经创建成功
成功后执行一下刷新命令
flush privileges;
远程登录问题
新建用户后 , 在服务器命令行能够使用新建的用户登录 , 但是在远程连接的时候 ,登录失败
这是因为grant授权的时候 user@'localhost'
意为授权访问数据库本地主机localhost, 可以用域名 , IP地址或者IP段来替代 . 因此要授权主机可以远程连接数据库
- 百分号匹配方法
- 子网掩码配置法
这里使用百分号匹配法 , 可以使用授权命令把localhost修改为%
%
表示任何主机,你也可以替换为具体的远程IP地址。
grant all privileges on mtest.* to oldboy@'%' identified by 'oldboy123';
#不要忘了刷新
flush privileges;
删除用户
先查看现有的用户
在命令行界面执行查看用户和主机命令
# 执行命令
mysql> select user,host from mysql.user;
# 显示结果
+------------------+-----------+
| user | host |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
删除指定的用户
MySQL的help文档这样显示的:
mysql> help drop user
Name: 'DROP USER'
Description:
Syntax:
DROP USER [IF EXISTS] user [, user] ...
The DROP USER statement removes one or more MySQL accounts and their
privileges. It removes privilege rows for the account from all grant
tables.
To use DROP USER, you must have the global CREATE USER privilege, or
the DELETE privilege for the mysql system database. When the read_only
system variable is enabled, DROP USER additionally requires the SUPER
privilege.
An error occurs if you try to drop an account that does not exist. If
the IF EXISTS clause is given, the statement produces a warning for
each named user that does not exist, rather than an error.
Each account name uses the format described in
https://dev.mysql.com/doc/refman/5.7/en/account-names.html. For
example:
DROP USER 'jeffrey'@'localhost';
The host name part of the account name, if omitted, defaults to '%'.
URL: https://dev.mysql.com/doc/refman/5.7/en/drop-user.html
根据文档上的描述 , 删除现有的 oldboy
用户
drop user 'oldboy'@'localhost';
#删除后的返回下面结果
注意 : 如果drop删除不了(一般是特殊字符或者大写),可以用下面方式删除(以root用户 , oldgirl主机为例) :
delete from mysql.user where user='root' and host='oldgirl';
删除成功后最好执行一下刷新命令
flush privileges;
参考链接: