mysql 데이터베이스의 최고 관리자 이름은 "root"입니다. MySQL이 설치되면 기본적으로 root라는 사용자가 생성됩니다. 이 사용자는 슈퍼 권한을 가지며 전체 MySQL 서버를 제어할 수 있습니다. 루트 사용자는 매우 높은 권한을 가지며 자신의 비밀번호를 변경할 수 있을 뿐만 아니라 다른 사용자의 비밀번호도 변경할 수 있습니다.
이 튜토리얼의 운영 환경: windows7 시스템, java8 버전, DELL G3 컴퓨터.
mysql 데이터베이스의 최고 관리자 이름은 "root"입니다.
MySQL이 설치되면 기본적으로 root라는 사용자가 생성됩니다. 이 사용자는 슈퍼 권한을 가지며 전체 MySQL 서버를 제어할 수 있습니다.
MySQL의 일상적인 관리 및 운영에 있어서 누군가 루트 사용자를 악의적으로 이용하여 데이터베이스를 제어하는 것을 방지하기 위해 일반적으로 적절한 권한을 가진 일부 사용자를 생성하고 루트 사용자를 사용하여 로그인하는 경우가 많습니다. 데이터 보안을 보장하기 위해 시스템에 접근합니다.
일반적으로 루트 최고 관리자의 권한은 일반 사용자의 권한보다 훨씬 높으므로 일부 작업을 실행하려면 루트 권한이 필요합니다.
루트 사용자는 매우 높은 권한을 가지며 자신의 비밀번호뿐만 아니라 다른 사용자의 비밀번호도 변경할 수 있습니다.
MySQL에서는 루트 사용자는 매우 높은 권한을 가지므로 루트 사용자 비밀번호의 보안이 보장되어야 합니다. 루트 사용자 비밀번호를 변경하는 방법에는 여러 가지가 있습니다. 이 섹션에서는 루트 사용자 비밀번호를 변경하는 데 일반적으로 사용되는 몇 가지 방법을 소개합니다.
MySQL 데이터베이스의 사용자 테이블을 수정합니다
모든 계정 정보는 사용자 테이블에 저장되므로 사용자 테이블을 수정하여 루트 사용자의 비밀번호를 직접 변경할 수 있습니다.
루트 사용자가 MySQL 서버에 로그인한 후 UPDATE 문을 사용하여 MySQL 데이터베이스 사용자 테이블의 인증_문자열 필드를 수정하여 사용자 비밀번호를 수정할 수 있습니다.
루트 사용자 비밀번호를 수정하기 위해 UPDATA 문을 사용하는 구문 형식은 다음과 같습니다.
UPDATE mysql.user set authentication_string = PASSWORD ("rootpwd) WHERE User = "root" and Host="localhost";
새 비밀번호는 PASSWORD() 함수를 사용하여 암호화해야 합니다. UPDATE 문을 실행한 후 FLUSH PRIVILEGES 문을 실행하여 사용자 권한을 다시 로드해야 합니다.
루트 사용자의 비밀번호를 변경하려면 SET 문을 사용하세요.
SET PASSWORD 문을 사용하면 다른 사용자의 로그인 비밀번호나 자신이 사용하는 계정의 비밀번호를 재설정할 수 있습니다. SET 문을 사용하여 비밀번호를 변경하는 구문 구조는 다음과 같습니다.
SET PASSWORD = PASSWORD ("rootpwd");
SET 문을 사용하여 일반 사용자의 비밀번호를 변경합니다
MySQL에서는 루트 사용자만 MySQL 데이터베이스 변경 비밀번호를 업데이트할 수 있습니다. MySQL 서버에 루트 사용자로 로그인한 후 SET 문을 사용하여 일반 사용자 비밀번호를 수정할 수 있습니다. 구문 형식은 다음과 같습니다.
SET PASSWORD FOR 'username'@'hostname' = PASSWORD ('newpwd');
이 중 username 매개변수는 일반 사용자의 사용자 이름, 호스트 이름 매개변수는 일반 사용자의 호스트 이름, newpwd는 변경할 새 비밀번호입니다.
참고: 새 비밀번호는 PASSWORD() 함수를 사용하여 암호화해야 합니다. PASSWORD()를 사용하여 암호화하지 않으면 성공적으로 실행되지만 사용자는 로그인할 수 없습니다.
일반 사용자가 비밀번호를 변경하는 경우 FOR 절을 생략하여 비밀번호를 변경할 수 있습니다. 구문 형식은 다음과 같습니다.
SET PASSWORD = PASSWORD('newpwd');
예제 1
루트 사용자가 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 문을 사용하세요.
MySQL 서버에 루트 사용자로 로그인한 후 UPDATE 문을 사용하여 사용자 테이블의 인증 문자열 필드를 수정할 수 있습니다. 일반 사용자의 비밀번호를 변경하려면 MySQL 데이터베이스를 사용하세요. UPDATA 문의 구문은 다음과 같습니다.
UPDATE MySQL.user SET authentication_string = PASSWORD("newpwd") WHERE User = "username" AND Host = "hostname";
그 중 username 매개변수는 일반 사용자의 사용자 이름이고, hostname 매개변수는 일반 사용자의 호스트 이름이며, newpwd는 변경할 새 비밀번호입니다.
UPDATE 문을 실행한 후 사용자 권한을 다시 로드하려면 FLUSH PRIVILEGES 문을 실행해야 합니다.
예제 3
루트 사용자를 사용하여 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의 기본 설치 루트의 관리자 계정 이름, 우리 모두 알고 있듯이 보안을 강화하려면 슈퍼유저 또는 회사별 사용자 이름을 변경해야 합니다.
대책:
먼저 사용자를 생성하세요. 루트 사용자와 동일한 권한 .
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!