如何授予用户超级权限?

del*_*unt 56 mysql mysql-workbench

我已经创建了一个用户并赋予了 user1 权限。

`grant all privileges on db1.* to user1@'%' with grant option;
Run Code Online (Sandbox Code Playgroud)

我正在使用 mysql 工作台将转储导入我的数据库。将转储导入数据库 db1 时,发生错误,指出

ERROR 1227 (42000) at line 49: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
Run Code Online (Sandbox Code Playgroud)

在该转储中,所有表均已成功导入,但在将例程导入数据库时​​发生错误。权限有什么问题吗,我已经给了user1。请指教。

Rol*_*DBA 43

从政治正确的意义上来说,你刚才的要求是不可能的。为什么 ?

SUPER权限是一个全球性的特权,而不是数据库级别的特权。

当您创建用户时

grant all privileges on db1.* to user1@'%' with grant option;
Run Code Online (Sandbox Code Playgroud)

mysql.useruser='user1'和填充了表格host='%'。所有其他列(全局权限)默认为“N”。其中一列是Super_priv. 这是表:

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.00 sec)

mysql>
Run Code Online (Sandbox Code Playgroud)

Super_priv紧随其后Show_db_priv

数据库级权限被填充到mysql.db. 就这个:

mysql> desc mysql.db;
+-----------------------+---------------+------+-----+---------+-------+
| Field                 | Type          | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| Host                  | char(60)      | NO   | PRI |         |       |
| Db                    | char(64)      | NO   | PRI |         |       |
| User                  | char(16)      | NO   | PRI |         |       |
| 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       |       |
| 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       |       |
| Create_tmp_table_priv | enum('N','Y') | NO   |     | N       |       |
| Lock_tables_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       |       |
| Execute_priv          | enum('N','Y') | NO   |     | N       |       |
| Event_priv            | enum('N','Y') | NO   |     | N       |       |
| Trigger_priv          | enum('N','Y') | NO   |     | N       |       |
+-----------------------+---------------+------+-----+---------+-------+
22 rows in set (0.00 sec)

mysql>
Run Code Online (Sandbox Code Playgroud)

请注意,Super_privmysql.db.

要在纯 SQL 术语中将其可视化,请以 user1 身份登录并运行SHOW GRANTS;输出将有两行:

  • GRANT USAGE ON *.* TO user1@'%' ...
  • GRANT ALL PRIVILEGES ON db1.* TO user1@'%' ...

您可以尝试一个 hack,但我通常不会推荐它。

步骤 01) 以身份登录 mysql root@localhost(应具有所有权限)

步骤 02) 运行此查询

UPDATE mysql.user SET Super_Priv='Y' WHERE user='user1' AND host='%';
Run Code Online (Sandbox Code Playgroud)

步骤 03) 运行此查询

FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

这理论上应该有效。然后,user1 可以工作(我不保证)。

更新 2014-12-19 15:24 美国东部时间

Metafaniel刚刚问了

很好的解释,谢谢。但是,如果您不推荐这种方式来解决问题,那么还有什么其他方式可以授予用户此 Super_priv 权限?谢谢!– Metafaniel

由于只有 DB 访问权限的用户不能拥有SUPER,因此唯一可以做的就是在转储中手动更改 DEFINER。基本思想是将例程单独 mysqldump 到文本文件。然后,将定义器编辑为user1@'%'. 然后,您应该能够重新加载。

视图也一样


car*_*rla 27

我有同样的问题。我所做的是:

GRANT SUPER ON *.* TO user1@localhost
Run Code Online (Sandbox Code Playgroud)

问题解决了。

警告:向用户授予 SUPER 权限有什么危险吗?