健全安全机制

健全安全机制,第1张

细聊MySQL的安全机制

MySQL作为系统的数据库,对安全性的要求非常高。如果一个系统的数据库被非法访问或窃听,系统的数据将受到严重威胁,轻则数据和密码被盗,重则整个系统瘫痪。因此,数据库的安全性对系统来说至关重要。


本文将从服务器启动、客户端访问、 *** 作、链接三个方面来阐述MySQL的安全机制。


一、MySQL的服务器启动和客户端访问。
1。服务器启动时,启动服务器的安全影响主要是启动它的用户。默认情况下,MySQL不允许以root帐号启动。我们要设置一个只能 *** 作MySQL安装目录和数据目录的非交互账号来运行mysqld服务器。另外,服务器最好对指定的客户端开放,而且要放在iptables后面。如果任何主机都可以通过telnet连接到服务器,那就不安全了。Telnet通过shell测试>:Telnet(服务器的IP)3306(服务器的默认端口)
2。对于客户端访问,可以使用bin/mysql客户端工具通过配置文件登录,直接在命令行添加参数。登录时,我们需要使用密码才能进入。但是,安装MySQL后,默认的root帐户没有密码。所以我们首先需要为root设置一个密码。如果root不设置密码,可以通过以下方式设置:
2.1shell>:Bin/MySQL—user=root—host=127.0.0.1。按回车键后,应该进入MySQL客户端的交互界面。
2.2MySQL>;'root'@'127.0.0.1'=password('您设置的明文密码')。这样就设置了127.0.0.1下的root密码。需要注意的是,MySQL的登录账号不仅仅是用户名,而是唯一以用户名+IP或域名的方式连接的。所以,如果这台服务器的IP是192.168.1.5,而我在设置密码时只设置了'root'root'@'127.0.0.1''的密码,那么就用MySQL-host=192.168.1.5-user=root-password='你设置的明文密码'登录。所以,如果我们不在服务器本地登录,那么我们还需要设置密码setpassword为'root'@'192.168.1.5'=password('您设置的明文密码')。另外需要注意的是,在设置密码时,我们使用password()函数,它将明文密码转换成41字节的哈希值。增加了密码的安全性。
如果我们把密码放在配置文件里,记得把配置文件的访问权限设置为600或者400,你不希望其他用户轻易读取。

二。MySQL *** 作授权管理系统的安全机制
2.1MySQL权限管理系统的主要功能是验证客户端用户的登录以及用户 *** 作MySQL的具体权限。例如,这个用户可能只对数据库中的一个表具有update权限和insert权限,因此系统将禁止TA写入其他表。但是,下面这些事情是权限系统做不到的:
2.1.1。您不能指定拒绝登录的特定用户。
2.您不能指定用户创建或删除数据库中的表,但您不会让TA创建或删除该表所属的数据库。
2.用户的密码是全局的,您不能为数据库或表设置密码。

2.2MySQL将权限分为全局权限和对象权限。所谓全局权限,就是与数据库、表、视图等无关的权限。,比如设置密码,创建用户。对象权限是相对于全局权限而言的,即与数据库、表、视图、列和索引等所有对象相关的权限。
关于权限的信息存储在mysql数据库的user、db、tables_priv、columns_priv和prods_priv表中。服务器启动后,程序会将权限表加载到内存中,客户端在连接进来时会根据权限表验证用户的合法性,当客户端提出请求时,也会根据权限表验证用户的 *** 作。
下面,我们可以大致看一下我们可以控制的具体权限,这些权限的范围以及控制权限的列名。


permission 控制权限的列名 范围 。 create create_priv 数据库,表,索引 DROP Drop_priv 数据库,表,视图 locktables lock_tables_priv database references references_priv 数据库,表 EVENT Event_priv 数据库 ALTER ALTER_priv table delete delete_priv 表 INDEX Index_priv 表 insert insert_priv 表,列 select select_priv 表,列 update update_priv 表,列 创建临时表 create_tmp_table_priv table trigger trigger_priv 表 创建视图 create_view_priv 视图 showview show_view_priv view 创建表空间 create_tablespace_priv global 创建用户 create_user_priv global process process_priv global proxy seeproxy_privtable global Reload Reload_Priv Global 复制客户端 repl_client_priv global 复制从属服务器 repl_slave_priv global 显示数据库 show_db_priv global shutdown shutdown_priv global SUPER SUPER_priv global 所有[特权]

