Le nom du super administrateur de la base de données MySQL est "root". Lorsque MySQL est installé, un utilisateur nommé root sera créé par défaut. Cet utilisateur dispose de super autorisations et peut contrôler l'ensemble du serveur MySQL. autorisations élevées, non seulement vous pouvez modifier votre propre mot de passe, mais vous pouvez également modifier les mots de passe des autres utilisateurs.
Le système d'exploitation de ce tutoriel : système Windows 10, mysql version 8.0, ordinateur Dell G3.
Le nom du super administrateur de la base de données mysql est "root"
Lorsque MySQL est installé, un utilisateur nommé root sera créé par défaut. Cet utilisateur dispose de super privilèges et peut contrôler l'ensemble du serveur MySQL.
Dans la gestion et le fonctionnement quotidiens de MySQL, afin d'empêcher quelqu'un d'utiliser de manière malveillante l'utilisateur root pour contrôler la base de données, nous créons généralement des utilisateurs avec les autorisations appropriées et utilisons le moins possible l'utilisateur root pour se connecter. au système pour assurer la sécurité des données.
En général, les autorisations des super-administrateurs root sont bien supérieures à celles des utilisateurs ordinaires, donc certaines opérations nécessitent des autorisations root pour s'exécuter.
L'utilisateur root dispose d'autorisations très élevées et peut non seulement modifier son propre mot de passe, mais également les mots de passe des autres utilisateurs.
MySQL change le mot de passe root
Dans MySQL, l'utilisateur root dispose d'autorisations très élevées, la sécurité du mot de passe de l'utilisateur root doit donc être assurée. Il existe de nombreuses façons de modifier le mot de passe de l'utilisateur root. Cette section présentera plusieurs méthodes couramment utilisées pour modifier le mot de passe de l'utilisateur root.
Modifier la table utilisateur de la base de données MySQL
Étant donné que toutes les informations de compte sont stockées dans la table utilisateur, vous pouvez changer le mot de passe de l'utilisateur root directement en modifiant la table utilisateur.
Une fois que l'utilisateur root s'est connecté au serveur MySQL, vous pouvez utiliser l'instruction UPDATE pour modifier le champ Authentication_string de la table utilisateur de la base de données MySQL afin de modifier le mot de passe de l'utilisateur.
1. Le format de syntaxe d'utilisation de l'instruction UPDATA pour modifier le mot de passe de l'utilisateur root est le suivant :
UPDATE mysql.user set authentication_string = PASSWORD ("rootpwd) WHERE User = "root" and Host="localhost";
Le nouveau mot de passe doit être crypté à l'aide de la fonction PASSWORD(). Après avoir exécuté l'instruction UPDATE, vous devez exécuter l'instruction FLUSH PRIVILEGES pour recharger les autorisations utilisateur.
2. Utilisez l'instruction SET pour modifier le mot de passe de l'utilisateur root. L'instruction SET PASSWORD peut être utilisée pour réinitialiser le mot de passe de connexion d'autres utilisateurs ou le mot de passe du compte que vous utilisez. La structure syntaxique de l'utilisation de l'instruction SET pour changer le mot de passe est la suivante :
SET PASSWORD = PASSWORD ("rootpwd");La racine MySQL modifie le mot de passe d'un utilisateur ordinaire
1 Utilisez l'instruction SET pour changer le mot de passe d'un utilisateur ordinaire
Dans MySQL. , seul l'utilisateur root peut modifier le mot de passe en mettant à jour la base de données MySQL. Après vous être connecté au serveur MySQL en tant qu'utilisateur root, vous pouvez utiliser l'instruction SET pour modifier le mot de passe de l'utilisateur ordinaire. Le format de syntaxe est le suivant :
SET PASSWORD FOR 'username'@'hostname' = PASSWORD ('newpwd');
Parmi eux, le paramètre username est le nom d'utilisateur d'un utilisateur ordinaire, le paramètre hostname est le nom d'hôte d'un utilisateur ordinaire et newpwd est le nouveau mot de passe à modifier.
Remarque : Le nouveau mot de passe doit être crypté à l'aide de la fonction PASSWORD(). S'il n'est pas crypté à l'aide de PASSWORD(), il sera exécuté avec succès, mais l'utilisateur ne pourra pas se connecter.
2. Si un utilisateur ordinaire change son mot de passe, il peut omettre la clause FOR pour changer son mot de passe. Le format de syntaxe est le suivant :
SET PASSWORD = PASSWORD('newpwd');
Exemple 1
Une fois que l'utilisateur root s'est connecté au serveur MySQL, utilisez l'instruction SET pour changer le mot de passe de l'utilisateur testuser en "newpwd". suit :
mysql> SET PASSWORD FOR 'testuser'@'localhost' = PASSWORD("newpwd"); Query OK, 0 rows affected, 1 warning (0.01 sec)
Comme le montrent les résultats en cours d'exécution, l'instruction SET est exécutée avec succès et le mot de passe de l'utilisateur testuser est défini avec succès sur "newpwd".
3. Utilisez l'instruction UPDATE pour changer le mot de passe d'un utilisateur ordinaire
Après vous être connecté au serveur MySQL en tant qu'utilisateur root, vous pouvez utiliser l'instruction UPDATE pour modifier le champuthentication_string de la table utilisateur de la base de données MySQL pour changer le mot de passe d'un utilisateur ordinaire. La syntaxe de l'instruction UPDATA est la suivante :
UPDATE MySQL.user SET authentication_string = PASSWORD("newpwd") WHERE User = "username" AND Host = "hostname";
Parmi eux, le paramètre username est le nom d'utilisateur de l'utilisateur ordinaire, le paramètre hostname est le nom d'hôte de l'utilisateur ordinaire et newpwd est le nouveau mot de passe à modifier.
Notez qu'après avoir exécuté l'instruction UPDATE, vous devez exécuter l'instruction FLUSH PRIVILEGES pour recharger les autorisations utilisateur.
Exemple 3
Utilisez l'utilisateur root pour vous connecter au serveur MySQL, puis utilisez l'instruction UPDATE pour changer le mot de passe de l'utilisateur test en "newpwd2". L'instruction SQL et les résultats d'exécution sont les suivants :
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)
Cela peut. Les résultats d'exécution montrent que le mot de passe a été modifié avec succès. Le mot de passe de testuser a été remplacé par newpwd2. Après avoir rechargé les autorisations à l'aide de FLUSH PRIVILEGES, vous pouvez vous connecter à l'utilisateur testuser avec le nouveau mot de passe.
Supprimer l'utilisateur root par défaut de MySQLAnalyse des exigences :
Le mot de passe root apparaît à de nombreux endroits, tels que les documents techniques partagés, les e-mails, les captures d'écran
Le nom du compte administrateur par défaut pour l'installation de MySQL est bien connu. Afin d'améliorer la sécurité, vous devez modifier un nom d'utilisateur, tel que superutilisateur, ou un nom avec les caractéristiques de l'entreprise, par exemple xxx_admin.
Contre-mesures :
Créez d'abord un utilisateur avec les mêmes autorisations que l'utilisateur root
GRANT ALL PRIVILEGES ON *.* TO 'x_admin'@'127.0.0.1' IDENTIFIED BY 'xxxx';
Supprimer. l'utilisateur root par défaut
drop user root@'127.0.0.1'; drop user root@'localhost'; drop user root@'::1';
Compte utilisateur :
Le format est user_name'@'host_name.
Le nom d'utilisateur ici est le nom d'utilisateur et le nom d'hôte est le nom d'hôte, qui est le nom de l'hôte utilisé par l'utilisateur pour se connecter à 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';
3、用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()
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!