由于遇到了一些问题,我决定重新创建除root@localhost
. 这工作正常,但新创建的用户无权执行任何操作。我想要的是简单地授予在某个本地 IP 上 root 的所有权限。我(作为root@localhost
)试过
CREATE USER 'root'@'10.0.3.210';
GRANT ALL ON *.* TO 'root'@'10.0.3.210';
Run Code Online (Sandbox Code Playgroud)
第一个命令有效,第二个命令失败并显示消息
ERROR 1045 (28000): Access denied for user 'root'@'localhost'
Run Code Online (Sandbox Code Playgroud)
我不明白为什么root@localhost
不能做所有事情,我确定我没有弄乱它的特权。从
SHOW GRANTS FOR 'root'@'localhost'
Run Code Online (Sandbox Code Playgroud)
我得到
Grants for root@localhost
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, REPLICATION SLAVE, REPLICATION CLIENT, CREATE USER ON *.* TO 'root'@'localhost' WITH GRANT OPTION
GRANT ALL PRIVILEGES ON `%`.* TO 'root'@'localhost' WITH GRANT OPTION
Run Code Online (Sandbox Code Playgroud)
不管这意味着什么。我是否缺少必要的特权?可以修复吗?
我正在使用 mysql Ver 14.14 Distrib 5.1.61,用于 debian-linux-gnu (x86_64)。
Rol*_*DBA 12
哦,天哪,我认为问题源于混合不同 mysql 版本的 mysql 模式。首先,运行这个查询:
desc mysql.user;
Run Code Online (Sandbox Code Playgroud)
对于 MySQL 8.0,您将获得 51 列
mysql> desc mysql.user;
Run Code Online (Sandbox Code Playgroud)
场地 | 类型 | 空值 | 钥匙 | 默认 | 额外的 |
---|---|---|---|---|---|
主持人 | 字符(255) | 不 | PRI | ||
用户 | 字符(32) | 不 | PRI | ||
选择_priv | 枚举('N','Y') | 不 | N | ||
插入_priv | 枚举('N','Y') | 不 | N | ||
更新_priv | 枚举('N','Y') | 不 | N | ||
删除_priv | 枚举('N','Y') | 不 | N | ||
创建_priv | 枚举('N','Y') | 不 | N | ||
drop_priv | 枚举('N','Y') | 不 | N | ||
重新加载_priv | 枚举('N','Y') | 不 | N | ||
Shutdown_priv | 枚举('N','Y') | 不 | N | ||
process_priv | 枚举('N','Y') | 不 | N | ||
文件_priv | 枚举('N','Y') | 不 | N | ||
Grant_priv | 枚举('N','Y') | 不 | N | ||
References_priv | 枚举('N','Y') | 不 | N | ||
索引_priv | 枚举('N','Y') | 不 | N | ||
改变_priv | 枚举('N','Y') | 不 | N | ||
show_db_priv | 枚举('N','Y') | 不 | N | ||
super_priv | 枚举('N','Y') | 不 | N | ||
创建_tmp_table_priv | 枚举('N','Y') | 不 | N | ||
Lock_tables_priv | 枚举('N','Y') | 不 | N | ||
执行_priv | 枚举('N','Y') | 不 | N | ||
Repl_slave_priv | 枚举('N','Y') | 不 | N | ||
Repl_client_priv | 枚举('N','Y') | 不 | N | ||
create_view_priv | 枚举('N','Y') | 不 | N | ||
show_view_priv | 枚举('N','Y') | 不 | N | ||
create_routine_priv | 枚举('N','Y') | 不 | N | ||
更改例程_priv | 枚举('N','Y') | 不 | N | ||
创建_user_priv | 枚举('N','Y') | 不 | N | ||
事件_priv | 枚举('N','Y') | 不 | N | ||
触发器_priv | 枚举('N','Y') | 不 | N | ||
create_tablespace_priv | 枚举('N','Y') | 不 | N | ||
ssl_type | 枚举('','任何','X509','指定') | 不 | |||
ssl_cipher | 斑点 | 不 | 空值 | ||
x509_issuer | 斑点 | 不 | 空值 | ||
x509_主题 | 斑点 | 不 | 空值 | ||
最大问题 | 无符号整数 | 不 | 0 | ||
最大更新 | 无符号整数 | 不 | 0 | ||
最大连接数 | 无符号整数 | 不 | 0 | ||
最大用户连接数 | 无符号整数 | 不 | 0 | ||
插入 | 字符(64) | 不 | caching_sha2_password | ||
认证字符串 | 文本 | 是的 | 空值 | ||
密码过期 | 枚举('N','Y') | 不 | N | ||
密码_last_changed | 时间戳 | 是的 | 空值 | ||
密码生命周期 | smallint 无符号 | 是的 | 空值 | ||
帐户被锁定 | 枚举('N','Y') | 不 | N | ||
create_role_priv | 枚举('N','Y') | 不 | N | ||
drop_role_priv | 枚举('N','Y') | 不 | N | ||
密码_重用_历史 | smallint 无符号 | 是的 | 空值 | ||
密码_重用_时间 | smallint 无符号 | 是的 | 空值 | ||
密码_require_current | 枚举('N','Y') | 是的 | 空值 | ||
用户属性 | json | 是的 | 空值 |
51 行(0.00 秒)
对于 MySQL 5.6,您将获得 43 列
mysql> desc mysql.user;
+------------------------+-----------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+---------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
| Password | char(41) | NO | | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv | enum('N','Y') | NO | | N | |
| Process_priv | enum('N','Y') | NO | | N | |
| File_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Show_db_priv | enum('N','Y') | NO | | N | |
| Super_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Repl_slave_priv | enum('N','Y') | NO | | N | |
| Repl_client_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Create_user_priv | enum('N','Y') | NO | | N | |
| Event_priv | enum('N','Y') | NO | | N | |
| Trigger_priv | enum('N','Y') | NO | | N | |
| Create_tablespace_priv | enum('N','Y') | NO | | N | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | |
| ssl_cipher | blob | NO | | NULL | |
| x509_issuer | blob | NO | | NULL | |
| x509_subject | blob | NO | | NULL | |
| max_questions | int(11) unsigned | NO | | 0 | |
| max_updates | int(11) unsigned | NO | | 0 | |
| max_connections | int(11) unsigned | NO | | 0 | |
| max_user_connections | int(11) unsigned | NO | | 0 | |
| plugin | char(64) | YES | | | |
| authentication_string | text | YES | | NULL | |
| password_expired | enum('N','Y') | NO | | N | |
+------------------------+-----------------------------------+------+-----+---------+-------+
43 rows in set (0.15 sec)
Run Code Online (Sandbox Code Playgroud)
对于 MySQL 5.5,您将获得 42 列
mysql> desc mysql.user;
+------------------------+-----------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+---------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
| Password | char(41) | NO | | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv | enum('N','Y') | NO | | N | |
| Process_priv | enum('N','Y') | NO | | N | |
| File_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Show_db_priv | enum('N','Y') | NO | | N | |
| Super_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Repl_slave_priv | enum('N','Y') | NO | | N | |
| Repl_client_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Create_user_priv | enum('N','Y') | NO | | N | |
| Event_priv | enum('N','Y') | NO | | N | |
| Trigger_priv | enum('N','Y') | NO | | N | |
| Create_tablespace_priv | enum('N','Y') | NO | | N | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | |
| ssl_cipher | blob | NO | | NULL | |
| x509_issuer | blob | NO | | NULL | |
| x509_subject | blob | NO | | NULL | |
| max_questions | int(11) unsigned | NO | | 0 | |
| max_updates | int(11) unsigned | NO | | 0 | |
| max_connections | int(11) unsigned | NO | | 0 | |
| max_user_connections | int(11) unsigned | NO | | 0 | |
| plugin | char(64) | YES | | | |
| authentication_string | text | YES | | NULL | |
+------------------------+-----------------------------------+------+-----+---------+-------+
42 rows in set (0.01 sec)
mysql>
Run Code Online (Sandbox Code Playgroud)
对于 MySQL 5.1,您将获得 39 列
mysql> desc mysql.user;
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
| Password | char(41) | NO | | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv | enum('N','Y') | NO | | N | |
| Process_priv | enum('N','Y') | NO | | N | |
| File_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Show_db_priv | enum('N','Y') | NO | | N | |
| Super_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Repl_slave_priv | enum('N','Y') | NO | | N | |
| Repl_client_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Create_user_priv | enum('N','Y') | NO | | N | |
| Event_priv | enum('N','Y') | NO | | N | |
| Trigger_priv | enum('N','Y') | NO | | N | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | |
| ssl_cipher | blob | NO | | NULL | |
| x509_issuer | blob | NO | | NULL | |
| x509_subject | blob | NO | | NULL | |
| max_questions | int(11) unsigned | NO | | 0 | |
| max_updates | int(11) unsigned | NO | | 0 | |
| max_connections | int(11) unsigned | NO | | 0 | |
| max_user_connections | int(11) unsigned | NO | | 0 | |
+-----------------------+-----------------------------------+------+-----+---------+-------+
39 rows in set (0.00 sec)
mysql>
Run Code Online (Sandbox Code Playgroud)
对于 MySQL 5.0,您将获得 37 列
mysql> desc mysql.user;
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
| Password | char(41) | NO | | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv | enum('N','Y') | NO | | N | |
| Process_priv | enum('N','Y') | NO | | N | |
| File_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Show_db_priv | enum('N','Y') | NO | | N | |
| Super_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N
-
这正是我今天遇到的问题。我花了 4 个小时才弄明白。 (2认同)
的评论gbn
让我找到了解决方案:不知道它是怎么来的,但root@localhost
缺乏一些特权。所以首先通过以下方式获得它们
UPDATE mysql.user SET XXX_priv = 'Y' WHERE user = 'root' AND host = 'localhost'
Run Code Online (Sandbox Code Playgroud)
有很多列,所以使用类似
SELECT GROUP_CONCAT(concat(' ', column_name, '=\'Y\''))
FROM information_schema.columns
WHERE table_schema = 'mysql'
AND table_name = 'user'
AND column_name LIKE '%_priv'
Run Code Online (Sandbox Code Playgroud)
可以节省相当多的打字。更新后可能FLUSH PRIVILEGES
需要。一旦我拥有所有权限,我也可以授予它们。