Kullanıcıya süper ayrıcalık nasıl verilir?


44

Bir kullanıcı oluşturdum ve kullanıcıya ayrıcalıklar verdim1.

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

Veritabanımı dökümleri almak için mysql tezgah kullanarak. Veritabanlarını db1 veritabanına içe aktarırken

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

Bu dökümlerde, tüm tablolar başarıyla içe aktarılıyor, ancak rutinleri veritabanına alırken hata oluşuyor. Ayrıcalıkta yanlış bir şey var mı, kullanıcıya verdim1. Lütfen tavsiye.

Yanıtlar:


35

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.useruser = 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_privhemen 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_priviç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


mariadb ve güncelleme ifadesini kullanarak "HATA 1348 (HY000): Sütun 'Super_priv' 'güncellenebilir değil
c4f4t0r


-6

Kök kullanıcıyla giriş yapın ve veritabanını seçin ve aşağıdaki sql sorgusunu çalıştırın

SET @ @ global.sql_mode = 'NO_ENGINE_SUBSTITUTION'


1
Bunun soru ile ilgisi nedir? Başka bir yere göndermek ister miydin?
dezso
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.