程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> linux下mysql的用戶管理及訪問問題

linux下mysql的用戶管理及訪問問題

編輯:MySQL綜合教程

1.mysql的安裝配置

linux下有一個很神奇的東西叫yum,只要有源,用yum來安裝是一件非常容易的事,什麼都不用管,它會為你解決好一些軟件依賴的問題。一鍵安裝mysql:

[root@localhost ~]# yum install mysql-server mysql-devel

安裝完成後我們就可以使用mysql了:

[root@localhost ~]# /etc/init.d/mysqld start
Starting mysqld:                                           [  OK  ]
[root@localhost ~]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, 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> create database db_test;
Query OK, 1 row affected (0.02 sec)

mysql> grant all on *.* to "user"@"localhost" identified by "123";
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye

上面的操作都成功了,包括了登錄到mysql,新建數據庫和新建一個用戶,其實在這個過程中我也遇到了幾個問題,花了一些時間,這個後面會說到。先看看mysql的主要配置文件信息:

[root@localhost ~]# cat /etc/my.cnf 
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

datadir=/var/lib/mysql是mysql數據庫的數據庫文件存放位置,我剛才新建的數據庫db_test也在這個目錄下。log-error=/var/log/mysqld.log是數據庫輸出的日志,數據庫日志也是在/var/log目錄下。mysql默認的監聽端口是3306。

2.mysql的用戶管理

安裝好mysql後,mysql會自動提供一個空密碼的root用戶,這個root不是linux的root,而空密碼的root用戶可以這樣登錄:mysql -u root沒有後面的-p,-u是指用戶,-p是指通過密碼登錄,然後就會提示輸入密碼。由於安全起見,剛開始應修改密碼為一個非空密碼,也可以避免以後操作的出錯,因為我遇到了好幾個問題都是和空密碼有聯系的。root修改密碼:

[root@localhost ~]# mysqladmin -u root -p password 123
Enter password: 

將root的密碼改為123,因為我是已經改過root密碼的,所以這裡要加上-p還得輸入原來的密碼。

當然除了root還可以有其他的用戶,mysql中用戶管理是通過一張表mysql.user,其實這也就是一張數據庫表,也是可以通過sql語句來操作的,新建用戶有兩種方式:

mysql> select user, password from mysql.user;      
+------+-------------------------------------------+
| user | password                                  |
+------+-------------------------------------------+
| root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | root                                      |
| root | root                                      |
| user | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
+------+-------------------------------------------+
4 rows in set (0.00 sec)

mysql> grant all on *.* to "test"@"localhost" identified by "123";
Query OK, 0 rows affected (0.00 sec)

mysql> insert into mysql.user(Host, User, Password) values("localhost", "sqluser", password("123"))ser", password("123"));
Query OK, 1 row affected, 3 warnings (0.05 sec)

mysql> select user, password from mysql.user;                                                       
+---------+-------------------------------------------+
| user    | password                                  |
+---------+-------------------------------------------+
| root    | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root    | root                                      |
| root    | root                                      |
| user    | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| test    | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| sqluser | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
+---------+-------------------------------------------+
6 rows in set (0.01 sec)

第一種方式是grant,可以給用戶指定權限,all代表所有的權限,可以改成別的如select,insert,update,delete,後面的*.*代表是所有的數據庫都有權限,一般格式為:數據庫名.*,test是用戶名,123是密碼,localhost代表匹配的主機,也可改為別的,如"",空的,代表所有主機。而第二種方式為直接修改數據庫表,但是沒有指定權限,為了安全起見,應該給用戶相應的權限。查看user信息也是一條sql語句,當然還可以用過select * from mysql.user;查看更多的信息,這裡的密碼是經過加密的。刪除用戶也就是sql語句:delete from mysql.user where user='XXX';。

當然這樣還不行,在操作完user表後,還得加上一條命令flush privileges;刷新系統權限表,不然就算添加的用戶也不能用,刪除的用戶也可以登錄。

3.訪問mysql問題

訪問mysql最常出現問題的就是空密碼,剛開始我為了圖個方便就沒有修改root的密碼,讓它保持空的,但是在後面的操作就老是出現問題,而且是莫名其妙的問題,所以mysql安裝完成後建議將密碼改為非空。

問題1.Access denied for user 'root'@'localhost' (using password: NO)

Access denied for user 'root'@'localhost' (using password: YES)

我沒有修改root密碼,就讓他保持為空的,然後通過mysql -u root來登錄,登錄過幾次之後,莫名其妙的報了using password: NO的錯誤,好吧,那我就通過mysql -u root -p來登錄,不用提示輸入密碼就直接回車,媽蛋還是報了using password: NO的錯誤。那我就該一下密碼吧mysqladmin -u root -p password '123',報了mysqladmin: connect to server at 'localhost' failed,using password: YES的錯誤。

於是通過mysqld_safe的方式啟動,查看了mysql.user的數據,裡面的root密碼的確為空啊,我靠還能不能一起開心的玩耍啊。

在網上搜了一下,很多人也遇到跟我一樣的問題,解決辦法就是修改user表將root的密碼改為非空:

# /etc/init.d/mysql stop
# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
# mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('123') where USER='root';
mysql> FLUSH PRIVILEGES;
mysql> quit
# /etc/init.d/mysqld restart
# mysql -uroot -p
Enter password: <輸入新設的密碼123> 

問題2.ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'db_mysql'

偶然的機會居然用空的root密碼登錄進去了,然後新建數據庫db_mysql,就報了這樣一個錯誤,我明明是root登錄的,怎麼變成空的了,這是個什麼用戶,我根本就沒創建這個用戶啊,然後select * from mysql.user;查看,還真有這樣一個用戶,用戶名和密碼都是空的,可是我root登錄的居然變成了這樣一個空用戶,原因我現在都還沒搞清楚,但是可以想到和root的密碼為空肯定有關系,於是又搜了一下解決辦法,將這個空用戶刪除就OK了:

# service mysqld stop
# mysqld_safe --skip-grant-table
新開一個終端執行
# mysql -u root mysql
mysql> delete from user where USER='';
mysql> FLUSH PRIVILEGES;
mysql> \q

出現這些問題都和密碼為空有關,當我把root密碼改為非空之後,再登錄進行操作就沒有遇到過這些問題了,所以建議安裝好mysql後就修改root密碼。當然登錄的時候密碼輸錯了也會出現using password: YES的錯誤,這個和空密碼無關。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved