仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 924|回复: 8
打印 上一主题 下一主题

[学习教程] 发一篇详解MySQL数据库平安设置

[复制链接]
只想知道 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 20:09:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
曾经的功能列表可能会迅速变得过时了。而且,有些功能对有的应用程序非常重要,但是对别的应用程序则不一定。MySQL是完整收集化的跨平台干系型数据库体系,同时是具有客户机/服务器系统布局的散布式数据库办理体系。  MySQL是完整收集化的跨平台干系型数据库体系,同时是具有客户机/服务器系统布局的散布式数据库办理体系。它具有功效强、利用烦琐、办理便利、运转速率快、平安牢靠性强等长处,用户可使用很多言语编写会见MySQL数据库的程序,出格是与php更是黄金组合,使用非常普遍。

  因为MySQL是多平台的数据库,它的默许设置要思索各类情形下都能合用,以是在我们本人的利用情况下应当举行进一步的平安加固。作为一个MySQL的体系办理员,我们有义务保护MySQL数据库体系的数据平安性和完全性。

  MySQL数据库的平安设置必需从两个方面动手,体系外部平安和内部收集平安,别的我们还将复杂先容编程时要注重的一些成绩和一些小秘诀。

  体系外部平安

  起首复杂先容一下MySQL数据库目次布局。MySQL安装好,运转了mysql_db_install剧本今后就会创建数据目次和初始化数据库。假如我们用MySQL源码包安装,并且安装目次是/usr/local/mysql,那末数据目次一样平常会是/usr/local/mysql/var。数据库体系由一系列数据库构成,每一个数据库包括一系列数据库表。MySQL是用数据库名在数据目次创建创建一个数据库目次,各数据库表分离以数据库表名作为文件名,扩大名分离为MYD、MYI、frm的三个文件放到数据库目次中。

  MySQL的受权表给数据库的会见供应了天真的权限把持,可是假如当地用户具有对库文件的读权限的话,打击者只需把数据库目次打包拷走,然后拷到本人本机的数据目次下就可以会见夺取的数据库。以是MySQL地点的主机的平安性是最主要的成绩,假如主机不平安,被打击者把持,那末MySQL的平安性也无从谈起。其次就是数据目次和数据文件的平安性,也就是权限设置成绩。

  从MySQL主站一些老的binary刊行版来看,3.21.xx版本中数据目次的属性是775,如许十分伤害,任何当地用户都能够读数据目次,以是数据库文件很不平安。3.22.xx版本中数据目次的属性是770,这类属性也有些伤害,当地的同组用户既能读也能写,以是数据文件也不平安。3.23.xx版本数据目次的属性是700,如许就对照好,只要启动数据库的用户能够读写数据库文件,包管了当地数据文件的平安。
 假如启动MySQL数据库的用户是mysql,那末象以下的目次和文件的是平安的,请注重数据目次及上面的属性:

  shell>ls-l/usr/local/mysql

  total40

  drwxrwxr-x2rootroot4096Feb2720:07bin

  drwxrwxr-x3rootroot4096Feb2720:07include

  drwxrwxr-x2rootroot4096Feb2720:07info

  drwxrwxr-x3rootroot4096Feb2720:07lib

  drwxrwxr-x2rootroot4096Feb2720:07libexec

  drwxrwxr-x3rootroot4096Feb2720:07man

  drwxrwxr-x6rootroot4096Feb2720:07mysql-test

  drwxrwxr-x3rootroot4096Feb2720:07share

  drwxrwxr-x7rootroot4096Feb2720:07sql-bench

  drwx------4mysqlmysql4096Feb2720:07var

  shell>ls-l/usr/local/mysql/var

  total8

  drwx------2mysqlmysql4096Feb2720:08mysql

  drwx------2mysqlmysql4096Feb2720:08test

  shell>ls-l/usr/local/mysql/var/mysql

  total104

  -rw-------1mysqlmysql0Feb2720:08columns_PRiv.MYD

  -rw-------1mysqlmysql1024Feb2720:08columns_priv.MYI

  -rw-------1mysqlmysql8778Feb2720:08columns_priv.frm

  -rw-------1mysqlmysql302Feb2720:08db.MYD

  -rw-------1mysqlmysql3072Feb2720:08db.MYI

  -rw-------1mysqlmysql8982Feb2720:08db.frm

  -rw-------1mysqlmysql0Feb2720:08func.MYD

  -rw-------1mysqlmysql1024Feb2720:08func.MYI

  -rw-------1mysqlmysql8641Feb2720:08func.frm

  -rw-------1mysqlmysql0Feb2720:08host.MYD

  -rw-------1mysqlmysql1024Feb2720:08host.MYI

  -rw-------1mysqlmysql8958Feb2720:08host.frm

  -rw-------1mysqlmysql0Feb2720:08tables_priv.MYD

  -rw-------1mysqlmysql1024Feb2720:08tables_priv.MYI

  -rw-------1mysqlmysql8877Feb2720:08tables_priv.frm

  -rw-------1mysqlmysql428Feb2720:08user.MYD

  -rw-------1mysqlmysql2048Feb2720:08user.MYI

  -rw-------1mysqlmysql9148Feb2720:08user.frm

  假如这些文件的属主及属性不是如许,请用以下两个命令修改之:

  shell>chown-Rmysql.mysql/usr/local/mysql/var

  shell>chmod-Rgo-rwx/usr/local/mysql/var

  用root用户启动远程服务一向是平安年夜忌,由于假如服务程序呈现成绩,远程打击者极有大概取得主机的完整把持权。MySQL从3.23.15版本入手下手时作了小小的修改,默许安装后服务要用mysql用户来启动,不同意root用户启动。假如非要用root用户来启动,必需加上--user=root的参数(./safe_mysqld--user=root&)。由于MySQL中有LOADDATAINFILE和SELECT...INTOOUTFILE的SQL语句,假如是root用户启动了MySQL服务器,那末,数据库用户就具有了root用户的写权限。不外MySQL仍是做了一些限定的,好比LOADDATAINFILE只能读全局可读的文件,SELECT...INTOOUTFILE不克不及掩盖已存在的文件。

  当地的日记文件也不克不及无视,包含shell的日记和MySQL本人的日记。有些用户在当地上岸或备份数据库的时分为了图便利,偶然会在命令行参数里间接带了数据库的暗码,如:

  shell>/usr/local/mysql/bin/mysqldump-uroot-ptesttest>test.sql

  shell>/usr/local/mysql/bin/mysql-uroot-ptest

  这些命令会被shell纪录在汗青文件里,好比bash会写进用户目次的.bash_history文件,假如这些文件失慎被读,那末数据库的暗码就会泄露。用户上岸数据库后实行的SQL命令也会被MySQL纪录在用户目次的.mysql_history文件里。假如数据库用户用SQL语句修正了数据库暗码,也会因.mysql_history文件而泄露。以是我们在shell上岸及备份的时分不要在-p后间接加暗码,而是在提醒后再输出数据库暗码。

  别的这两个文件我们也应当不让它纪录我们的操纵,以防万一。

  shell>rm.bash_history.mysql_history

  shell>ln-s/dev/null.bash_history

  shell>ln-s/dev/null.mysql_history

  上门这两条命令把这两个文件链接到/dev/null,那末我们的操纵就不会被纪录到这两个文件里了。
 内部收集平安

  MySQL数据库安装好今后,Unix平台的user表是如许的:

  mysql>usemysql;

  Databasechanged

  mysql>selectHost,User,PassWord,Select_priv,Grant_privfromuser;

  +-----------+------+----------+-------------+------------+

  |Host|User|Password|Select_priv|Grant_priv|

  +-----------+------+----------+-------------+------------+

  |localhost|root||Y|Y|

  |redhat|root||Y|Y|

  |localhost|||N|N|

  |redhat|||N|N|

  +-----------+------+----------+-------------+------------+

  4rowsinset(0.00sec)

  Windows平台的user表是如许的:

  mysql>usemysql;

  Databasechanged

  mysql>selectHost,User,Password,Select_priv,Grant_privfromuser;

  +-----------+------+----------+-------------+------------+

  |Host|User|Password|Select_priv|Grant_priv|

  +-----------+------+----------+-------------+------------+

  |localhost|root||Y|Y|

  |%|root||Y|Y|

  |localhost|||Y|Y|

  |%|||N|N|

  +-----------+------+----------+-------------+------------+

  4rowsinset(0.00sec)

  我们先来看Unix平台的user表。个中redhat只是我实验机的呆板名,以是实践上Unix平台的MySQL默许只同意本机才干毗连数据库。可是缺省root用户口令是空,以是燃眉之急是给root用户加上口令。给数据库用户加口令有三种办法:

  1)在shell提醒符下用mysqladmin命令来改root用户口令:

  shell>mysqladmin-urootpasswordtest

  如许,MySQL数据库root用户的口令就被改成test了。(test只是举例,我们实践利用的口令必定不克不及利用这类易猜的弱口令)

  2)用setpassword修正口令:

  mysql>setpasswordforroot@localhost=password(test);

  这时候root用户的口令就被改成test了。

  3)间接修正user表的root用户口令:

  mysql>usemysql;

  mysql>updateusersetpassword=password(test)whereuser=root;

  mysql>flushprivileges;

  如许,MySQL数据库root用户的口令也被改成test了。个中最初一句命令flushprivileges的意义是强迫革新内存受权表,不然用的仍是缓冲中的口令,这时候不法用户还能够用root用户及空口令上岸,直到重启MySQL服务器。

  我们还看到user为空的匿名用户,固然它在Unix平台下没甚么权限,但为了平安起见我们应当删除它:

  mysql>deletefromuserwhereuser=;
