摘要:mysql用户管理(1)
作者: 晏子
mysql管理员应该知道如何设置mysql用户账号,指出哪个用户可以连接服务器,从哪里连接,连接后能做什么。mysql 3.22.11开始引入两条语句使得这项工作更容易做:grant语句创建mysql用户并指定其权限,而revoke语句删除权限。两条语句扮演了mysql数据库的前端角色,并提供与直接操作这些表的内容不同的另一种方法。create和re......
摘要:
mysql数据库函数详解(1)
(1) int mysql_affected_rows([int link_id]);
在给定的连接中,返回由最近的delete、insert、replace或者update语句所作用的行数。如果没有行 被修改,则mysql_affected_rows()返回0,如果出现错误,则返回-1。
在select查询之后,mysql_affected_ro......
MySQL安全性指南作为一个mysql的系统管理员,你有责任维护你的mysql数据库系统的数据安全性与完整性.本文主要主要介绍如何建立一个安全的mysql系统,从系统内部与外部网络两个角度,为你提供一个指南.
【程序编程相关:
实战apache+tomcat整合】 【推荐阅读:
Apache进行Rewrite时需要注意】
本文主要考虑下列安全性有关的问题: 【扩展信息:
apache中与日志有关的模块】
·为什么安全性很重要,你应该防范那些攻击?
·服务器面临的风险(内部安全性),如何处理?
·连接服务器的客户端风险(外部安全性),如何处理?
mysql管理员有责任保证数据库内容的安全性,使得这些数据记录只能被那些正确授权的用户访问,这涉及到数据库系统的内部安全性与外部安全性.
内部安全性关心的是文件系统级的问题,即,防止mysql数据目录(datadir)被在服务器主机有账号的人(合法或窃取的)进行攻击.如果数据目录内容的权限过分授予,使得每个人均能简单地替代对应于那些数据库表的文件,那么确保控制客户通过网络访问的授权表设置正确,对此毫无意义.
外部安全性关心的是从外部通过网络连接服务器的客户的问题,即,保护mysql服务器免受来自通过网络对服务器的连接的攻击.你必须设置mysql授权表(grant table),使得他们不允许访问服务器管理的数据库内容,除非提供有效的用户名与口令.
下面就详细介绍如何设置文件系统与授权表mysql,实现mysql的两级安全性.
一.内部安全性-保证数据目录访问的安全
mysql服务器通过在mysql数据库中的授权表提供了一个灵活的权限系统.你可以设置这些表的内容,允许或拒绝客户对数据库的访问,这提供了你防止未授权的网络访问对你数据库攻击的安全手段,然而如果主机上其他用户能直接访问数据目录内容,建立对通过网络访问数据库的良好安全性对你毫无帮助,除非你知道你是登录mysql服务器运行主机的唯一用户,否则你需要关心在这台机器上的其他用户获得对数据目录的访问的可能性.
以下是你应该保护的内容:
·数据库文件.很明显,你要维护服务器管理的数据库的私用性.数据库拥有者通常并且应该考虑数据库内容的安全性,即使他们不想,也应该考虑时数据库内容公开化,而不是通过糟糕的数据目录的安全性来暴露这些内容.
·日志文件.一般与更新日志必须保证安全,因为他们包含查询文本.对日志文件有访问权限的任何人可以监视数据库进行过的操作.
更要重点考虑的日志文件安全性是诸如grant与set password等的查询也被记载了,一般与更新日志包含有敏感查询的文本,包括口令(mysql使用口令加密,但它在已经完成设置后才运用于以后的连接建立.设置一个口令的过程设计象grant或set password等查询,并且这些查询以普通文本形式记载在日志文件中).如果一个攻击者犹如日文件的读权限,只需在日志文件上运行grep寻找诸如grant与password等词来发现敏感信息.
显然,你不想让服务器主机上的其他用户有数据库目录文件的写权限,因为他们可以重写你的状态文件或数据库表文件,但是读权限也很危险.如果一个数据库表文件能被读取,偷取文件并得到mysql本身,以普通文本显示表的内容也很麻烦,为什么?因为你要做下列事情:
·在服务器主机上安装你自己“特制”的mysql服务器,但是有一个不同于官方服务器版本的端口.套接字与数据目录.
·运行mysql_install_db初始化你的数据目录,这赋予你作为mysql root用户访问你的服务器的权限,所以你有对服务器访问机制的完全控制,它也建立一个test数据库.
·将对应于你想偷取得表文件拷贝到你服务器的数据库目录下的test目录.
·启动你的服务器.你可以随意访问数据库表,show tables from test显示你有一个偷来的表的拷贝,select *显示它们任何一个的全部内容.
·如果你确实很恶毒,将权限公开给你服务器的任何匿名用户,这样任何人能从任何地方连接服务器访问你的test数据库.你现在将偷来的数据库表公布于众了.
在考虑一下,从相反的角度,你想让别人对你这样吗?当然不!你可以通过在数据库录下执行ls -l命令确定你的数据库是否包含不安全的文件与目录.查找有“组”与“其他用户”权限设置的文件与目录.下面是一个不安全数据目录的一部分列出:
% ls -l
total 10148
drwxrwxr-x 11 mysqladm wheel 1024 may 8 12:20 .
drwxr-xr-x 22 root wheel 512 may 8 13:31 ..
drwx------ 2 mysqladm mysqlgrp 512 apr 16 15:57 menagerie
drwxrwxr-x 2 mysqladm wheel 512 jan 25 20:40 mysql
drwxrwxr-x 7 mysqladm wheel 512 aug 31 1998 sql-bench
drwxrwxr-x 2 mysqladm wheel 1536 may 6 06:11 test
drwx------ 2 mysqladm mysqlgrp 1024 may 8 18:43 tmp
....
正如你看到的,有些数据库有正确的权限,而其他不是.本例的情形是经过一段时间后的结果....
下一页 摘要:3。数据库设计
关键还是mysql的效率问题,合理分配mysql的内存,特别是table cache的
大小。另外,当系统突然掉电呢?mysql是否robust?
table的名字设计,采用一位前缀表明类型,全部用小写表示(?),例如:
系统的数据库,以s为前导,如用户表:suser(suser 呢?),具体如下:
s :系统表,suser,sclass
m :用户信件表,m......