AI 摘要(由 ChatGPT 总结生成):
MySQL创建用户和授权是学习MySQL必备知识。创建用户通过`CREATE USER`命令,可指定用户名、主机和密码,允许本地或远程登录。授权使用`GRANT`命令,设置用户权限,包括数据库和表的操作权限。修改密码通过`SET PASSWORD`命令,撤销权限使用`REVOKE`命令。注意在操作后使用`FLUSH PRIVILEGES`刷新权限。删除用户和解决可能问题也是重要一环。配置文件修改和插件设置可解决远程连接问题。

对于学习建站或正在学习MySQL语法知识的小伙伴,这波MySQL知识掌握是必不可少的。

一、创建用户

命令:

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

命令说明:

  • username:你将创建的用户名
  • host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
  • password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器

举例:

CREATE USER 'abc'@'localhost' IDENTIFIED BY '123456';
//创建用户:abc,密码:123456,仅本地用户可用

CREATE USER 'abc'@'192.168.17.135' IDENTIFIED BY '123456';
//创建用户:abc,密码:123456,指定192.168.17.135地址可登录(多个ip可使用英文逗号分隔)

CREATE USER 'abc'@'%' IDENTIFIED BY '123456';
//创建用户:abc,密码:123456,可任意主机远程登录

CREATE USER 'abc'@'%' IDENTIFIED BY '';
//创建用户:abc,无密码,可任意主机远程登录

CREATE USER 'abc'@'%';
//创建用户:abc,无密码,可任意主机远程登录

二、授权

命令

GRANT privileges ON databasename.tablename TO 'username'@'host'

命令说明:

  • privileges:用户的操作权限,如SELECTINSERTUPDATECREATEDROPDELETE等,如果要授予所的权限则使用ALL
  • database name:数据库名
  • table name:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示,如*.*

举例:

GRANT SELECT, INSERT PRIVILEGES ON test.user TO 'abc'@'%';
//可任意主机登录的用户abc对test数据库中的user表授予SELECT和INSERT权限

GRANT ALL PRIVILEGES ON test.* TO 'abc'@'%';
//可任意主机登录的用户abc对test数据库授予所有操作权限

GRANT ALL PRIVILEGES ON *.* TO 'abc'@'%';
//可任意主机登录的用户abc对所有数据库和表授予所有操作权限

注:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,可用以下命令(若无特定需求可无需此命令授予权限):

GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;

若您需要自定义创建数据库,则创建数据库命令:

CREATE DATABASE 数据库名;

三、修改用户密码

命令:

SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');

如果是当前登录用户修改密码:

SET PASSWORD = PASSWORD('newpassword');

举例:

SET PASSWORD FOR 'abc'@'%' = PASSWORD('123456');

四、撤销用户权限

命令:

REVOKE privilege ON databasename.tablename FROM 'username'@'host';

其中privilege, database name, table name同授权部分说明

举例:

REVOKE SELECT ON *.* FROM 'abc'@'%';
//可任意主机登录的用户abc撤销对任意数据库和表的`SELECT`权限

注意:
假如你在给用户'abc'@'%'授权的时候是这样的(或类似的):GRANT SELECT ON test.user TO 'abc'@'%',则在使用REVOKE SELECT ON *.* FROM 'abc'@'%';命令并不能撤销该用户对test数据库中user表的SELECT 操作。相反,如果授权使用的是GRANT SELECT ON *.* TO 'abc'@'%';REVOKE SELECT ON test.user FROM 'abc'@'%';命令也不能撤销该用户对test数据库中user表的Select权限。
查看数据库中具体某个用户的权限:

SHOW GRANTS FOR 'abc'@'%';

查看所有用户命令:

SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;

五、删除用户

命令:

DROP USER 'username'@'host';

六、可能遇到的问题

1、在操作 mysql 库做用户的增删修改的时候,操作完毕的时候最好使用 flush privilege命令刷新一下权限。否则可能会修改不生效

flush privilege;

2、如果在上述添加了用户%可任意主机登录的权限,且已经开放防火墙,在使用Navicat远程连接数据库可能会报10038等错误解决办法。

2.1、若您使用的是MySQL 8.0以上版本,在MySQL 8.0以上版本中,caching_sha2_password是默认的身份验证插件,而不是以往的mysql_native_password。故可修改插件为mysql_native_password
如果是现有用户:

use mysql;
ALTER USER '用户名'@'host' IDENTIFIED WITH mysql_native_password BY 'password';
flush privilege;

如果是新建用户:

use mysql;
CREATE USER '用户名'@'host' IDENTIFIED WITH mysql_native_password BY 'password';
flush privilege;

其中,用户名为你需要远程账户的用户名,host是你要登录的主机,password为你的用户密码。
又或者使用默认加密方式,在配置文件中添加以下内容:

default_authentication_plugin=mysql_native_password

2.2、上述操作若仍无法登陆,可能是MySQL Server绑定了本地地址127.0.0.1,打开MySQL配置文件(可能不同方式的安装配置文件的位置也不同),此处博主的数据库配置文件为/etc/mysql/mysql.conf.d/mysql.cnf
将其中的

bind-address = 127.0.0.1
修改为
bind-address = 0.0.0.0

重启数据库,即可使用Navicat连接数据库,相比于该操作,较为推荐使用PhpmyAdmin管理工具。

End

本文标题:MySQL创建用户、授权等相关操作

本文链接:https://www.isisy.com/917.html

除非另有说明,本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

声明:转载请注明文章来源。

如果觉得我的文章对你有用,请随意赞赏