共计 3502 个字符,预计需要花费 9 分钟才能阅读完成。
本文丸趣 TV 小编为大家详细介绍“mysql 删除 root 用户的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“mysql 删除 root 用户的方法是什么”文章能帮助大家解决疑惑,下面跟着丸趣 TV 小编的思路慢慢深入,一起来学习新知识吧。
mysql 删除 root 用户的方法:1、使用“CREATE USER”语句创建一个与 root 用户权限一样的用户;2、使用“drop user”语句删除 root 用户,语法“DROP USER root 用户账号”。
本教程操作环境:windows7 系统、mysql8 版本、Dell G3 电脑。
删除 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 删除 root 用户的方法是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注丸趣 TV 行业资讯频道。