Nama pentadbir super pangkalan data MySQL ialah "root". kebenaran yang tinggi, bukan sahaja Anda boleh menukar kata laluan anda sendiri, dan anda juga boleh menukar kata laluan pengguna lain.
Sistem pengendalian tutorial ini: sistem Windows 10, mysql versi 8.0, komputer Dell G3.
Nama pentadbir super pangkalan data mysql ialah "root"
Apabila MySQL dipasang, pengguna bernama root akan dicipta secara lalai Pengguna ini mempunyai keistimewaan super dan boleh mengawal keseluruhan pelayan MySQL.
Dalam pengurusan dan operasi harian MySQL, untuk mengelakkan seseorang daripada berniat jahat menggunakan pengguna root untuk mengawal pangkalan data, kami biasanya mencipta beberapa pengguna dengan kebenaran yang sesuai dan menggunakan pengguna root itu sedikit atau sesedikit mungkin untuk log masuk kepada sistem untuk memastikan keselamatan data.
Secara amnya, kebenaran pentadbir super root jauh lebih besar daripada pengguna biasa, jadi sesetengah operasi memerlukan kebenaran root untuk dijalankan.
Pengguna root mempunyai kebenaran yang sangat tinggi dan bukan sahaja boleh menukar kata laluannya sendiri, tetapi juga kata laluan pengguna lain.
MySQL menukar kata laluan root
Dalam MySQL, pengguna root mempunyai kebenaran yang sangat tinggi, jadi keselamatan kata laluan pengguna root mesti dipastikan. Terdapat banyak cara untuk menukar kata laluan pengguna root Bahagian ini akan memperkenalkan beberapa kaedah yang biasa digunakan untuk menukar kata laluan pengguna root.
Ubah suai jadual pengguna pangkalan data MySQL
Oleh kerana semua maklumat akaun disimpan dalam jadual pengguna, anda boleh menukar kata laluan pengguna root secara langsung dengan mengubah suai jadual pengguna.
Selepas pengguna root log masuk ke pelayan MySQL, anda boleh menggunakan pernyataan KEMASKINI untuk mengubah suai medan authentication_string bagi jadual pengguna pangkalan data MySQL untuk mengubah suai kata laluan pengguna.
1. Format sintaks menggunakan pernyataan UPDATA untuk mengubah suai kata laluan pengguna akar adalah seperti berikut:
UPDATE mysql.user set authentication_string = PASSWORD ("rootpwd) WHERE User = "root" and Host="localhost";
Kata laluan baharu mesti disulitkan menggunakan fungsi PASSWORD(). Selepas melaksanakan kenyataan UPDATE, anda perlu melaksanakan kenyataan FLUSH PRIVILEGES untuk memuatkan semula kebenaran pengguna.
2. Gunakan penyata SET untuk menukar kata laluan pengguna root Penyataan SET PASSWORD boleh digunakan untuk menetapkan semula kata laluan log masuk pengguna lain atau kata laluan akaun yang anda gunakan. Struktur sintaks menggunakan pernyataan SET untuk menukar kata laluan adalah seperti berikut:
SET PASSWORD = PASSWORD ("rootpwd");MySQL root menukar kata laluan pengguna biasa
1. Gunakan pernyataan SET untuk menukar kata laluan pengguna biasa
Dalam MySQL , hanya pengguna root boleh menukar kata laluan dengan mengemas kini pangkalan data MySQL. Selepas log masuk ke pelayan MySQL sebagai pengguna akar, anda boleh menggunakan pernyataan SET untuk mengubah suai kata laluan pengguna biasa. Format sintaks adalah seperti berikut:
SET PASSWORD FOR 'username'@'hostname' = PASSWORD ('newpwd');
Antaranya, parameter nama pengguna ialah nama pengguna pengguna biasa, parameter nama hos ialah nama hos pengguna biasa, dan newpwd ialah kata laluan baharu yang akan ditukar.
Nota: Kata laluan baharu mesti disulitkan menggunakan fungsi PASSWORD() Jika ia tidak disulitkan menggunakan PASSWORD(), ia akan berjaya dilaksanakan, tetapi pengguna tidak akan dapat log masuk.
2 Jika pengguna biasa menukar kata laluannya, dia boleh meninggalkan klausa FOR untuk menukar kata laluannya. Format sintaks adalah seperti berikut:
SET PASSWORD = PASSWORD('newpwd');
Contoh 1
Selepas pengguna root log masuk ke pelayan MySQL, gunakan pernyataan SET untuk menukar kata laluan pengguna penguji kepada "newpwd". berikut:
mysql> SET PASSWORD FOR 'testuser'@'localhost' = PASSWORD("newpwd"); Query OK, 0 rows affected, 1 warning (0.01 sec)
Seperti yang dapat dilihat daripada keputusan yang sedang dijalankan, Penyataan SET dilaksanakan dengan jayanya, dan kata laluan pengguna penguji berjaya ditetapkan kepada "newpwd".
3 Gunakan pernyataan KEMASKINI untuk menukar kata laluan pengguna biasa
Selepas log masuk ke pelayan MySQL sebagai pengguna akar, anda boleh menggunakan pernyataan KEMASKINI untuk mengubah suai medan authentication_string bagi jadual pengguna pangkalan data MySQL untuk menukar kata laluan pengguna biasa. Sintaks pernyataan UPDATA adalah seperti berikut:
UPDATE MySQL.user SET authentication_string = PASSWORD("newpwd") WHERE User = "username" AND Host = "hostname";
Antaranya, parameter nama pengguna ialah nama pengguna pengguna biasa, parameter nama hos ialah nama hos pengguna biasa, dan newpwd ialah kata laluan baharu yang akan ditukar.
Perhatikan bahawa selepas melaksanakan kenyataan KEMASKINI, anda perlu melaksanakan kenyataan FLUSH PRIVILEGES untuk memuatkan semula kebenaran pengguna.
Contoh 3
Gunakan pengguna root untuk log masuk ke pelayan MySQL, dan kemudian gunakan pernyataan KEMASKINI untuk menukar kata laluan pengguna penguji kepada "newpwd2". dapat dilihat daripada keputusan yang dijalankan bahawa kata laluan telah berjaya ditukar. Kata laluan penguji telah ditukar kepada newpwd2. Selepas memuatkan semula kebenaran menggunakan FLUSH PRIVILEGES, anda boleh log masuk ke pengguna penguji dengan kata laluan baharu.
Padam pengguna root lalai MySQLAnalisis keperluan:Kata laluan akar muncul di banyak tempat, seperti dokumen teknikal yang dikongsi, e-mel, tangkapan skrin
Akar nama akaun pentadbir lalai untuk pemasangan MySQL terkenal untuk meningkatkan keselamatan, anda perlu menukar nama pengguna, seperti superuser, atau satu dengan ciri syarikat Contohnya, xxx_admin.Langkah Balas:Mula-mula buat pengguna dengan kebenaran yang sama seperti pengguna rootmysql> 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)Padam. pengguna akar lalai
GRANT ALL PRIVILEGES ON *.* TO 'x_admin'@'127.0.0.1' IDENTIFIED BY 'xxxx';Akaun pengguna: Formatnya ialah nama_pengguna'@'nama_hos. Nama_pengguna di sini ialah nama pengguna, dan nama_hos ialah nama hos, iaitu nama hos yang digunakan oleh pengguna untuk menyambung ke 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()
Atas ialah kandungan terperinci Apakah nama pentadbir super pangkalan data mysql?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!