사용자에게 슈퍼 권한을 부여하는 방법


44

사용자를 만들고 user1에게 권한을 부여했습니다.

`grant all privileges on db1.* to user1@'%' with grant option;

mysql workbench를 사용하여 덤프를 내 데이터베이스로 가져옵니다. 데이터베이스 db1로 덤프를 가져 오는 동안 오류가 발생했습니다.

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

해당 덤프에서 모든 테이블을 성공적으로 반입하지만 루틴을 데이터베이스로 반입하는 동안 오류가 발생합니다. user1에게 부여한 권한에 문제가 있습니까? 조언을 부탁드립니다.

답변:


35

정치적으로 올바른 의미에서 방금 요청한 것은 불가능합니다. 왜 ?

SUPER 권한은 글로벌 권한이 아닌 데이터베이스 레벨의 특권이다.

당신과 함께 사용자를 만들 때

grant all privileges on db1.* to user1@'%' with grant option;

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>

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>

Super_priv존재하지 않습니다 mysql.db.

순수한 SQL 용어로이를 시각화하려면 user1로 로그인하고 실행하십시오 SHOW GRANTS;. 출력에는 두 줄이 있습니다.

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

시도 할 수있는 해킹이 있지만 일반적으로 권장하지 않습니다.

STEP 01) root @ localhost로 mysql에 로그인 (모든 권한을 가져야 함)

STEP 02)이 쿼리를 실행

UPDATE mysql.user SET Super_Priv='Y' WHERE user='user1' AND host='%';

STEP 03)이 쿼리를 실행

FLUSH PRIVILEGES;

이론적으로는 효과가 있습니다. 그런 다음 user1이 작동 할 수 있습니다 (보증하지 않습니다).

업데이트 2014-12-19 15:24 EST

메타 파니 엘이 방금 물었다

좋은 설명 감사합니다. 그러나 문제를 해결하기 위해 그 방법을 권장하지 않으면이 Super_priv를 사용자에게 부여하는 가장 좋은 방법은 무엇입니까 ?? 감사! – 메타 파니 엘

DB 액세스 권한 만있는 사용자는 SUPER를 가질 수 없으므로 덤프에서 DEFINER를 수동으로 변경해야합니다. 기본 아이디어는 루틴을 텍스트 파일로 mysqldump하는 것입니다. 그런 다음 정의자를로 편집하십시오 user1@'%'. 그런 다음 다시로드 할 수 있어야합니다.

뷰에 대한 동일한 것


mariadb 및 업데이트 문 "ERROR 1348 (HY000) : 'Super_priv'열을 업데이트 할 수 없습니다 '
c4f4t0r


-6

루트 사용자로 로그인하고 데이터베이스를 선택하고 다음 SQL 쿼리를 실행하십시오.

SET @ @ global.sql_mode = 'NO_ENGINE_SUBSTITUTION'


1
이것은 질문과 어떤 관련이 있습니까? 다른 곳에 게시하고 싶습니까?
dezso
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.