共計 5585 個字符,預計需要花費 14 分鐘才能閱讀完成。
這篇文章主要介紹“mysql 數據庫的超級管理員密碼怎么修改”的相關知識,丸趣 TV 小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“mysql 數據庫的超級管理員密碼怎么修改”文章能幫助大家解決問題。
mysql 數據庫的超級管理員名稱是“root”。MySQL 在安裝時,會默認創建一個名為 root 的用戶,該用戶擁有超級權限,可以控制整個 MySQL 服務器。root 用戶擁有很高的權限,不僅可以修改自己的密碼,還可以修改其他用戶的密碼。
mysql 數據庫的超級管理員名稱是“root”。
MySQL 在安裝時,會默認創建一個名為 root 的用戶,該用戶擁有超級權限,可以控制整個 MySQL 服務器。
在對 MySQL 的日常管理和操作中,為了避免有人惡意使用 root 用戶控制數據庫,我們通常創建一些具有適當權限的用戶,盡可能地不用或少用 root 用戶登錄系統,以此來確保數據的安全訪問。
一般 root 超級管理員的權限會比一般用戶的權限大很多,所以有些操作要 root 權限才能運行。
root 用戶擁有很高的權限,不僅可以修改自己的密碼,還可以修改其他用戶的密碼。
MySQL 修改 root 密碼
在 MySQL 中,root 用戶擁有很高的權限,因此必須保證 root 用戶密碼的安全。修改 root 用戶密碼的方式有很多種,本節將介紹幾種常用的修改 root 用戶密碼的方法。
修改 MySQL 數據庫的 user 表
因為所有賬戶信息都保存在 user 表中,因此可以直接通過修改 user 表來改變 root 用戶的密碼。
root 用戶登錄到 MySQL 服務器后,可以使用 UPDATE 語句修改 MySQL 數據庫的 user 表的 authentication_string 字段,從而修改用戶的密碼。
使用 UPDATA 語句修改 root 用戶密碼的語法格式如下:
UPDATE mysql.user set authentication_string = PASSWORD (rootpwd) WHERE User = root and Host= localhost
新密碼必須使用 PASSWORD() 函數來加密。執行 UPDATE 語句后,需要執行 FLUSH PRIVILEGES 語句重新加載用戶權限。
使用 SET 語句修改 root 用戶的密碼
SET PASSWORD 語句可以用來重新設置其他用戶的登錄密碼或者自己使用的賬戶的密碼。使用 SET 語句修改密碼的語法結構如下:
SET PASSWORD = PASSWORD (rootpwd
MySQL root 修改普通用戶密碼
使用 SET 語句修改普通用戶的密碼
在 MySQL 中,只有 root 用戶可以通過更新 MySQL 數據庫來更改密碼。使用 root 用戶登錄到 MySQL 服務器后,可以使用 SET 語句來修改普通用戶密碼。語法格式如下:
SET PASSWORD FOR username @ hostname = PASSWORD (newpwd
其中,username 參數是普通用戶的用戶名,hostname 參數是普通用戶的主機名,newpwd 是要更改的新密碼。
注意:新密碼必須使用 PASSWORD() 函數來加密,如果不使用 PASSWORD() 加密,也會執行成功,但是用戶會無法登錄。
如果是普通用戶修改密碼,可省略 FOR 子句來更改自己的密碼。語法格式如下:
SET PASSWORD = PASSWORD(newpwd
示例 1
root 用戶登錄 MySQL 服務器后,再使用 SET 語句將 testuser 用戶的密碼修改為“newpwd”,SQL 語句和運行結果如下:
mysql SET PASSWORD FOR testuser @ localhost = PASSWORD( newpwd
Query OK, 0 rows affected, 1 warning (0.01 sec)
由運行結果可以看出,SET 語句執行成功,testuser 用戶的密碼被成功設置為“newpwd”。
使用 UPDATE 語句修改普通用戶的密碼
使用 root 用戶登錄 MySQL 服務器后,可以使用 UPDATE 語句修改 MySQL 數據庫的 user 表的 authentication_string 字段,從而修改普通用戶的密碼。UPDATA 語句的語法如下:
UPDATE MySQL.user SET authentication_string = PASSWORD(newpwd) WHERE User = username AND Host = hostname
其中,username 參數是普通用戶的用戶名,hostname 參數是普通用戶的主機名,newpwd 是要更改的新密碼。
注意,執行 UPDATE 語句后,需要執行 FLUSH PRIVILEGES 語句重新加載用戶權限。
示例 3
使用 root 用戶登錄 MySQL 服務器,再使用 UPDATE 語句將 testuser 用戶的密碼修改為“newpwd2”的 SQL 語句和運行結果如下:
mysql UPDATE MySQL.user SET authentication_string = PASSWORD (newpwd2)
- WHERE User = testuser AND Host = localhost
Query OK, 1 row affected, 1 warning (0.07 sec)
Rows matched: 1 Changed: 1 Warnings: 1
mysql FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.03 sec)
由運行結果可以看出,密碼修改成功。testuser 的密碼被修改成了 newpwd2。使用 FLUSH PRIVILEGES 重新加載權限后,就可以使用新的密碼登錄 testuser 用戶了。
刪除 MySQL 的默認 root 用戶
需求分析:
root 密碼在多個地方出現過, 比如分享的技術文檔, 郵件, 截圖.
MySQL 默認安裝的管理員帳號名稱 root, 眾所周知. 為了增強安全性, 需要更換一個用戶名稱, 例如換成 superuser, 或者有公司特色的. 例如 xxx_admin.
應對策略:
首先創建一個與 root 用戶權限一樣的用戶.
GRANT ALL PRIVILEGES ON *.* TO x_admin @ 127.0.0.1 IDENTIFIED BY xxxx
刪除默認的 root 用戶.
drop user root@ 127.0.0.1
drop user root@ localhost
drop user root@ ::1
用戶賬號:
格式為 user_name @ host_name。
這里的 user_name 是用戶名,host_name 為主機名,即用戶連接 MySQL 時所用主機的名字。
如果在創建的過程中,只給出了用戶名,而沒指定主機名,那么主機名默認為“%”,表示一組主機,即對所有主機開放權限。
注意問題:
1、視圖
曾經用 root 帳號為 DEFINER 的視圖, 如果將 root 刪除, 將提示該視圖無法使用, 沒有權限. 所以要注意提前查看是否存在視圖, 存在的話, 需要修改該視圖的 DEFINER 屬性.
修改視圖, 是瞬間就能完成的操作, 除非該視圖被其他 sql 語句占用, 處于鎖定的狀態.
查看視圖
select TABLE_SCHEMA, TABLE_NAME, VIEW_DEFINITION, DEFINER from information_schema.VIEWS;
修改視圖 (非 root 的暫不修改)
ALTER DEFINER=`x_admin`@`127.0.0.1` SQL SECURITY DEFINER VIEW v_name AS...
2、存儲過程 / 函數
情況與視圖類似
查看存儲過程 / 視圖
select ROUTINE_SCHEMA,ROUTINE_NAME,ROUTINE_TYPE,DEFINER from information_schema.ROUTINES;
或者
select db,name,type,definer from mysql.proc;
修改存儲例程, 可直接修改 mysql.proc
update mysql.proc set definer= x_admin@127.0.0.1
where db= db_name
如果修改所有庫
update mysql.proc set definer= x_admin@127.0.0.1
2、用 root 用戶連接 MySQL 的腳本
此類問題比較好解決, 可單獨為腳本創建帳號用來執行腳本中指定的操作, 該用戶名可用 script_, 或者腳本名命名. 權限夠用就行, 不要分配過多的權限.
4、方法: 一個增加用戶的腳本.(配合批量執行)
#!/usr/bin/python
#-*- coding: UTF-8 -*-
# ########################################################################
# This program
# Version: 2.0.0 (2012-10-10)
# Authors: lianjie.ning@qunar.com
# History:
# ########################################################################
import os
import socket
import subprocess
import sys
import traceback
from ConfigParser import ConfigParser
class Finger(object):
finger.py
def __init__ (self):
print ---- %s, %s % (socket.gethostname(), self.__doc__)
def load_config (self, file= finger.ini):
if not os.path.exists(file):
print file, is not exists, but is created, please fix it
temp_ini = [conn_db]
login_pwd =
exec_sql =
open(file, w).write(temp_ini)
os.chmod(file, 0600)
sys.exit()
config = ConfigParser()
config.read(file)
if config.has_section(conn_db) is True:
if config.has_option(conn_db , login_pwd) is True:
login_pwd = config.get(conn_db , login_pwd)
if config.has_option(conn_db , exec_sql) is True:
exec_sql = config.get(conn_db , exec_sql)
return (login_pwd, exec_sql)
def grant_user(self, login_pwd, exec_sql):
if os.path.exists(/usr/local/bin/mysql):
mysql = /usr/local/bin/mysql
elif os.path.exists(/usr/bin/mysql):
mysql = /usr/bin/mysql
elif os.path.exists(/bin/mysql):
mysql = /bin/mysql
else:
print command not fount of mysql
sys.exit()
user = xxxx
conn_port = [3306,3307,3308,3309,3310]
for i in conn_port:
ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
address = (127.0.0.1 , int(i))
status = ss.connect_ex(address)
ss.settimeout(3)
ss.close()
if status == 0:
conn_mysql = %s -u%s -p%s -h227.0.0.1 -P%d -N -s -e %s % (mysql, user, login_pwd, i, exec_sql)
p = subprocess.call(conn_mysql, shell=True, stdout=open( /dev/null))
if p == 0:
print ---- checking port: %s is NORMAL % i
else:
print ---- checking prot: %s is ERROR % i
if __name__ == __main__ :
try:
process = Finger()
(login_pwd, exec_sql) = process.load_config()
process.grant_user(login_pwd, exec_sql)
except Exception, e:
print str(e)
traceback.print_exc()
sys.exit()
關于“mysql 數據庫的超級管理員密碼怎么修改”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注丸趣 TV 行業資訊頻道,丸趣 TV 小編每天都會為大家更新不同的知識點。