据我的观察,现在有一个趋势,那些经过正式培训的数据库管理员DBA更倾向于选择一个专有关系数据库,例如Oracle。对于一些具有专门数据库管理员的比较大的环境来说,MySQL很难得到宠爱,这时候,关于MySQL是否真的具有良好的可扩展性的争论已经没有意义。
小妖女 该用户已被删除
沙发
发表于 2015-1-18 18:15:08 | 只看该作者
是要和操作系统进行Socket通讯的场景。否则建议慎重!
谁可相欹 该用户已被删除
板凳
发表于 2015-1-27 15:44:21 | 只看该作者
这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。
柔情似水 该用户已被删除
地板
发表于 2015-2-5 13:27:30 | 只看该作者
但换公司用MSSQL2K感觉自己好像根本就不了解MSSQL。什么DTS触发器以前根本没用过。
小魔女 该用户已被删除
5#
发表于 2015-2-12 00:48:29 | 只看该作者
每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。
第二个灵魂 该用户已被删除
6#
发表于 2015-3-2 21:50:47 | 只看该作者
以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了
再现理想 该用户已被删除
7#
发表于 2015-3-11 06:50:37 | 只看该作者
如果,某一版本可以提供强大的并发响应,但是没有Oracle的相应版本稳定,或者价格较贵,那么,它就是不适合的。
变相怪杰 该用户已被删除
8#
发表于 2015-3-17 23:08:05 | 只看该作者
groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。
老尸 该用户已被删除
9#
发表于 2015-3-25 06:15:51 | 只看该作者
索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 02:43

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表