全局 用法
全局


我们可以根据上表设置相应的权限。要设置权限,首先要知道我们设置的用户当前的权限。使用以下命令:
MySQL>:showgrantsfor'user'@'IP';
同样,尽管使用了“用户”的showgrants也可以显示,但是'user'@'IP'代表mysql的唯一用户。调用该命令后,将显示以下结果:
在*上授予使用权。*to'WangWei'@'%'identifiedbypassword'*bb4837EB74329105ee4568DDA7DC67ed2ca2ad9'withmax_queries_per_hour20

Usage是上表最后一行的值。这是一个全局权限,只意味着您可以访问数据库。
*。*第一个*代表数据库名,第二个*代表表名。由标识的
后跟密码
,后跟权限参数。在这里,最大查询时间限制为每小时20次

,然后我们开始设置自己的权限。如果我们要设置某个表或列的查询权限,命令如下:
MySQL>;数据库名称上的Grant(列名)。表名改为“用户名”@“IP”;
这样,用户就拥有了指定列的查询权限。

2.3密码过期策略。如果希望mysql用户每隔一段时间设置一次密码,可以使用以下方法。
MySQL>;更改用户'user'@'ip'密码过期;立即使用户密码失效
MySQL>:更改用户'user'@'ip'密码过期间隔90天;密码需要每90天重置一次
MySQL>:alteruser'user'@'IP'passwordexpirenever;密码永不过期
还可以通过
[mysqld]
default_password_lifetime=180

等配置文件设置密码的默认过期时间三、链接通信安全。客户端通过网络与服务器通信,除了传输登录验证信息之外,还请求特定的数据库 *** 作。因此,服务器和客户端之间数据的机密性和完整性非常重要。在这里,我们使用SSL来确保数据的安全性。
要使用SSL,需要MySQL服务器支持SSL协议。使用MySQL>:显示类似‘have_SSL’的变量;可以查询MySQL是否支持SSL。如果显示“是”,则服务器正在使用SSL协议运行。如果显示DISABLED,则表示服务器支持SSL,但SSL未打开。如果显示“其他”,则表明MySQL服务器不支持SSL。你需要下载一个新版本的MySQL或者重新编译它来启动SSL功能。我用的是MySQL5.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>:tarzxvfOpenSSL-1.0.1j.tar.gz
shell>;OpenSSL-1.0.1j&;&。/config-prefix=/usr/local-OpenSSLdir=/usr/local/OpenSSL
shell>;创建
shell>;Makeinstall
安装后可以在/usr/local/bin下找到openssl的命令。以上是非常简单的源代码编译安装方法,无需赘述。按照上面的步骤,您应该能够安装openssl。2.
。建立CA证书
shell>:mkdirnewcerts&;&CDnewcerts
shell>;opensslgenrsa2048>ca-key.pem建立CA私钥
shell>:Opensslreq-new-x509-nodes-days3600-keyCA-key.PEM-outca-cert.PEM建立CA的根证书

3.建立由CA
shell>签名的服务器证书和私钥:Opensslreq-newkeyrsa:2048-days3600-nodes-keyuserver-key.PEM-outserver-req.PEM建立服务器证书请求文件和服务器私钥
shell>:OpensslRSA-inserver-key.PEM-outserver-key.PEM加密私钥
shell>:Openssl509-req-inserver-req.PEM-day服务器运行命令如下[/Br/]mysqld—user=mysql—SSL—SSL-CA=/path/CA-cert.PEM—SSL-cert=/path/server-cert.PEM—SSL-key=/path/server-key.PEM[/Br/][/Br/]客户端运行后也可以使用MySQL>:显示类似'have_ssl'的变量;验证。如果结果显示是。这意味着SSL设置成功。否则,您需要进行调试,看看问题出在哪里。
如果有问题,可以先用shell>:Opensslverify-cafileca-cert.pemserver-cert.PEM查看证书是否生成正确。如果仍然有问题,您需要查看运行mysqld的用户是否有权限读取证书。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/783951.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存