Veritabanına ** tüm ** ayrıcalıklar tanıma


611

Ben veritabanı oluşturdum, örneğin 'mydb'.

CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER 'myuser'@'%' IDENTIFIED BY PASSWORD '*HASH';
GRANT ALL ON mydb.* TO 'myuser'@'%';
GRANT ALL ON mydb TO 'myuser'@'%';
GRANT CREATE ON mydb TO 'myuser'@'%';
FLUSH PRIVILEGES;

Şimdi her yerden veritabanına giriş yapabilirim, ancak tablo oluşturamıyorum.

Bu veritabanındaki ve (gelecekte) tablolardaki tüm ayrıcalıkların nasıl tanınacağı. 'MDB' veritabanında tablolar oluşturamıyorum. Her zaman:

CREATE TABLE t (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin);
ERROR 1142 (42000): CREATE command denied to user 'myuser'@'...' for table 't'

10
CURRENT_USER İÇİN TEŞVİK GÖSTERİRSİNİZ;
diagonalbatman

5
Kaçmayı denedin FLUSH PRIVILEGESmi?
Romain

1
@Andy "CURRENT_USER İÇİN HİBELERİ GÖSTER" için teşekkürler; - bu benim yazım hatalarını görmeme yardım ediyor.
marioosh

2
@Romain, komutları flush privilegeskullandığınızda gerekli değildir grant. x4
Pacerier

2
Sen kullanmalısınız FLUSH PRIVILEGES;doğrudan gibi ifadeleri kullanarak hibe tabloları değiştirirseniz sadece INSERT, UPDATEyaDELETE
simhumileco

Yanıtlar:


910
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' WITH GRANT OPTION;

"Süper Kullanıcı" ayrıcalıklarımı bu şekilde oluşturuyorum (normalde bir ana bilgisayar belirtsem de).

ÖNEMLİ NOT

Bu yanıt erişim sorununu çözse de , diğer kullanıcıların izinlerini düzenleyebilenWITH GRANT OPTION bir MySQL kullanıcısı oluşturur .

HİBE SEÇENEK ayrıcalığı, sahip olduğunuz ayrıcalıkları diğer kullanıcılara vermenize veya diğer kullanıcılardan kaldırmanıza olanak tanır.

Güvenlik nedeniyle, bu tür kullanıcı hesabını, halkın erişebileceği hiçbir işlem (yani bir web sitesi) için kullanmamalısınız. Bu tür kullanım için yalnızca veritabanı ayrıcalıklarına sahip bir kullanıcı oluşturmanız önerilir .


35
@Romain burada tabloya gerçekten çok fazla getirmiyorsunuz - kullanıcılarıma kullanıcı adı vermiyorum - soru soran, örnek olarak bir kullanıcı adı kullanıyordu - tutarlılık için aynı örnek kullanıcı adını kullandım.
diagonalbatman

22
Yeterince adil. Ancak bu soruları daha sonra okuyabilen diğer insanları, muhtemelen yeni başlayanları da düşünmek gerekir. SO'nun noktası da değil mi?
Romain

7
Ben de bu cevabın iyi olduğunu düşünmüyorum. Tüm veritabanlarında ve tüm tablolarda "yönetici" ayrıcalıkları verir, bu sorulan şey değildir.
daks

5
Bu cevabı mydb demek için düzenledim. * Yerine . , bu kadar yaygın bir şekilde gözden geçirilmiş ve görüntülenen bir cevap olduğundan ve özellikle MySQL gibi cilalı bir baca ile güvenliğin son derece önemli olduğuna inanıyorum. Bir okuyucunun cevabın ayrıntılarını kopyalayıp yapıştırmak yerine araştıracağını umuyorum, ama ara sıra gerçekte yaşamayı seviyorum.
Ürdün

4
@Romain Bir MySQL sunucusu kuran kullanıcılar myuser, kendi özel kullanıcı adlarıyla değiştirilmeleri gerektiğini anlayacak kadar zekiler .
AStopher

524

Bu eski bir soru ama kabul edilen cevabın güvenli olduğunu düşünmüyorum. Süper bir kullanıcı oluşturmak iyidir, ancak tek bir veritabanında ayrıcalık vermek istiyorsanız iyi değildir.

grant all privileges on mydb.* to myuser@'%' identified by 'mypasswd';
grant all privileges on mydb.* to myuser@localhost identified by 'mypasswd';

%soket iletişimlerini kapsamıyor gibi görünüyor localhost. WITH GRANT OPTIONyalnızca süper kullanıcı için iyidir, aksi takdirde genellikle bir güvenlik riskidir.

MySQL 5.7+ için güncelleme şu konuda uyarıyor gibi görünüyor:

İmtiyazlar dışındaki mevcut kullanıcının özelliklerini değiştirmek için GRANT deyimi kullanıldığında kullanımdan kaldırılmıştır ve gelecekteki sürümlerde kaldırılacaktır. Bu işlem için ALTER USER deyimini kullanın.

Bu yüzden parola ayarı ayrı komutlarla yapılmalıdır. @ Scary-wombat yorum yaptığınız için teşekkür ederiz.

ALTER USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
ALTER USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';

Bu yardımcı olur umarım.


26
WITH GRANT OPTIONTümü yerine belirli bir veritabanını dahil etmemek ve hedeflemek için +1 ( *).
Adonis K.Kakoulidis

@IanBussieres "%, soket iletişimini kapsamıyor gibi görünüyor, localhost için olduğu" belirsizdir. Bu aslında ne anlama geliyor?
2014'te Thufir

