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

2023-01-06 18:00:23

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

本教學操作環境: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='[email protected]'where db='db_name';
登入後複製

如果修改所有庫

update mysql.proc set definer='[email protected]';
登入後複製

2、用root使用者連線MySQL的指令碼

此類問題比較好解決,可單獨為指令碼建立帳號用來執行指令碼中指定的操作,該使用者名稱可用script_,或者指令碼名命名.許可權夠用就行,不要分配過多的許可權.

4、方法:一個增加使用者的指令碼.(配合批次執行)

#!/usr/bin/python
#-*- coding: UTF-8 -*-
# ########################################################################
# This program
# Version: 2.0.0 (2012-10-10)
# Authors: [email protected]
# 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資料庫的超級管理員名稱是什麼的詳細內容,更多請關注TW511.COM其它相關文章!