Bir db şemasında tüm OKUMA iznini vermek istediğim bir kullanıcım var.
Bunun bir yolu şudur:
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
Grant'teki tüm okuma işlemlerini gruplamanın bir yolu var mı?
Bir db şemasında tüm OKUMA iznini vermek istediğim bir kullanıcım var.
Bunun bir yolu şudur:
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
Grant'teki tüm okuma işlemlerini gruplamanın bir yolu var mı?
Yanıtlar:
Veritabanında TÜM OKUMA işlemlerini ifade eden tek bir ayrıcalık varsa.
"Tümü okundu" yu nasıl tanımladığınıza bağlıdır.
Tablolardan ve görünümlerden "okumak" SELECTayrıcalıktır. "Tümünü oku" derken kastettiğiniz buysa, evet:
GRANT SELECT ON *.* TO 'username'@'host_or_wildcard' IDENTIFIED BY 'password';
Ancak, kulağa her şeyi "görme", "bakma ama dokunma" yeteneğini kastediyorsunuz. İşte akla gelen diğer okuma türleri:
Görüşlerin tanımını "okumak" SHOW VIEWayrıcalıktır.
Şu anda yürütülmekte olan sorguların listesini diğer kullanıcılar tarafından "okumak" PROCESSayrıcalıktır.
Geçerli çoğaltma durumunu "okumak" REPLICATION CLIENTayrıcalıktır.
Bunlardan herhangi birinin veya tümünün, söz konusu kullanıcının niteliğine bağlı olarak, ifşa etmeyi düşündüğünüzden daha fazla bilgiyi ifşa edebileceğini unutmayın.
Yapmak istediğiniz okuma buysa, bunlardan herhangi birini (veya mevcut ayrıcalıklardan herhangi birini ) tek bir GRANTifadede birleştirebilirsiniz.
GRANT SELECT, SHOW VIEW, PROCESS, REPLICATION CLIENT ON *.* TO ...
Bununla birlikte, diğer ayrıcalıkların bazı alt kümelerini veren tek bir ayrıcalık yoktur, bu sizin sorduğunuz gibi.
İşleri elle yapıyorsanız ve belirli bir kullanıcı sınıfı için tipik olarak verdiğiniz hibe miktarını hatırlamanıza gerek kalmadan bunu yapmanın daha kolay bir yolunu arıyorsanız, benzer bir kullanıcının hibelerini yeniden oluşturmak için ifadeye bakabilir ve bunu değiştirebilirsiniz. benzer ayrıcalıklara sahip yeni bir kullanıcı oluşturmak için:
mysql> SHOW GRANTS FOR 'not_leet'@'localhost';
+------------------------------------------------------------------------------------------------------------------------------------+
| Grants for not_leet@localhost |
+------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, REPLICATION CLIENT ON *.* TO 'not_leet'@'localhost' IDENTIFIED BY PASSWORD '*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' |
+------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
Parola ile birlikte 'not_leet' ve 'localhost'u eklemek istediğiniz yeni kullanıcıyla eşleşecek şekilde değiştirmek, yeni bir kullanıcı GRANToluşturmak için yeniden kullanılabilir bir ifadeyle sonuçlanacaktır .
Tek bir işlemin kurup kullanıcılara sınırlı ayrıcalıklar vermesini ve belki de hak edilmemiş ayrıcalıkları kaldırmasını istiyorsanız, bu, yapmak istediğiniz her şeyi kapsayan bir saklı yordam oluşturarak yapılabilir. Prosedürün gövdesi içinde, GRANTifadeyi dinamik SQL ile oluşturursunuz ve / veya hibe tablolarını doğrudan kendiniz değiştirebilirsiniz.
Gelen Veritabanı Yöneticileri bu son soruya tanım gereği hemen hemen, diğer kullanıcıların ise değiştirebileceği bir kullanıcıyı değil -, afiş normalde yapılabilecek bir şey değil elbette diğer kullanıcıları, değiştirmek için ayrıcalığı olmayan bir kullanıcı için yeteneği istedi ayrıcalıksız bir kullanıcı - ancak - saklı yordamlar bu durumda iyi bir çözüm sağladı, çünkü DEFINERkullanıcının güvenlik bağlamında çalışırlar EXECUTEve yordamda ayrıcalığa sahip olan herkesin , belirli şeyleri yapmalarına izin vermek için geçici olarak yükseltilmiş ayrıcalıklar üstlenmesine izin verirler. prosedür tamamlanır.
SHOW DATABASES?
SHOW DATABASESher zaman tüm kullanıcılar için izin verilir; ancak, döndürülen tek veritabanı information_schema, kullanıcının başka herhangi bir (veya diğer tüm) veritabanları üzerinde herhangi bir izni olmadığı sürece, bu durumda bunlar da listeye dahil edilir.
GRANT SELECT ON *.* TO 'user'@'localhost' IDENTIFIED BY 'password';
Bu, SELECTGörünümler dahil tüm veritabanı için ayrıcalıklı bir kullanıcı yaratacaktır .
Bir kullanıcıya verebileceğiniz çeşitli izinler şunlardır:
ALL PRIVILEGES- This would allow a MySQL user all access to a designated database (or if no database is selected, across the system)
CREATE- allows them to create new tables or databases
DROP- allows them to them to delete tables or databases
DELETE- allows them to delete rows from tables
INSERT- allows them to insert rows into tables
SELECT- allows them to use the Select command to read through databases
UPDATE- allow them to update table rows
GRANT OPTION- allows them to grant or remove other users' privileges
Belirli bir kullanıcıya izin vermek için bu çerçeveyi kullanabilirsiniz:
GRANT [type of permission] ON [database name].[table name] TO ‘[username]’@'localhost’;
Bu makaleyi çok yararlı buldum
Burada bulduğum adım adım kılavuz .
MySQL için salt okunur bir veritabanı kullanıcı hesabı oluşturmak için
Bir UNIX isteminde, MySQL komut satırı programını çalıştırın ve aşağıdaki komutu yazarak yönetici olarak oturum açın:
mysql -u root -p
Kök hesabın parolasını yazın. Mysql komut isteminde aşağıdaki adımlardan birini yapın:
Kullanıcıya herhangi bir ana bilgisayardan veritabanına erişim vermek için aşağıdaki komutu yazın:
grant select on database_name.* to 'read-only_user_name'@'%' identified by 'password';
Toplayıcı, veritabanıyla aynı ana bilgisayara kurulacaksa, aşağıdaki komutu yazın:
grant select on database_name.* to 'read-only_user_name' identified by 'password';
Bu komut, kullanıcıya yalnızca yerel ana bilgisayardan veritabanına salt okunur erişim sağlar. Toplayıcının yükleneceği ana bilgisayarın ana bilgisayar adını veya IP adresini biliyorsanız, aşağıdaki komutu yazın:
grant select on database_name.* to 'read-only_user_name'@'host_name or IP_address' identified by 'password';
Ana bilgisayar adı, DNS veya yerel ana bilgisayar dosyası tarafından çözülebilir olmalıdır. Mysql komut istemine aşağıdaki komutu yazın:
flush privileges;
Tür quit.
Aşağıda örnek komutların ve onay mesajlarının bir listesi verilmiştir:
mysql> grant select on dbname.* to 'readonlyuser'@'%' identified
by 'pogo$23';
Query OK, 0 rows affected (0.11 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Kullanıcının bile cevabı var ve @Michael - sqlbot gönderisinde çoğu noktayı çok iyi ele almış ancak bir nokta eksik, bu yüzden sadece üstünü çizmeye çalışıyorum.
Basit bir kullanıcıya okuma izni vermek istiyorsanız (Yönetici türü değil) -
GRANT SELECT, EXECUTE ON DB_NAME.* TO 'user'@'localhost' IDENTIFIED BY 'PASSWORD';
Not: EXECUTE burada gereklidir, böylece bir rapor oluşturan bir saklı yordam varsa (birkaç seçme deyimine sahip) kullanıcı verileri okuyabilir.
Localhost'u, kullanıcının DB'ye bağlanacağı belirli IP ile değiştirin.
Ek Okuma İzinleri:
MySQL 8 için not farklıdır
Bunu iki adımda yapmanız gerekir:
CREATE USER 'readonly_user'@'localhost' IDENTIFIED BY 'some_strong_password';
GRANT SELECT, SHOW VIEW ON *.* TO 'readonly_user'@'localhost';
flush privileges;
Görünümün sadece okuma izni verdikten sonra okunmasını istiyorsanız, DDL tanımını görünümünüzde ALGORITHM = TEMPTABLE'ı kullanabilirsiniz.
SHOW VIEWdeğildirSHOW_VIEW, ancak bir kullanıcınınSHOW CREATE VIEWgörünümler üzerinde yapabilmesini istemediğiniz sürece bunu bir kullanıcıya vermenize gerek yoktur ... yalnızcaSELECTayrıcalığa sahip görünümler arasından seçim yapabilirler . "Tüm okuma işlemlerini hibe olarak grupla" ile ne demek istiyorsun?