介绍
MySQL是一个开源的关系数据库管理系统. 它通常被部署作为 LAMP stack 的一部分(代表 L inux, ** A** pache, ** M** ySQL,和 ** P** HP) 和,在本文中,是 最受欢迎的开源数据库 在世界上。
本指南概述了如何创建一个新的MySQL用户,并授予他们执行各种操作所需的权限。
前提条件
本指南假定该数据库安装在运行 Ubuntu 20.04 的虚拟私人服务器上,尽管它概述的原则应该适用于无论您如何访问您的数据库。
如果您没有访问 MySQL 数据库,并且想自己设置一个数据库,您可以遵循我们在 How To Install MySQL的指南之一。
<$>[info] 您可以替代地创建由云提供商管理的 MySQL 数据库. 有关如何创建 DigitalOcean 管理数据库的详细信息,请参阅我们的 产品文档。
请注意,您需要更改或自定义的示例命令的任何部分将在本指南中标注为喜欢
。
创建新用户
在安装时,MySQL会创建一个 root 用户帐户,你可以使用它来管理你的数据库。这个用户在MySQL服务器上拥有完整的权限,这意味着它对每个数据库、表、用户等都有完全的控制权。
在运行 MySQL " 5.7 " 的Ubuntu系统(以及后来的版本)中,root MySQL 用户被设定默认使用 auth_ socket
插件进行认证, 而不是使用密码 。 此插件要求引用 MySQL 客户端的操作系统用户名称与命令中指定的 MySQL 用户名称相匹配. 这意味着你需要先于mysql ' 命令,以
sudo ' 的特权援引该命令。 ** Ubuntu 用户可以访问** root** MySQL 用户 :
1sudo mysql
注意: 如果您的 MySQL 用户已配置为使用密码进行身份验证,则需要使用不同的命令来访问 MySQL 壳,以下操作将使您的 MySQL 客户端具有常规的用户权限,并且您只会通过使用正确的密码进行身份验证来获得数据库内的管理员权限:
1mysql -u root -p
美元
一旦你可以访问MySQL提示,你可以创建一个新的用户,用一个CREATE USER
声明。
1CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';
在CREATE USER
之后,你会指定一个用户名,然后是@
字符,然后是这个用户将连接的主机名。如果你只计划从 Ubuntu 服务器上本地访问这个用户,你可以指定localhost
。将用户名和主机包装成单个引文并不总是必要,但这样做可以帮助防止错误。
在选择用户身份验证插件时,您有几个选项。前面提到的auth_socket
插件可以方便,因为它提供了强大的安全性,而不需要有效的用户输入密码来访问数据库。
作为一种替代方法,您可以完全放弃语法的WITH authentication_plugin
部分,以便用户使用MySQL的默认插件caching_sha2_password
进行身份验证。
运行以下命令来创建一个使用者,以caching_sha2_password
身份验证。 请确保将sammy
更改为您偏好的用户名和password
更改为您选择的强有力的密码:
1CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
注意:在某些版本的PHP中存在一个已知的问题,导致了caching_sha2_password
的问题. 如果您计划使用这个数据库与PHP应用程序 - 例如 phpMyAdmin - 您可能想要创建一个用户,该用户将使用更旧的,但仍然安全的mysql_native_password
插件来身份验证:
1CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
如果您不确定,您可以随时创建一个用 `caching_sha2_plugin’ 进行身份验证的用户,然后用以下命令更改它:
1ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
美元
创建新用户后,您可以授予他们相应的特权。
授予用户权限
授予用户权限的通用语法如下:
1GRANT PRIVILEGE ON database.table TO 'username'@'host';
此示例语法中的PRIVILEGE
值定义了用户在指定的数据库
和表
上可以执行哪些操作. 您可以通过将每一个命令分开一个字符来授予同一个用户多个权限. 您还可以通过输入数据库和表名称的星座(*
)来授予用户全球权限。
举例来说,以下命令赋予用户CREATE
、ALTER
和DROP
数据库、表格和用户以全球权限,并赋予用户INSERT
、UPDATE
和DELETE
数据从服务器上的任何表格中获取的权力。 它还使用户能够使用 " SELECT " 查询数据,用 " ReFERENCES " 关键词创建外国密钥,并以 " RELOAD " 特权执行 " FLUSH " 操作。 然而,您应该只授予用户所需的权限,因此可以随意根据需要调整自己的用户权限.
您可以在 官方MySQL文档中找到可用的特权的完整列表。
运行此GRANT
声明,用您自己的MySQL用户名取代sammy
,将这些特权授予您的用户:
1GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
请注意,此声明还包括WITH GRANT OPTION
。这将允许您的MySQL用户授予其在系统上的其他用户的任何权限。
警告**:有些用户可能希望授予他们的MySQL用户ALL PRIVILEGES
特权,这将为他们提供类似于 ** root** 用户特权的广泛超级用户特权,如下:
1GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
这种广泛的特权不应该轻易给予,因为任何拥有访问这个MySQL用户的人都将对服务器上的每个数据库拥有完全的控制权。
许多指南建议在CREATE USER
或GRANT
声明后立即运行FLUSH PRIVILEGES
命令,以重新加载补贴表,以确保新的特权生效:
1FLUSH PRIVILEGES;
然而,根据官方的MySQL文档(https://dev.mysql.com/doc/refman/8.0/en/privilege-changes.html),当您通过帐户管理声明(如GRANT
)间接修改捐款表时,数据库将立即将捐款表重新加载到内存中,这意味着在我们的情况下,FLUSH PRIVILEGES
命令是不必要的。
如果您需要撤销许可证,其结构几乎与授予许可证相同:
1REVOKE type_of_permission ON database_name.table_name FROM 'username'@'host';
请注意,在撤销权限时,语法要求您使用从
,而不是您在授予权限时使用的TO
。
您可以通过运行SHOW GRANTS
命令来查看用户的当前权限:
1SHOW GRANTS FOR 'username'@'host';
就像您可以用DROP
删除数据库一样,您可以使用DROP
删除用户:
1DROP USER 'username'@'localhost';
创建 MySQL 用户并授予他们特权后,您可以退出 MySQL 客户端:
1exit
在未来,要作为你的新MySQL用户登录,你会使用如下这样的命令:
1mysql -u sammy -p
p
旗将导致MySQL客户端向您请求您的MySQL用户密码以进行身份验证。
结论
通过遵循本教程,您已经学会了如何添加新用户,并在MySQL数据库中授予他们各种权限. 从这里开始,您可以继续探索和实验您的MySQL用户的不同权限设置,或者您可能想要了解更多关于一些更高级别的MySQL配置。
有关MySQL的基础知识的更多信息,您可以查看以下教程: