细聊MySQL的安全机制
MySQL作为系统的数据库,在安全性方面有非常高的要求。如果一个系统的数据库被非法进入或窃听,则系统的数据将受到非常严重的威胁,轻则数据、密码被盗,重则导致整个系统瘫痪。所以数据库的安全对于系统来说是非常重要的。 本文将从MySQL的服务器启动与客户
MySQL作为系统的数据库,在安全性方面有非常高的要求。如果一个系统的数据库被非法进入或窃听,则系统的数据将受到非常严重的威胁,轻则数据、密码被盗,重则导致整个系统瘫痪。所以数据库的安全对于系统来说是非常重要的。
本文将从MySQL的服务器启动与客户端访问、操作及链路三方面来阐述MySQL的安全机制。
一、MySQL的服务器启动与客户端访问。
1、服务器启动,启动服务器在安全方面的影响主要是启动它的用户。默认情况下,MySQL不允许使用root账号启动。我们应该建立一个只能操作MySQL安装目录与数据目录的非交互式账号来运行mysqld服务器。另外,服务器最好针对指定客户机开放,应将服务器置于iptables后,如果过让任意主机都能通过telnet的方式连线到服务器,也将是不安全的。telnet的测试方式为shell > telnet ip(服务器的ip)3306(服务器的默认端口)
2、客户端访问,使用bin/mysql客户端工具登录时可以通过配置文件及直接在命令行添加参数两种方式。在登录时,我们需要使用密码才能进入,然而MySQL在安装后默认root账号是没有密码的。所以我们首先需要为root设置密码。如果root没有设置密码,那么可以通过以下方式设置:
2.1 shell > bin/mysql —user=root —host=127.0.0.1,回车后应该进入到mysql客户端的交互界面。
2.2 mysql > set password for ‘root’@‘127.0.0.1’ = password(’你设置的明文密码’)。这样127.0.0.1下的root密码就设置好了。需要注意的是,MySQL的登入账号不仅仅是用户名,而是用户名+IP或域名的方式确认唯一一个连线的。所以,如果该服务器的IP是192.168.1.5,在设置密码时我只设置了’root’@‘127.0.0.1’的密码,那么当用mysql —host=192.168.1.5 —user=root —password=’你设置的明文密码’登录时,会提示错误。所以,如果我们不在服务器本地登陆,那么我们还需要设置密码set password for ‘root’@‘192.168.1.5’=password(’你设置的明文密码’)。 另外一个需要注意的是,在设置密码时,我们使用了password()函数,password函数将明文密码转换成41个字节长的hash值。增加了密码的安全性。
如果我们将密码放置在配置文件中,记得将配置文件的访问权限设置成600或400,你也不想其它用户能够轻易的读到它吧。
二、MySQL操作的授权管理系统安全机制
2.1 MySQL权限管理系统的主要功能是验证客户端用户的登入以及验证该用户具体的对MySQL的操作权限,比如该用户可能只对某个数据库的其中某个表具有update权限和insert权限,那么系统将会禁止TA对其它的表进行写操作。但,以下的事情是权限系统办不到的:
2.1.1、你不能指定具体拒绝登入的用户。
2.1.2、你不能指定一个用户创建或删除一个数据库里的表,但又不让TA创建或删除该表所属的数据库。
2.1.3、用户的密码是全局性的,你不能针对数据库或表来设置密码。
2.2 MySQL将权限分为全局权限与对象权限。所谓的全局权限是与数据库、表、视图等不相干的权限,如密码的设置、用户的创建等。对象权限是相对于全局权限的,也就是与数据库、表、视图、列、索引等一切对象相关的权限。
关于权限的信息存储在mysql数据库中的user、db、tables_priv、columns_priv和prods_priv表里,在服务器启动后,程序会将权限表载入到内存里,客户端连入时会根据权限表验证用户的合法性,当客户端发出请求时,也会根据权限表验证用户操作的合法性。
下面我们可以大致看下我们能控制的具体权限以及这些权限作用的范围和控制权限的列名。
权限 | 控制权限的列名 | 作用范围 |
CREATE | Create_priv | 数据库、表、索引 |
DROP | Drop_priv | 数据库、表、视图 |
LOCK TABLES | Lock_tables_priv | 数据库 |
REFERENCES | References_priv | 数据库、表 |
EVENT | Event_priv | 数据库 |
ALTER | Alter_priv | 表 |
DELETE | Delete_priv | 表 |
INDEX | Index_priv | 表 |
INSERT | Insert_priv | 表、列 |
SELECT | Select_priv | 表、列 |
UPDATE | Update_priv | 表、列 |
CREATE TEMPORARY TABLES | Create_tmp_table_priv | 表 |
TRIGGER | Trigger_priv | 表 |
CREATE VIEW | Create_view_priv | 视图 |
SHOW VIEW | Show_view_priv | 视图 |
CREATE TABLESPACE | Create_tablespace_priv | 全局 |
CREATE USER | Create_user_priv | 全局 |
PROCESS | Process_priv | 全局 |
PROXY | see proxies_priv table | 全局 |
RELOAD | Reload_priv | 全局 |
REPLICATION CLIENT | Repl_client_priv | 全局 |
REPLICATION SLAVE | Repl_slave_priv | 全局 |
SHOW DATABASES | Show_db_priv | 全局 |
SHUTDOWN | Shutdown_priv | 全局 |
SUPER | Super_priv | 全局 |
ALL [PRIVILEGES] |
全局 | |
USAGE | 全局 |
我们可以根据上表进行相应的权限设置。要设置权限,首先得知道我们设置的用户的当前的权限。利用下面的命令可知:
mysql > show grants for ‘user’@‘ip’;
再次强调下,虽然使用show grants for ‘user’;也可以显示,但’user’@‘ip’才代表mysql的一个唯一用户。调用命令后将显示如下结果:
GRANT USAGE ON *.* TO 'wangwei'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' WITH MAX_QUERIES_PER_HOUR 20
USAGE是上表中的最后一行的值,是一个全局权限,只是代表能够进入到数据库。
*.*第一个*代表数据库名,第二个*代表表名。
IDENTIFIED BY后是密码
WITH后是权限参数,这里是限制每小时最多查询20次
然后开始设置我们自己的权限,如想设置某个表某列的查询权限则命令如下:
mysql > grant select(列名) on 数据库名.表名 to ‘用户名’@‘IP’;
这样,该用户即有指定列的查询权限了。
2.3 密码过期策略。如果你想让mysql用户隔一段时间设置一次密码,可用以下方法。
mysql > alter user ‘user’@‘ip’ password expire; 使该用户密码立即失效
mysql > alter user ‘user’@‘ip’ password expire interval 90 day; 每隔90天密码需要重设一次
mysql > alter user ‘user’@‘ip’ password expire never; 密码永不过期
还可以通过配置文件设置密码的默认过期时间如:
[mysqld]
default_password_lifetime=180
三、链路通讯安全。客户端通过网路与服务器通讯,除传输登录验证信息外还请求具体的数据库操作。所以服务器与客户端之间数据的保密性与完整性是非常重要的。这里,我们通过SSL来保证数据的安全性。
要使用SSL,需要MySQL服务器支持SSL协议。使用mysql > show variables like ‘have_ssl’;可以查询MySQL是否支持SSL。如果显示YES则该服务器正以SSL协议在运行。如果显示DISABLED则表示服务器支持SSL,但是没有开启SSL。如果显示其它,则表示MySQL服务器不支持SSL。需要重新下载新版本的MySQL或重新编译,启动SSL功能。本人所用的是MySQL 5.6的二进制版本,默认是支持SSL的。下面介绍下具体的配置方法。
配置SSL只需要四个参数ssl、ssl-ca、ssl-cert、ssl-key。ssl表明启动SSL功能。ssl-ca为CA证书的位置。ssl-cert为由CA签名的服务器证书所在位置。ssl-key为服务器的私钥位置。如果对CA及X509比较熟悉的朋友应该很好理解,这几个参数的作用。对不不理解的朋友最好去学习下CA认证与SSL协议的原理。不管你是否熟悉SSL。按照以下步骤应该也可以配置好安全链路的MySQL通讯。
下面介绍下具体的实现步骤:
1、下载和安装openssl。下载地址为http://www.openssl.org/source/。可以下载最新版openssl-1.0.1j.tar.gz。我就是用的最新版本。
安装方法:
shell > tar zxvf openssl-1.0.1j.tar.gz
shell > cd openssl-1.0.1j && ./config --prefix=/usr/local — openssldir=/usr/local/openssl
shell > make
shell > make install
安装后在/usr/local/bin下可找到openssl的命令。上面是很简单的源码编译安装方法,不用详细解释了。按照以上步骤应该可以安装好openssl。
2、建立CA证书
shell > mkdir newcerts && cd newcerts
shell > openssl genrsa 2048 > ca-key.pem 建立CA私钥
shell > openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca-cert.pem 建立CA根证书
3、建立CA签名的服务器证书及私钥
shell > openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem 建立服务器证书请求文件及服务器私钥
shell > openssl rsa -in server-key.pem -out server-key.pem 加密私钥
shell > openssl x509 -req -in server-req.pem -days 3600 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem 签名服务器证书
生成的ca-cert.pem用于ssl-ca参数
生成的server-cert.pem用于ssl-cert参数
生成的server-key.pem用于ssl-key参数
服务器运行命令如下
mysqld —user=mysql —ssl —ssl-ca=/path/ca-cert.pem —ssl-cert=/path/server-cert.pem —ssl-key=/path/server-key.pem
客户端也可以创建SSL证书进行双向验证,也可以不做设置直接连接到服务器。运行后可用mysql > show variables like ‘have_ssl’;验证。如果结果显示YES。代表SSL设置成功。否则需要调试看看是什么问题。
如果出现问题,首先可以用shell> openssl verify -CAfile ca-cert.pem server-cert.pem看看证书是否正确生成。如果仍然有问题需要看下mysqld运行用户是否有权限读取证书。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 1) 데이터베이스 및 테이블 작성 : CreateAbase 및 CreateTable 명령을 사용하십시오. 2) 기본 작업 : 삽입, 업데이트, 삭제 및 선택. 3) 고급 운영 : 가입, 하위 쿼리 및 거래 처리. 4) 디버깅 기술 : 확인, 데이터 유형 및 권한을 확인하십시오. 5) 최적화 제안 : 인덱스 사용, 선택을 피하고 거래를 사용하십시오.

다음 단계를 통해 phpmyadmin을 열 수 있습니다. 1. 웹 사이트 제어판에 로그인; 2. phpmyadmin 아이콘을 찾고 클릭하십시오. 3. MySQL 자격 증명을 입력하십시오. 4. "로그인"을 클릭하십시오.

MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템으로, 주로 데이터를 신속하고 안정적으로 저장하고 검색하는 데 사용됩니다. 작업 원칙에는 클라이언트 요청, 쿼리 해상도, 쿼리 실행 및 반환 결과가 포함됩니다. 사용의 예로는 테이블 작성, 데이터 삽입 및 쿼리 및 조인 작업과 같은 고급 기능이 포함됩니다. 일반적인 오류에는 SQL 구문, 데이터 유형 및 권한이 포함되며 최적화 제안에는 인덱스 사용, 최적화 된 쿼리 및 테이블 분할이 포함됩니다.

MySQL은 성능, 신뢰성, 사용 편의성 및 커뮤니티 지원을 위해 선택됩니다. 1.MYSQL은 효율적인 데이터 저장 및 검색 기능을 제공하여 여러 데이터 유형 및 고급 쿼리 작업을 지원합니다. 2. 고객-서버 아키텍처 및 다중 스토리지 엔진을 채택하여 트랜잭션 및 쿼리 최적화를 지원합니다. 3. 사용하기 쉽고 다양한 운영 체제 및 프로그래밍 언어를 지원합니다. 4. 강력한 지역 사회 지원을 받고 풍부한 자원과 솔루션을 제공합니다.

Redis는 단일 스레드 아키텍처를 사용하여 고성능, 단순성 및 일관성을 제공합니다. 동시성을 향상시키기 위해 I/O 멀티플렉싱, 이벤트 루프, 비 블로킹 I/O 및 공유 메모리를 사용하지만 동시성 제한 제한, 단일 고장 지점 및 쓰기 집약적 인 워크로드에 부적합한 제한이 있습니다.

MySQL 및 SQL은 개발자에게 필수적인 기술입니다. 1.MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템이며 SQL은 데이터베이스를 관리하고 작동하는 데 사용되는 표준 언어입니다. 2.MYSQL은 효율적인 데이터 저장 및 검색 기능을 통해 여러 스토리지 엔진을 지원하며 SQL은 간단한 문을 통해 복잡한 데이터 작업을 완료합니다. 3. 사용의 예에는 기본 쿼리 및 조건 별 필터링 및 정렬과 같은 고급 쿼리가 포함됩니다. 4. 일반적인 오류에는 구문 오류 및 성능 문제가 포함되며 SQL 문을 확인하고 설명 명령을 사용하여 최적화 할 수 있습니다. 5. 성능 최적화 기술에는 인덱스 사용, 전체 테이블 스캔 피하기, 조인 작업 최적화 및 코드 가독성 향상이 포함됩니다.

데이터베이스 및 프로그래밍에서 MySQL의 위치는 매우 중요합니다. 다양한 응용 프로그램 시나리오에서 널리 사용되는 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 1) MySQL은 웹, 모바일 및 엔터프라이즈 레벨 시스템을 지원하는 효율적인 데이터 저장, 조직 및 검색 기능을 제공합니다. 2) 클라이언트 서버 아키텍처를 사용하고 여러 스토리지 엔진 및 인덱스 최적화를 지원합니다. 3) 기본 사용에는 테이블 작성 및 데이터 삽입이 포함되며 고급 사용에는 다중 테이블 조인 및 복잡한 쿼리가 포함됩니다. 4) SQL 구문 오류 및 성능 문제와 같은 자주 묻는 질문은 설명 명령 및 느린 쿼리 로그를 통해 디버깅 할 수 있습니다. 5) 성능 최적화 방법에는 인덱스의 합리적인 사용, 최적화 된 쿼리 및 캐시 사용이 포함됩니다. 모범 사례에는 거래 사용 및 준비된 체계가 포함됩니다

SQL 데이터베이스 구축에는 10 단계가 필요합니다. DBMS 선택; DBMS 설치; 데이터베이스 생성; 테이블 만들기; 데이터 삽입; 데이터 검색; 데이터 업데이트; 데이터 삭제; 사용자 관리; 데이터베이스 백업.
