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.user用user='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_priv在mysql.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 可以工作(我不保证)。
Metafaniel刚刚问了
很好的解释,谢谢。但是,如果您不推荐这种方式来解决问题,那么还有什么其他方式可以授予用户此 Super_priv 权限?谢谢!– Metafaniel
由于只有 DB 访问权限的用户不能拥有SUPER,因此唯一可以做的就是在转储中手动更改 DEFINER。基本思想是将例程单独 mysqldump 到文本文件。然后,将定义器编辑为user1@'%'. 然后,您应该能够重新加载。
Oct 02, 2011: mysqldump 可以转储触发器和程序吗?Jul 25, 2011: DROP PROCEDURE IF EXISTS 不包含在 mysqldump 中Jul 25, 2011:只转储 MySQL 中的存储过程视图也一样
Mar 23, 2012: MySQL 视图授权Jul 26, 2011:在许多视图上修改 DEFINERcar*_*rla 27
我有同样的问题。我所做的是:
GRANT SUPER ON *.* TO user1@localhost
Run Code Online (Sandbox Code Playgroud)
问题解决了。
| 归档时间: |
|
| 查看次数: |
337478 次 |
| 最近记录: |