2
@Thufir, ara unix sockets. localhostLinux üzerinde myslq istemcisi kullanırken sunucuya TCP bağlantısı yerine bir unix soketi kullanmaya çalışıyor.
akostadinov

1
Dış IP adreslerinden veya yerel alt ağdaki diğer bilgisayarlardan erişmek istemiyorsanız, muhtemelen ilk komuta ihtiyacınız olmadığını unutmayın. Bunu yaparsanız, genel olarak myuser @% yerine myuser@192.168.0.1 (yerel alt ağda bir tane için) gibi izin vermek istediğiniz belirli IP adreslerini hedefleyen komutları kullanmanızı öneririm.
Evan Donovan

1
mysql> ALTER USER 'root' @ 'localhost' 'new_password' İLE TANIMLANMIŞ;
Korkunç Wombat

121

Bu bazı insanlar için yararlı olacaktır:

MySQL komut satırından:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

Ne yazık ki, bu noktada newuser'ın veritabanlarıyla hiçbir şey yapma izni yok. Aslında, eğer yeni kullanıcı giriş yapmayı denerse (şifre, şifre ile), MySQL kabuğuna erişemezler.

Bu nedenle, yapılacak ilk şey kullanıcıya ihtiyaç duyacağı bilgilere erişim sağlamaktır.

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

Bu komuttaki yıldız işaretleri erişebilecekleri veritabanına ve tabloya (sırasıyla) işaret eder; bu özel komut kullanıcının tüm veritabanları ve tablolardaki tüm görevleri okumasına, düzenlemesine, yürütmesine ve gerçekleştirmesine olanak tanır.

Yeni kullanıcılarınız için ayarlamak istediğiniz izinleri tamamladıktan sonra, her zaman tüm ayrıcalıkları yeniden yüklediğinizden emin olun.

FLUSH PRIVILEGES;

Yaptığınız değişiklikler şimdi geçerli olacak.

Daha fazla bilgi için: http://dev.mysql.com/doc/refman/5.6/en/grant.html

Komut satırından memnun değilseniz MySQL çalışma tezgahı , Navicat veya SQLyog gibi bir istemci kullanabilirsiniz


5
flush privilegesgrantkomutları kullandığınızda gerekmez . x4
Pacerier


Tekrar tanımlamak gerekiyordu GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost' IDENTIFIED BY 'my_password' WITH GRANT OPTION;(garip ..., ama gerçek)
rubo77

30

 1. Veritabanını oluşturun

CREATE DATABASE db_name;

 2. db_name veritabanı için kullanıcı adı oluşturun

GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' IDENTIFIED BY 'password';

 3. Veritabanını kullanın

USE db_name;

 4. Son olarak db_name veritabanındasınız ve oluşturma, seçme ve ekleme işlemleri gibi komutları yürütün.


Bugün bana "Ayrıcalıklar dışındaki mevcut kullanıcının özelliklerini değiştirmek için GRANT deyimini kullanma onaylanmadı ve gelecekteki sürümde kaldırılacak. Bu işlem için ALTER USER deyimini kullanın." Öyleyse bir kullanıcı oluşturmam gerektiğini, sonra da ayrıcalıklar tanımam gerektiğini anlamalıyım?
18'de felwithe

MySQL'e usernametüm ayrıcalıklara sahip olması gerektiğini, db_nameancak ayrıcalığa sahip olmamasını nasıl söyleyebilirsiniz DROP db_name;?
Mart'ta tonix

21

Bu SQL tüm veritabanlarına ve sadece temel ayrıcalıklara sahiptir. Drupal veya Wordpress için yeterlidir ve bir incelik olarak, yerel projeler için bir geliştirici hesabına izin verir.

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, 
    INDEX, ALTER, CREATE TEMPORARY TABLES 
ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';

20
GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY 'mypasswd';

Şemada ayrıcalıklar için çalışır :)

İsteğe bağlı: mypasswdekledikten sonraWITH GRANT OPTION


15

Her GRANT OPTIONzaman izin reddedildi hatası almadan, yalnızca ekleyerek çalıştırabilirim

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost' WITH GRANT OPTION;

14

Merhaba ben mysql süper kullanıcı için bu kodu kullanılır

GRANT EXECUTE, PROCESS, SELECT, SHOW DATABASES, SHOW VIEW, ALTER, ALTER ROUTINE,
    CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP,
    EVENT, INDEX, INSERT, REFERENCES, TRIGGER, UPDATE, CREATE USER, FILE,
    LOCK TABLES, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHUTDOWN,
    SUPER
        ON *.* TO mysql@'%'
    WITH GRANT OPTION;

ve sonra

FLUSH PRIVILEGES;

11
flush privilegesgrantkomutları kullandığınızda gerekmez . x4
Pacerier

Not: Tam liste GRANTMySQL Sürümleri arasında değişir.
Rick James

6

Uzak sunucudan yalnızca mydb veritabanına erişmek için

GRANT ALL PRIVILEGES ON mydb.* TO 'root'@'192.168.2.21';

Uzak sunucudan tüm veritabanlarına erişmek için.

GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.2.21';

4

Veritabanındaki tüm ayrıcalıkları vermek için: mydbkullanıcıya: myuseryürütmeniz yeterlidir:

GRANT ALL ON mydb.* TO 'myuser'@'localhost';

veya:

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';

PRIVILEGESAnahtar kelime gerekli değildir.

Ayrıca diğer cevapların neden IDENTIFIED BY 'password'komutun sonuna konulmasını önerdiğini bilmiyorum . Bunun gerekli olmadığına inanıyorum.

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.