MySQL:授予**所有**数据库权限

MySQL:授予**所有**数据库权限,mysql,mariadb,mysql-error-1142,Mysql,Mariadb,Mysql Error 1142,我已经创建了数据库,例如“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

我已经创建了数据库,例如“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'
这就是我创建“超级用户”权限的方式(尽管我通常会指定一个主机)

重要提示 虽然这个答案可以解决访问问题,
WITH GRANT OPTION
创建了一个可以访问的MySQL用户

“授予”选项权限使您能够将自己拥有的权限授予其他用户或从其他用户中删除这些权限


出于安全原因,您不应将此类用户帐户用于公众有权访问的任何进程(即网站)。这是一个老问题,但我认为公认的答案并不安全。这对于创建超级用户很好,但如果您想在单个数据库上授予权限,则不太好

grant all privileges on mydb.* to myuser@'%' identified by 'mypasswd';
grant all privileges on mydb.* to myuser@localhost identified by 'mypasswd';
%
似乎不包括本地主机所针对的套接字通信<代码>带有授权选项仅适用于超级用户,否则通常存在安全风险

MySQL 5.7+的更新似乎警告:

使用GRANT语句修改现有用户的属性,而不是 特权已弃用,将在将来的版本中删除。使用 此操作的ALTER USER语句

所以设置密码应该使用单独的命令。多亏了“恐怖袋熊”的评论

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

希望这能有所帮助。

这将对一些人有所帮助:

从MySQL命令行:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
遗憾的是,此时newuser没有权限对数据库进行任何操作。事实上,如果newuser甚至尝试登录(使用密码,password),他们将无法访问MySQL shell

因此,首先要做的是向用户提供他们需要的信息

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
此命令中的星号分别表示可访问的数据库和表。此特定命令允许用户读取、编辑、执行和执行所有数据库和表中的所有任务

完成要为新用户设置的权限后,请务必重新加载所有权限

FLUSH PRIVILEGES;
您的更改现在将生效

有关更多信息:


如果您对命令行不太熟悉,那么可以使用类似的客户端,或者

您好,我用这段代码在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';
适用于架构上的权限:)


可选:在
mypasswd
之后,您可以使用GRANT选项添加

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

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

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

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

我只能通过添加
GRANT选项
使其工作,而不会出现总是接收权限被拒绝的错误

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

一,。创建数据库

CREATE DATABASE db_name;
USE db_name;
二,。为数据库db\u名称创建用户名

GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' IDENTIFIED BY 'password';
三,。使用数据库

CREATE DATABASE db_name;
USE db_name;

四,。最后,您进入数据库db_name,然后执行创建、选择和插入操作等命令。

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

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

PRIVILEGES
关键字不是必需的


另外,我不知道为什么其他答案建议将由“密码”标识的
放在命令末尾。我相信这不是必需的。

我在使用MySQL 8.0.21版时遇到了这个挑战

我想向运行在
localhost
主机上的
root
用户授予名为
my\u app\u db
的数据库的权限

但当我运行命令时:

use my_app_db;

GRANT ALL PRIVILEGES ON my_app_db.* TO 'root'@'localhost';
我得到一个错误:

错误1064(42000):您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解在第1行的“my_app_db.*到“root”@“localhost”附近使用的正确语法>

以下是我修复的方法:

登录MySQL控制台。您可以将
root
更改为要登录的用户

mysql -u root -p
输入您的mysql root密码

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

use mysql;
SELECT user, host FROM user;
注意:如果不运行
使用mysql
,则会出现
未选择数据库
错误

这将为您提供此类输出:

+------------------+-----------+
| 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';
注意
将数据库_name.*的所有特权授予“root”@“localhost”命令可能不适用于MySQL的现代版本。大多数现代版本的MyQL在选择要使用的数据库后,会在授予特权命令中将
数据库名称
替换为
*

然后可以退出MySQL控制台:

exit
就这样


我希望这对您有所帮助

当您为当前用户显示补助金时,您会得到什么;你试过运行
FLUSH PRIVILEGES
?@Andy感谢“为当前用户显示授权”-这有助于我查看输入错误。@Romain,
FLUSH PRIVILEGES
在使用
grant
命令时不需要。您应该使用
刷新权限仅当您修改授权表direc时
exit