首頁 > 資料庫 > mysql教程 > mysql資料庫的超級管理員名稱是什麼

mysql資料庫的超級管理員名稱是什麼

青灯夜游
發布: 2023-01-06 15:42:12
原創
5075 人瀏覽過

mysql資料庫的超級管理員名稱是「root」。 MySQL在安裝時,會預設創建一個名為root的用戶,該用戶擁有超級權限,可以控制整個MySQL伺服器。 root使用者擁有很高的權限,不僅可以修改自己的密碼,還可以修改其他使用者的密碼。

mysql資料庫的超級管理員名稱是什麼

本教學操作環境:windows7系統、java8版、DELL G3電腦。

mysql資料庫的超級管理員名稱是「root」。

MySQL 在安裝時,會預設建立一個名為 root 的用戶,該用戶擁有超級權限,可以控制整個 MySQL 伺服器。

在對MySQL 的日常管理和操作中,為了避免有人惡意使用root 用戶控制資料庫,我們通常會創建一些具有適當權限的用戶,盡可能地不用或少用root 用戶登入系統,以此來確保資料的安全存取。

一般root超級管理員的權限會比一般使用者的權限大很多,所以有些操作要root權限才能運作。

root 使用者擁有很高的權限,不僅可以修改自己的密碼,還可以修改其他使用者的密碼。

MySQL修改root密碼

在 MySQL 中,root 使用者擁有很高的權限,因此必須保證 root 使用者密碼的安全性。修改 root 使用者密碼的方式有很多種,本節將介紹幾種常用的修改 root 使用者密碼的方法。

  • 修改MySQL資料庫的user表

#因為所有帳號資訊都保存在user 表中,因此可以直接透過修改user 表來改變root 使用者的密碼。

root 使用者登入 MySQL 伺服器後,可以使用 UPDATE 語句修改 MySQL 資料庫的 user 表的 authentication_string 字段,從而修改使用者的密碼。

使用 UPDATA 語句修改 root 使用者密碼的語法格式如下:

UPDATE mysql.user set authentication_string = PASSWORD ("rootpwd) WHERE User = "root" and Host="localhost";
登入後複製

新密碼必須使用 PASSWORD() 函數來加密。執行UPDATE語句後,需要執行FLUSH PRIVILEGES語句重新載入使用者權限。

  • 使用SET語句修改root使用者的密碼

#SET PASSWORD 語句可以用來重新設定其他使用者的登入密碼或自己使用的帳戶的密碼。使用SET 語句修改密碼的語法結構如下:

SET PASSWORD = PASSWORD ("rootpwd");
登入後複製

MySQL root修改一般使用者密碼

  • 使用SET語句修改一般使用者的密碼

#在MySQL 中,只有root 使用者可以透過更新MySQL 資料庫來變更密碼。使用 root 使用者登入 MySQL 伺服器後,可以使用 SET 語句來修改一般使用者密碼。語法格式如下:

SET PASSWORD FOR 'username'@'hostname' = PASSWORD ('newpwd');
登入後複製

其中,username 參數是一般使用者的使用者名,hostname 參數是普通使用者的主機名,newpwd 是要變更的新密碼。

注意:新密碼必須使用 PASSWORD() 函數來加密,如果不使用 PASSWORD() 加密,也會執行成功,但使用者會無法登入。

如果是一般使用者修改密碼,可省略 FOR 子句來變更自己的密碼。語法格式如下:

SET PASSWORD = PASSWORD('newpwd');
登入後複製

範例1

root 使用者登入MySQL 伺服器後,再使用SET 語句將testuser 使用者的密碼修改為“newpwd”,SQL 語句和執行結果如下:

mysql> SET PASSWORD FOR 'testuser'@'localhost' = PASSWORD("newpwd");
Query OK, 0 rows affected, 1 warning (0.01 sec)
登入後複製

由運行結果可以看出,SET 語句執行成功,testuser 使用者的密碼成功設定為「newpwd」。

  • 使用UPDATE語句修改一般使用者的密碼

#使用root 使用者登入MySQL 伺服器後,可以使用UPDATE 語句修改MySQL 資料庫的user 表的authentication_string 字段,從而修改普通用戶的密碼。 UPDATA 語句的語法如下:

UPDATE MySQL.user SET authentication_string = PASSWORD("newpwd") WHERE User = "username" AND Host = "hostname";
登入後複製

其中,username 參數是一般使用者的使用者名,hostname 參數是一般使用者的主機名,newpwd 是要變更的新密碼。

注意,執行 UPDATE 語句後,需要執行 FLUSH PRIVILEGES 語句重新載入使用者權限。

範例3

使用root 使用者登入MySQL 伺服器,再使用UPDATE 語句將testuser 使用者的密碼修改為「newpwd2」的SQL 語句和執行結果如下:

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)
登入後複製

由運行結果可以看出,密碼修改成功。 testuser 的密碼被修改成 newpwd2。使用 FLUSH PRIVILEGES 重新載入權限後,就可以使用新的密碼登入 testuser 使用者了。

刪除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資料庫的超級管理員名稱是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板