Yanıtlar:
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.
MySQL / MariaDB 5.7.6 ve daha yeni sürümlerde kullanıcı oluşturmak için CREATE USER
sö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 GRANT
Sö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;
Yukarıdaki komutları çalıştırmak için, mysql
komut çalıştırmanız ve komut istemine yazmanız, ardından quit
komutla veya Ctrl- oturumunu kapatmanız gerekir D.
Kabuktan çalıştırmak için -e
parametreyi kullanın ( SELECT 1
yukarı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 -p
parametrelere (şifre için) veya uzun dönem için erişim kimlik bilgilerinizi ayarlamak ~/.my.cnf
, örneğin
[client]
user=root
password=root
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?
~/.my.cnf
Yukarıda önerildiği gibi eklerseniz şifreyle çalışır .
MySQL'de oturum açın:
mysql -u root
Şimdi oluşturun ve verin
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
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'
Bu, geliştirme aşamasında önemsiz veriler için iyidir. Bunu önemsediğin bir şeyle yapma.
$ 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.
CREATE USER deyimini kullanarak yeni kullanıcılar oluşturabilir ve GRANT kullanarak onlara hak verebilirsiniz .
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
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';