Politik olarak doğru bir anlamda, az önce istediğin şey imkansız. Neden ?
SÜPER ayrıcalık global ayrıcalık değil, bir veritabanı düzey ayrıcalıktır.
İle kullanıcıyı oluşturduğunuzda
grant all privileges on db1.* to user1@'%' with grant option;
tabloyu mysql.user
user = user1 ve host = '%' ile doldurdunuz . Diğer tüm sütunlar (genel ayrıcalıklar) 'N' olarak ayarlandı. Bu sütunlardan biri Super_priv
. İşte masa:
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
hemen sonra belirir Show_db_priv
.
Veritabanı düzeyinde ayrıcalıklar yerleştirildi mysql.db
. İşte burada:
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>
Bildirim Super_priv
içinde yok mysql.db
.
Bunu saf SQL terimlerinde görselleştirmek için, user1 olarak giriş yapın ve çalıştırın SHOW GRANTS;
Çıktının iki satırı olacak:
GRANT USAGE ON *.* TO user1@'%' ...
GRANT ALL PRIVILEGES ON db1.* TO user1@'%' ...
Deneyebileceğiniz bir kesmek var ama normalde bunu tavsiye etmem.
ADIM 01) MySQL'e root @ localhost olarak giriş yapınız
ADIM 02) Bu sorguyu çalıştır
UPDATE mysql.user SET Super_Priv='Y' WHERE user='user1' AND host='%';
ADIM 03) Bu sorguyu çalıştır
FLUSH PRIVILEGES;
Bu teorik olarak işe yaramalı. Ardından, kullanıcı1 çalışabilir (garanti vermem).
GÜNCELLEME 2014-12-19 15:24 EST
Metafaniel az önce sordu
Harika bir açıklama, teşekkürler. Ancak sorunu çözmek için bu yolu tavsiye etmiyorsanız, o zaman bir kullanıcıyı bu Super_priv öğütmek için en iyi yol nedir? Teşekkürler! - Metafaniel
Sadece DB erişimi olan bir kullanıcı olamaz yana SÜPER , yapabileceği tek şey bir dökümü elle Belirleyiciyi değiştirmektir. Temel fikir, rutinleri tek başına bir metin dosyasına gizlemek olacaktır. Sonra tanımlayıcıyı düzenleyin user1@'%'
. O zaman yeniden yükleyebilmelisiniz.
Görünümler İçin Aynı Şey