MySQL:授予数据库上的** *权限

我已经创建了数据库,例如'mydb'。

CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER 'myuser'@'%' IDENTIFIED BY PASSWORD '*HASH';
GRANT ALL ON mydb.* TO 'myuser'@'%';
GRANT ALL ON mydb TO 'myuser'@'%';
GRANT CREATE ON mydb TO 'myuser'@'%';
FLUSH PRIVILEGES;

现在我可以登录到数据库从任何地方,但不能创建表。

如何授予该数据库和(将来)表上的所有特权。我不能在“mydb”数据库中创建表。我总是得到:

CREATE TABLE t (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin);
ERROR 1142 (42000): CREATE command denied to user 'myuser'@'...' for table 't'
1962489 次浏览
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' WITH GRANT OPTION;

这就是我创建“超级用户”的方法。特权(尽管我通常会指定一个主机)。

重要提示

虽然这个答案可以解决访问问题,WITH GRANT OPTION创建一个MySQL用户,可以编辑其他用户的权限

GRANT OPTION特权使您能够向其他用户授予或从其他用户删除您自己拥有的特权。

出于安全原因,您不应将这种类型的用户帐户用于公众将有权访问的任何进程(即网站)。建议您使用创建一个只有数据库权限的用户进行这种使用。

这是一个老问题,但我不认为公认的答案是安全的。它适合创建超级用户,但不适合在单个数据库上授予特权。

grant all privileges on mydb.* to myuser@'%' identified by 'mypasswd';
grant all privileges on mydb.* to myuser@localhost identified by 'mypasswd';

%似乎不包括套接字通信,localhost是用于。WITH GRANT OPTION仅适用于超级用户,否则通常存在安全风险。

更新 for MySQL 5.7+似乎警告:

使用GRANT语句修改现有用户的属性 Privileges已弃用,将在未来的版本中删除。使用

. ALTER USER语句

所以设置密码应该用单独的命令。感谢来自@ scare -wombat的评论。

ALTER USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
ALTER USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';

这将对一些人有帮助:

MySQL命令行:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

遗憾的是,在这一点上newuser没有权限对数据库做任何事情。事实上,如果newuser尝试登录(使用密码,密码),他们将无法到达MySQL shell。

因此,要做的第一件事是为用户提供访问他们需要的信息的权限。

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

此命令中的星号(分别)表示用户可以访问的数据库和表——此特定命令允许用户读取、编辑、执行和执行跨所有数据库和表的所有任务。

一旦确定了想要为新用户设置的权限,一定要重新加载所有权限。

FLUSH PRIVILEGES;

您的更改现在将生效。

更多信息:http://dev.mysql.com/doc/refman/5.6/en/grant.html

如果你不习惯使用命令行,那么你可以使用MySQL工作台NavicatSQLyog这样的客户端

你好,我用这段代码在mysql有超级用户

GRANT EXECUTE, PROCESS, SELECT, SHOW DATABASES, SHOW VIEW, ALTER, ALTER ROUTINE,
CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP,
EVENT, INDEX, INSERT, REFERENCES, TRIGGER, UPDATE, CREATE USER, FILE,
LOCK TABLES, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHUTDOWN,
SUPER
ON *.* TO mysql@'%'
WITH GRANT OPTION;

然后

FLUSH PRIVILEGES;

这个SQL只授予所有数据库的基本权限。它们对于Drupal或Wordpress来说已经足够了,而且还允许一个开发人员帐户用于本地项目。

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP,
INDEX, ALTER, CREATE TEMPORARY TABLES
ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY 'mypasswd';

适用于schema上的特权:)

可选:在mypasswd之后可以添加WITH GRANT OPTION

仅从远程服务器访问mydb数据库

GRANT ALL PRIVILEGES ON mydb.* TO 'root'@'192.168.2.21';

从远程服务器访问所有数据库。

GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.2.21';

我可以使它只通过添加GRANT OPTION工作,没有总是接收权限拒绝错误

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost' WITH GRANT OPTION;

1。创建数据库

CREATE DATABASE db_name;

2。为数据库db_name创建用户名

GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' IDENTIFIED BY 'password';

3。使用数据库

USE db_name;

4。最后,您进入数据库db_name,然后执行像创建、选择和插入操作这样的命令。

要授予数据库:mydb上的所有特权给用户:myuser,只需执行:

GRANT ALL ON mydb.* TO 'myuser'@'localhost';

或者:

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';

PRIVILEGES关键字不是必需的。

我也不知道为什么其他答案建议将IDENTIFIED BY 'password'放在命令的末尾。我认为这不是必需的。

我在开发MySQL版本8.0.21时遇到了这样的挑战

我想将名为my_app_db的数据库的权限授予在localhost主机上运行的root用户。

但是当我运行命令时:

use my_app_db;


GRANT ALL PRIVILEGES ON my_app_db.* TO 'root'@'localhost';

我得到了错误:

错误1064(42000):你有一个错误的SQL语法;查看MySQL服务器版本对应的手册,以获得使用'my_app_db附近的正确语法。*在第1行和gt行执行“root”@“localhost”

# EYZ0:

登录到MySQL控制台。你可以将root改为你想要登录的用户:

mysql -u root -p

输入您的Mysql根密码

接下来,列出MySQL服务器上的所有用户及其主机。与PostgreSQL不同,它通常存储在mysql数据库中。所以我们需要首先选择mysql数据库:

use mysql;
SELECT user, host FROM user;

请注意:如果你不运行use mysql,你会得到no database selected错误。

这应该会给你一个这样的输出:

+------------------+-----------+
| user             | host      |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)

接下来,根据从列表中获得的信息,将特权授予您想要的用户。在向数据库授予权限之前,我们需要首先选择数据库。对我来说,我正在使用运行在localhost主机上的root用户:

use my_app_db;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';

请注意: GRANT ALL PRIVILEGES ON database_name.* TO 'root'@'localhost';命令可能不适用于现代版本的MySQL。在选择要使用的数据库后,大多数现代版本的mysql在授予的权限命令中将database_name替换为*

然后您可以退出MySQL控制台:

exit

就是这样。

我希望这对你们有帮助