MySQL'de yeni kullanıcı oluşturun ve bir veritabanına tam erişim sağlayın


628

MySQL'de yeni bir kullanıcı dbTestoluşturmak ve bunun gibi bir komutla oluşturduğum tek bir veritabanına tam erişim vermek istiyorum create database dbTest;. Bunu yapmak için MySQL komutları ne olurdu?

Yanıtlar:


829

Kullanıcıyı oluşturmak için şunu deneyin:

CREATE USER 'user'@'hostname';

Veritabanına erişim vermek için bunu deneyin dbTest:

GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';

Aynı makinede MySQL'e erişen kodu / siteyi çalıştırıyorsanız, anasistem adı localhost olacaktır.

Şimdi, yıkım.

GRANT - Bu, kullanıcı oluşturmak ve veritabanlarına, tablolara vb. Hak vermek için kullanılan komuttur.

ALL PRIVILEGES- Bu, kullanıcının tüm standart ayrıcalıklara sahip olacağını söyler. Bununla birlikte, GRANT komutunu kullanma ayrıcalığı dahil değildir.

dbtest.*- Bu MySQL'e bu hakları tüm dbtest veritabanında kullanmak için talimatlar. * Seçeneğini belirli tablo adlarıyla değiştirebilir veya isterseniz rutinleri kaydedebilirsiniz.

TO 'user'@'hostname'- 'kullanıcı', oluşturduğunuz kullanıcı hesabının kullanıcı adıdır. Not: Burada tek tırnak işareti bulunmalıdır. 'hostname' MySQL'e kullanıcının hangi bilgisayarlardan bağlanabileceğini söyler. Sadece aynı makineden istiyorsanız,localhost

IDENTIFIED BY 'password' - Tahmin edebileceğiniz gibi, bu kullanıcının şifresini belirler.


82
Ağ erişimine izin veriyorsanız ve herhangi bir ana bilgisayardan bağlantı istiyorsanız 'ana makine adını' '%' olarak değiştirebilirsiniz. Örneğin, ... TO 'dbuser' @ '%' IDENTIFIED ... '%' ev sahibi joker karakteridir.
physicsmichael

17
Kullanıcılar ve tablolar üzerinde çalışırken ayrıcalıkları temizlemeyi unutmayın! :-)
corsiKa 17:12

31
Bu benim için çalıştı: KULLANICI OLUŞTUR 'user1' @ 'localhost' KİMLİK 'parola' İLE KİMLİK; Db_database1 ÜZERİNE TÜM AYRINTILARI VERİN. * 'User1' @ 'localhost' KİMLİĞİ 'parola' ile; SIVA AYRICALIKLARI;
Mohamad Fakih

4
@DanMcGrath: Kullanıcı zaten varsa ve bir parolasına sahipse, 'şifre' yanlısı ile tanımlanır mı?
nanosoft

8
Yeni bir kullanıcı oluşturmak için GRANT kullanımı MySQL'in gelecekteki sürümlerinde kaldırılacaktır (bunu yazarken kullanımdan kaldırılmıştır). Gelecekte iki çağrı ile yapılması gerekecektir: KULLANICI OLUŞTUR ve sonra HİBE.
Darren Felton

325

Sözdizimi

MySQL / MariaDB 5.7.6 ve daha yeni sürümlerde kullanıcı oluşturmak için CREATE USERsözdizimini kullanın :

CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'new_password';

daha sonra veritabanına (ör. my_db) tüm erişimi vermek için GRANTSözdizimi kullanın , ör.

GRANT ALL ON my_db.* TO 'new_user'@'localhost';

Burada ALL( priv_type ) belirli bir ayrıcalık gibi değiştirilebilir SELECT, INSERT, UPDATE, ALTER, vs.

Ardından yeni atanan izinleri yeniden yüklemek için:

FLUSH PRIVILEGES;

yürütme

Yukarıdaki komutları çalıştırmak için, mysqlkomut çalıştırmanız ve komut istemine yazmanız, ardından quitkomutla veya Ctrl- oturumunu kapatmanız gerekir D.

Kabuktan çalıştırmak için -eparametreyi kullanın ( SELECT 1yukarıdaki komutlardan biriyle değiştirin ):

$ mysql -e "SELECT 1"

veya standart girdiden yazdır bildirimi:

$ echo "FOO STATEMENT" | mysql

