如何在MySQL中创建新用户以及给用户授权

您所在的位置:网站首页 MySql安装成功后,在系统中会默认建立一个_____用户 如何在MySQL中创建新用户以及给用户授权

如何在MySQL中创建新用户以及给用户授权

2024-07-15 07:03| 来源: 网络整理| 查看: 265

如何在MySQL中创建新用户以及给用户授权​

作者 Etel Sverdlov

导语​

MySQL是一个开源的关系数据管理系统,被广泛应用于LAMP(即Linux, Apache, MySQL和PHP)堆栈中。截至本文撰写的时刻,它是世界上最受流行的开源数据库。

本教程将介绍如何创建MySQL新用户,以及如何如何授予他们进行各种操作时所需的权限。

前期准备​

本教程需要你能访问MySQL数据库,且这个数据库安装在运行Ubuntu 20.04的虚拟专用服务器上。但无论你用什么方法访问数据库,本教程中的核心准则都依然适用。

如果你还无法访问MySQL数据库并想自己设置一个,可以参考本站关于如何安装MySQL的教程。同样,无论服务器的底层操作系统是什么,创建新MySQL用户以及授予他们权限的方法都大同小异。

注,本教程的举的例子中,如果有需要你按自己的情况进行更改的部分,会将它们 像这样 标出。

创建新用户​

MySQL在安装完成时会创建一个root用户账户,可以用这个账户管理数据库。这个用户有MySQL服务器的完整权限,可以完全控制每个数据库、表格和用户等等。因此,最好避免在管理功能之外使用这个账户。这一部分将会概述如何以root MySQL用户身份创建新用户账户,并授予其权限。

在运行MySQL 5.7(及更高版本)的Ubuntu系统中,root MySQL用户默认设置为用 auth_socket 插件进行身份验证,而不是用密码验证。这个插件要求调用MySQL客户端的操作系统用户名与命令中的MySQL用户名相匹配。这意味着需要在使用 mysql 命令前面加上 sudo ,来以root Ubuntu用户的权限进行调用,以便获得root MySQL用户的访问权:

$ sudo mysql

注:如果root MySQL用户设置为密码验证,则需要用另一个命令访问MySQL shell。以下命令会以普通用户权限运行MySQL客户端。为了获得管理权限,必须在数据库内用正确的密码通过验证:

$ mysql -u root -p

能访问MySQL提示符后,可以使用 CREATE USER 语句创建一个新用户。一般采用以下语法:

mysql> CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';

CREATE USER 后是指定的用户名,后面紧接着是 @ 符号和用户要连接的服务器名。如果只打算从Ubuntu服务器本地访问这个用户,可以指定 localhost。把用户名与主机名用单引号括起并非必要,但这样做有助于避免错误。

用户的身份验证插件可以有多种选择。前文提到的 auth_socket 插件很方便,因为它无需有效用户输入密码来访问数据库,却依然能提供强大的安全保障。但它也阻止了远程连接,当外部程序需要与MySQL交互时,事情就会变得很复杂。

除了上面的写法外,还可以不加 WITH authentication_plugin 部分,让用户使用MySQL的默认插件 caching_sha2_password 进行验证。MySQL文档向想用密码登录的用户推荐了这个插件,因为它也能提供强大的安全性。

运行以下命令会创建一个用 caching_sha2_password 进行验证的用户。记得把 sammy 换成你想要的用户名,并把 password 替换成一个较复杂的自定义密码:

mysql> CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

注:某些版本的PHP存在一个已知问题,会导致 caching_sha2_password 也出现问题。如果要将数据库与PHP应用,比如phpMyAdimin,一起使用,可以让用户使用一个较为久远但依然安全的 mysql_native_password 插件进行身份验证:

mysql> CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

如果你还无法确定,可以先创建一个用 caching_sha2_plugin 进行验证的用户,之后再用 ALTER 命令改变,如下所示:

mysql> ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

创建新用户完成后,是时候授予他们适当的权限了。

给用户授权​

给用户授权的基本语法如下:

mysql> GRANT PRIVILEGE ON database.table TO 'username'@'host';

在此示例中,PRIVILEGE 的值定义了用户在特定 database 与 table 中可以进行的操作。通过用逗号分隔每个权限,可以在一条命令中给同一个用户多个权限。还可以通过用星号(*)代替数据库名与表格名来全局授予用户权限。在SQL中,星号用于表示“所有”数据库和表格。

举个例子,以下命令授予了用户 CREATE, ALTER 和 DROP 数据库、表格和其他用户的权限,以及 INSERT, UPDATE 和 DELETE 服务器上任何表格的数据的权限。此外,它还授权用户用 SELECT 查询数据,用 REFERENCES 关键词创建外键,以及用 RELOAD 权限执行 FLUSH 操作。不过,你应该只给用户他们需要的权限,因此可以按需随时调整你用户们的权限。

在MySQL官方文档中可以查看所有权限。

运行这个 GRANT 语句,将 sammy 替换成自定义的MySQL用户名,就可以给该用户授权了:

mysql> GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

值得注意的是,以上语句还包括 WITH GRANT OPTION,即允许这个MySQL用户将其拥有的任何权限授予系统中的其他用户。

警告:某些用户可能想授予他们的MySQL用户 ALL PRIVILEGES 权限,使这些用户有类似root用户的超级用户权限,如下所示:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

如此广泛的权限不应轻易给出,因为任何能访问这个MySQL用户的人都将能完全控制服务器上的每个数据库。

许多教程都建议在执行 CREATE USER 语句或 GRANT 语句后立刻执行 FLUSH PRIVILEGES 语句,重新加载授权表以确保新权限已生效:

mysql> FLUSH PRIVILEGES

然而根据MySQL官方文档,当用 GRANT 语句等账户管理语句间接地修改授权表时,数据库会立刻将授权表重新加载至内存中。因此,以上例子中并不一定要运行 FLUSH PRIVILEGES 命令,不过运行一次也不会对系统有什么负面影响。

撤销授权语句的结构几乎与授权语句的结构相同:

mysql> REVOKE type_of_permission ON database_name.table_name FROM 'username'@'host';

注意在撤销授权时,应当用 FROM,而不是授权时用的 TO。

运行 SHOW GRANTS 命令可以查看用户当前拥有的权限:

mysql> SHOW GRANTS FOR 'username'@'host';

与用 DROP 删除数据库类似,也可以用 DROP 删除用户:

mysql> DROP USER 'username'@'localhost';

完成用户创建与授权后,就可以退出MySQL客户端了:

mysql> exit

将来作为新用户登录时,可以用以下命令:

$ mysql -u sammy -p

-p 标记会使客户端提示需要输入密码完成验证。

结语​

本教程已带你了解了如何在MySQL数据库中添加新用户并授予他们各种权限。在这之后,你可以继续探索与试验各种MySQL用户的权限设置,也可以再了解一些更高级的MySQL配置信息。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3