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 -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中文網其他相關文章!