정치적으로 올바른 의미에서 방금 요청한 것은 불가능합니다. 왜 ?
SUPER 권한은 글로벌 권한이 아닌 데이터베이스 레벨의 특권이다.
당신과 함께 사용자를 만들 때
grant all privileges on db1.* to user1@'%' with grant option;
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>
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@'%'
. 그런 다음 다시로드 할 수 있어야합니다.
뷰에 대한 동일한 것