Eğer var ise erişim engellendi yukarıdaki ile belirtmek -u(kullanıcı için) ve -pparametrelere (şifre için) veya uzun dönem için erişim kimlik bilgilerinizi ayarlamak ~/.my.cnf, örneğin

[client]
user=root
password=root

Kabuk entegrasyonu

MySQL sözdizimine aşina olmayan insanlar için, hatırlanması ve kullanımı kolay kullanışlı kabuk işlevleri vardır (bunları kullanmak için, daha sonra dahil edilen kabuk işlevlerini yüklemeniz gerekir).

İşte örnek:

$ mysql-create-user admin mypass
| CREATE USER 'admin'@'localhost' IDENTIFIED BY 'mypass'

$ mysql-create-db foo
| CREATE DATABASE IF NOT EXISTS foo

$ mysql-grant-db admin foo
| GRANT ALL ON foo.* TO 'admin'@'localhost'
| FLUSH PRIVILEGES

$ mysql-show-grants admin
| SHOW GRANTS FOR 'admin'@'localhost'
| Grants for admin@localhost                                                                                   
| GRANT USAGE ON *.* TO 'admin'@'localhost' IDENTIFIED BY PASSWORD '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4' |
| GRANT ALL PRIVILEGES ON `foo`.* TO 'admin'@'localhost'

$ mysql-drop-user admin
| DROP USER 'admin'@'localhost'

$ mysql-drop-db foo
| DROP DATABASE IF EXISTS foo

Yukarıdaki komutları kullanmak için, aşağıdaki işlevleri kopyalayıp rc dosyanıza yapıştırmanız (örn. .bash_profile) Ve kabuğunuzu yeniden yüklemeniz veya dosyayı kaynaklamanız gerekir. Bu durumda şunu yazın source .bash_profile:

# Create user in MySQL/MariaDB.
mysql-create-user() {
  [ -z "$2" ] && { echo "Usage: mysql-create-user (user) (password)"; return; }
  mysql -ve "CREATE USER '$1'@'localhost' IDENTIFIED BY '$2'"
}

# Delete user from MySQL/MariaDB
mysql-drop-user() {
  [ -z "$1" ] && { echo "Usage: mysql-drop-user (user)"; return; }
  mysql -ve "DROP USER '$1'@'localhost';"
}

# Create new database in MySQL/MariaDB.
mysql-create-db() {
  [ -z "$1" ] && { echo "Usage: mysql-create-db (db_name)"; return; }
  mysql -ve "CREATE DATABASE IF NOT EXISTS $1"
}

# Drop database in MySQL/MariaDB.
mysql-drop-db() {
  [ -z "$1" ] && { echo "Usage: mysql-drop-db (db_name)"; return; }
  mysql -ve "DROP DATABASE IF EXISTS $1"
}

# Grant all permissions for user for given database.
mysql-grant-db() {
  [ -z "$2" ] && { echo "Usage: mysql-grand-db (user) (database)"; return; }
  mysql -ve "GRANT ALL ON $2.* TO '$1'@'localhost'"
  mysql -ve "FLUSH PRIVILEGES"
}

# Show current user permissions.
mysql-show-grants() {
  [ -z "$1" ] && { echo "Usage: mysql-show-grants (user)"; return; }
  mysql -ve "SHOW GRANTS FOR '$1'@'localhost'"
}

Not: Bash geçmişinizde iz (şifreler gibi) bırakmamayı tercih ederseniz, şunları kontrol edin: Komutların bash geçmişinde görünmesini nasıl önleyebilirim?


1
Kullanıcıyı oluşturmanız ve ayrı ayrı ayrıcalıklar vermeniz mi gerekiyor? Hibe komutunun en azından mysql.user tablosuna baktığında kullanıcının kendisini oluşturduğunu gördüm.
Tim

@CreativityKills ~/.my.cnfYukarıda önerildiği gibi eklerseniz şifreyle çalışır .
kenorb

kabuk geçmişinde parola izlerini bırakmak harika bir fikir değil
dmirkitanov

@dmirkitanov Boşluk ekleyerek bunu önleyebilirsiniz, bkz: Bash geçmişinde komutların görünmesi nasıl
1919'da kenorb

58

Bir kullanıcı oluşturmak ve veritabanındaki tüm ayrıcalıkları vermek için.

