1 使用root权限登录MySQL服务器
mysql -u root -p;
2 创建用户名,用于项目管理或者普通人员,只能操作特定的数据库
CREATE USER '用户名'@'localhost' IDENTIFIED BY '密码';
CREATE USER '用户名'@'%' IDENTIFIED BY '密码';
这将为远程客户端创建一个MySQL用户,并将其密码设置为给定的密码,有了新的MySQL用户后,可以为其授予数据库权限。
请注意,%:符号表示允许来自任何IP地址的远程连接。
3 设置数据库权限,只能操作特定数据库
GRANT ALL PRIVILEGES ON 数据库名.* TO '用户名'@'%';
4 删除用户
DROP USER '用户名'@'localhost';
DROP USER '用户名'@'%';
5. 修改用户名密码
alter user 用户@localhost identified by '密码';
alter user 用户@% identified by '密码';
5.上述所有修改之后记得使用 flush privileges命令刷新修改记录
flush privileges;
6. 修改密码认证方式
ALTER USER 用户@'%' IDENTIFIED WITH mysql_native_password BY '密码';
这个认证方式是方便用户以用户名密码的方式登录连接数据库
7. 修改数据库的名称
注:如果有特殊字符,要使用反勾号引起来。例
GRANT ALL PRIVILEGES ON `ry-vue-mes`.* TO 'abc'@'localhost';
在MySQL中使用了下划线的数据库名,今天在GRANT的时候,死活无法为用户赋予权限,一直报错。查看了官方的文档,文档中说:如果使用下划线的数据库在使用GRANT的时候,需要对数据库的下划线进行转义。
官方文档的全文如下:
The “_” and “%” wildcards are permitted when specifying
database names in GRANT statements that grant privileges at
the global or database levels. This means, for example, that
if you want to use a “_” character as part of a database name,
you should specify it as “\_” in the GRANT statement, to
prevent the user from being able to access additional
databases matching the wildcard pattern; for example,
GRANT ... ON `foo\_bar`.* TO ....
GRANT语句用于在全局层级或数据库层级赋予权限。当在GRANT语句中指定数据库名称时,允许使用‘_’和‘%’通配符。这意味着,如果您想要使用‘_’字符作为一个数据库名称的一部分,您应该在GRANT语句中指定它为‘\_’,以防止用户可以访问其它符合此通配符格式的数据库;例如,GRANT ... ON `foo\_bar`.* TO ...。
说明非常明确,就是在碰到下划线和百分号的时候,为了防止GRANT的时候权限漂移,需要明确的对这两个通配符进行转义,转义符为\,因此有了如下的语句:
GRANT ALL ON 'db\_test'.* TO 'test_user';
恩,看上去是如此的完美,但,非常遗憾的是,MySQL接受到这个语句直接报错:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near ''db\_test'.* TO 'test_user'' at line 1
经过多次测试,终于发现这个语法应该变成:
GRANT ALL ON `db\_test`.* TO 'test_user';
发现不同了吗?至少我当时没有发现,经过尝试才发现,转义的时候,不仅原有的通配符需要反斜杆[\]进行转义,就连包含转义字串的引号也要变成反勾号!反勾号是啥?就是标准键盘中主键盘数字键1前面的那个键(也就是ESC下面的那个键)。
经过修正后的SQL语句非常顺利的执行了,类似的情况,在GRANT中需要注意的是TO后面的User,平时User字串是可以不用单引号的,但如果User字串中包含了中划线(-)的时候,或者含有通配符(%)的时候,则必须要有引号包含。