共计 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 小编每天都会为大家更新不同的知识点。