MySQL'de oturum açın:

mysql -u root

Şimdi oluşturun ve verin

GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';

Anonim kullanıcı (yalnızca yerel testler için)

Alternatif olarak, sadece bir veritabanına tam sınırsız erişim vermek istiyorsanız (örneğin, bir test örneği için yerel makinenizde, anonim kullanıcıya erişim izni verebilirsiniz, örneğin:

GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'

Farkında olmak

Bu, geliştirme aşamasında önemsiz veriler için iyidir. Bunu önemsediğin bir şeyle yapma.


3
Bunun gibi anonim bir kullanıcı oluşturabilirsiniz, ancak yapmayın! Tam ayrıcalıklara ve parolaya sahip olmayan bir kullanıcıya sahip olmanız için iyi bir neden yoktur, ancak bir gün sunucunuza erişmesi gerekmeyen biri varsa bir gün sizi / yılı / iş / işi mahvedebilir. Onlar için neden başka bir şey daha kolay?
Luke Cousins

2
Birisi macbook'uma uzaktan erişim sağladıysa, endişelenmem gereken geliştirme veritabanımın içeriğinden daha fazla şeyim var. Tekrar etmeliyim, bu sadece yerel testler içindir, bunu gerçek verilerle yapmayın.
superluminary

4
Tam olarak, endişelenecek diğer tüm şeylerle, dev veritabanınızın içeriği için de endişelenmeyin. Geliştirme veritabanınızda, güvenli tutmak için her türlü çaba sarf edilmesi gereken canlı veritabanı veri snippet'leri olabilir (örneğin bir hatayı çoğaltmak için). Parola olmadan veritabanı erişimine gerek yoktur. Zamandan bile tasarruf etmiyor. Potansiyel güçlüklere değmez.
Luke Cousins

1
Belki. Benim durumumda bu gereksiz veriler, riskle yaşayacağım.
superluminary

17
$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{host}` identified by '{long-password}'; flush privileges;"

mysql kullanıcısının parolası yoksa -p seçeneğini yoksay veya by-pass yapmak için “[Enter]” düğmesine basın. kıvırcık ayraçlarla çevrili dizelerin gerçek değerlerle değiştirilmesi gerekir.


13

CREATE USER deyimini kullanarak yeni kullanıcılar oluşturabilir ve GRANT kullanarak onlara hak verebilirsiniz .


KULLANICI OLUŞTUR 'jeffrey' @ 'localhost' 'mypass' İLE TANIMLANMIŞ;
cgl

6

Bana göre bu işe yaradı.

CREATE USER 'spowner'@'localhost' IDENTIFIED BY '1234'; 
GRANT ALL PRIVILEGES ON test.* To 'spowner'@'localhost'; 
FLUSH PRIVILEGES;

nerede

  • spowner: kullanıcı adı
  • 1234: Spowner şifresi
  • test: veritabanı 'spowner' erişim hakkına sahiptir

2

Yeni bir kullanıcı oluşturmak istiyorsanız aşağıdaki komut işe yarar.

GRANT ALL PRIVILEGES ON test_database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

Bu, tek bir veritabanına tüm ayrıcalıkları verir test_database(sizin durumunuzda)dbTest , yerel ana bilgisayardaki bir kullanıcıya ) .

Aşağıdaki komutu çalıştırarak yukarıdaki komutun bu kullanıcıya hangi izinleri verdiğini kontrol edin.

SHOW GRANTS FOR 'user'@'localhost'

Her halükarda, kullanıcı erişimini yalnızca tek bir tabloyla sınırlamak istiyorsanız

GRANT ALL ON mydb.table_name TO 'someuser'@'host';

Sözdizimi hatası ve ilk satırınızdaki bir yazım hatası olan "PRIVILEGES ON 'test_datase'", tırnak işareti olmamalı, sonrasında ". *" Olmalıdır, örneğin, test_datase. * Ve bir yazım hatasıdır, "test_database" olmalıdır. ".
Brettins

0

hostParçanın atlanması durumunda, varsayılan olarak %tüm ana bilgisayarlara izin veren joker karakter sembolüne geçer .

CREATE USER 'service-api';

GRANT ALL PRIVILEGES ON the_db.* TO 'service-api' IDENTIFIED BY 'the_password'

SELECT * FROM mysql.user;
SHOW GRANTS FOR 'service-api'
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.