mysql怎麼刪除root用戶

青灯夜游
發布: 2022-01-24 16:43:07
原創
4435 人瀏覽過

mysql刪除root用戶的方法:1、使用「CREATE USER」語句建立一個與root用戶權限一樣的用戶;2、使用「drop user」語句刪除root用戶,語法「DROP USER root用戶帳號」。

mysql怎麼刪除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 -h127.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影片教學

以上是mysql怎麼刪除root用戶的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!