Izinkan pengguna root linux root mysql tanpa akses

28

Pada cPanel ketika saya login sebagai root dan ketik "mysql" tanpa nama host dan kata sandi itu memberi saya akses langsung ke pengguna root mysql.

Saya ingin melakukan ini untuk salah satu server non-cpanel saya di mana pengguna root linux mendapatkan lebih sedikit kata sandi login ke pengguna root mysql dengan cara yang sama seperti yang dilakukan pada cPanel.

Apakah ini mungkin?

pengguna1066991
sumber

Jawaban:

53

Cara termudah untuk melakukan ini adalah dengan menggunakan bagian klien dari file ~ / .my.cnf, dan tambahkan kredensial di sana.

[client]
user=root
password=somepassword
...

itu ide yang baik untuk membuat file itu hanya dapat dibaca oleh root juga.

user9517 mendukung GoFundMonica
sumber
1
Ya ini berfungsi dan ini adalah bagaimana cPanel melakukannya
user1066991
9
Saya perlu menunjukkan potensi masalah keamanan .. Anda harus sedikit berhati-hati agar Anda tidak mengedit ini /etc/my.cnfyang digunakan server mysql untuk boot. Jika Anda memasukkan pengguna root mysql di /etc/my.cnfSIAPAPUN dapat menggunakan server mysql dengan SEMUA hak istimewa pada SETIAP database tanpa kata sandi. Iain menunjuk ke arah pengguna shell itu sendiri .my.cnfdi rumah root yang tentu saja benar.
Koen van der Rijt
Bagaimana jika tidak ada file ~ / .my.cnf? Jika saya membuatnya dan memulai kembali mysqld, apakah saya seharusnya dapat melakukan ini?
Amalgovinus
21

Untuk mysql 5.7+, jika Anda menetapkan kata sandi kosong untuk pengaturan awal, mysql akan secara otomatis digunakan auth_socketsebagai strategi. Upaya untuk memperbarui kata sandi tanpa mengubah strategi tidak akan membuahkan hasil. Anda selalu dapat masuk tanpa menggunakan kata sandi jika pengguna Anda root.

Solusi Jalankan perintah berikut untuk mengubah strategi otentikasi dan mengatur kata sandi

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY ''

referensi: https://www.percona.com/blog/2016/03/16/change-user-password-in-mysql-5-7-with-plugin-auth_socket/

chaintng
sumber
3
Saya harus menambahkan string kosong pada akhirnya untuk membuatnya berfungsi:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';
kramer65
Intersting @kramer, hanya berfungsi jika saya menetapkannya sebagai Anda ... BY "";. Terima kasih!
Juan Antonio
Itu mengubah kata sandi menjadi 'ANY_PASSWORD' dan tidak menghapus kata sandi. Untuk menghapus dan login tanpa kata sandi, setel ke string kosong.
Fernando Kosh
7

Pada MySQL 5.6.6, Anda dapat menggunakan mysql_config_editor untuk membuat file terenkripsi yang akan mencatat Anda secara otomatis:

mysql_config_editor set --login-path=client --host=localhost --user=root --password

Kemudian masukkan kata sandi saat diminta.

Catatan: jika kata sandi Anda memiliki '#', dan mungkin karakter lain, gunakan tanda kutip tunggal saat memasukkan kata sandi.

Brian Deterling
sumber
Bisakah Anda menguraikan komentar single-quote? Ini meminta Anda untuk kata sandi pada terminal, apakah Anda membungkus kata sandi dalam tanda kutip tunggal
user2299958
Ya, saya menemukan bahwa memasukkannya tanpa tanda kutip tidak berfungsi jika memiliki karakter khusus. Jadi ketika diminta, cukup masukkan '(kutipan tunggal), lalu kata sandi, lalu'.
Brian Deterling
0

Buat file dengan hanya berisi kata sandi root mysql dan hanya root yang bisa membaca.

# ls -l /root/.mysqlpw 
-rw------- 1 root root 7 2013-08-19 13:24 /root/.mysqlpw

Anda dapat mengimpor basis data dengan

# mysql -u root -p`cat /root/.mysqlpw ` yourdatabase < databasedump.sql

atau terhubung ke database Anda dan mengeluarkan perintah mysql

# mysql -u root -p`cat /root/.mysqlpw ` yourdatabase
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 20460
Server version: 5.1.63-0ubuntu0.10.04.1 (Ubuntu)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| yourdatabase       |
+--------------------+
3 rows in set (0.00 sec)

mysql> show tables;
...
jris198944
sumber
5
Ini jauh lebih berhasil daripada jawaban yang lain. Dan kata sandi Anda terlalu pendek. :)
Michael Hampton
8
Jangan lakukan ini. Ini menempatkan kata sandi pada baris perintah yang dapat dibaca oleh siapa saja ps(1)
camh
Itu benar-benar bukan ide yang baik
Fernando Kosh