分页: 4/8 第一页 上页 1 2 3 4 5 6 7 8 下页 最后页 [ 显示模式: 摘要 | 列表 ]
Aug 2

二、配置及应用


安全性设置


时间设置


当前的位置


非常感谢


完成后...


三、桌面全截图




桌面


系统信息

IIS7、IE
IIS7、IE
    更多精彩,还是只有你自己亲身体验,一切尽在你手中。今天你Vista了吗?

Aug 2
WindowsVista商用版已经发布,近日,网上出现了Windows Vista简体中文版的一些截图,下面我们大家一起来看看吧。

一、安装全截图




安装Dos启动界面


启动界面


安装语言选择


现在安装


产品密钥


版本选择


接受协议


安装类型


硬盘选择


复制文件


重新启动


传说中的点点


完成安装


创建用户名

Aug 1
当您面临JSP连接MySQL数据库问题,你首先需要在MySQL数据库里创建一username表,表里面创建两个字符型的字段,字段名分别为:uid,pwd,然后插入几条测试数据。

以下用两种方式来实现JSP连接MySql数据库

第一种方式,用JSP实现:

<%@ page contentType="text/html;
charset=gb232" language="java"
import="java.sql.*"%>
<meta http-equiv="Content-Type" content="text/html; charset=gb232">
<%//*******************************
****************
JDBC_ODBC连接MySql数据库,不需要设置数据源***********
**********************/
//********** 数据库连接代码 开始 ******/  
//以下几项请自行修改String server="localhost";    
//MYSQL 服务器的地址String dbname="test";      
//MYSQL 数据库的名字String user="root";          
//MYSQL 数据库的登录用户名String pass="chfanwsp";        
//MYSQL 数据库的登录密码String port="3306";  
//SQL Server 服务器的端口号,
默认为433//数据库连接字符串
String url ="jdbc:mysql://"+server+":"+port+"/"+dbname+"?
user="+user+"&password="+pass+"&useUnicode
=true&characterEncoding=GB232";
//加载驱动程序Class.forName("org.gjt.mm.mysql.Driver").newInstance();
//建立连接Connection conn= DriverManager.getConnection(url);
//创建语句对象Statement stmt=conn.cr&#0;ateStatement
(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
// ****   数据库连接代码 结束 *******
String sql="sel&#0;ct * from username";
ResultSet rs=stmt.executeQuery(sql);
//rs.first();while(rs.next()){out.print("用户名:");
out.print(rs.getString("uid")+" 密码:");
out.println(rs.getString("pwd")+"<br>");}
rs.close();stmt.close();conn.close();%>

第二种方式,用JavaBean来实现:

DBConnMySql.java编译以后的Class文件应该放在WEB-INF\classes\conn目录下。

package conn;   //导入包import java.sql.*;    
//导入数据库操作的类public class DBConnMySql        
//构造方法,初始化{private Connection conn;    
//连接对象private Statement stmt;  
//语句对象private ResultSet rs;  
//结果集对象private String MySqldriver;
//MYSQL Server驱动程序字符串private String MySqlURL;
//MYSQL Server连接字符串//*********************************
用 og.gjt.mm.mysql.Driver 驱动
* 该方法取得连接所需各种参数,组成连接字符串,
然后再建立连接* server;dbname,user,pass,port
分别表示MYSQL 服务器的地址,
* 数据库,用户名,密码,端口
**********************************/
public Connection getConnToMySql
(String server,String dbname,String user,String pass,String port)
{//MYSQl驱动程序MySqldriver = "org.gjt.mm.mysql.Driver";  
MySqlURL = "jdbc:mysql://";      
//连接字符串一部分try{//完整的连接字符串MySqlURL
=MySqlURL+server+":"+port+"/"+dbname+"?user=
"+user+"&password="+pass+"&useUnicode
=true&characterEncoding=GB232";
Class.forName(MySqldriver);conn
= DriverManager.getConnection(MySqlURL);}
catch(Exception e){System.out.println
("操作数据库出错,请仔细检查");
//System.err.println(e.getMessage());}return conn;}  
//关闭数据库连接public void close(){try{//rs.close();
//stmt.close();conn.close();}catch(SQLException
sqlexception){sqlexception.printStackTrace();}}}

这个文件只是实现了数据库的连接,下面再写一个测试文件,就是用SQL语句从数据库里查询出记录,以验证我们数据库的连接是否成功。

connmysql.jsp文件源代码如下:

<meta http-equiv="Content-Type" content="text/html;
charset=gb232"><%@ page contentType="text/html;
charset=gb232" language="java" import="java.sql.*" %>
<jsp:useBean id="DBConn" scope="page" class="conn.DBConnMySql"/>
<% //以下几项请自行修改String server="localhost";    
//MYSQL 服务器的地址String dbname="test";    
//MYSQL 数据库的名字String user="root";        
//MYSQL 数据库的登录用户名String pass="chfanwsp";    
//MYSQL 数据库的登录密码String port="3306";      
//SQL Server 服务器的端口号,默认为433Connection
conn=DBConn.getConnToMySql
(server,dbname,user,pass,port);
Statement stmt=conn.cr&#0;ateStatement
(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
String sql="sel&#0;ct * from username";
String sql="ins&#0;rt into username (uid,pwd) values
('梦想年华','梦想年华')";stmt.executeUp&#00;ate(sql);
ResultSet rs=stmt.executeQuery(sql);while(rs.next())
{out.print("用户名:");out.print(rs.getString("uid")+" 密码:");
out.println(rs.getString("pwd")+"<br>");}
//rs.close();//stmt.close();//conn.close();DBConn.close();%>
Jul 30
MySQL已经成为当前网络中使用最多的数据库之一,特别是在Web应用上,它占据了中小型应用的绝对优势。这一切都源于它的小巧易用、安全有效、开放式许可和多平台,更主要的是它与三大Web语言之一——PHP的完美结合。

但不幸的是,一个缺省安装的MySQL,会因为root密码为空及程序漏洞导致被溢出,使得安装MySQL的服务器成为被经常攻击的对象。更严重的是,被攻击之后数据库往往遭破坏,易造成灾难性的后果。下面将进入为了保护数据而进行的保卫战中。

环境要求

.系统环境:

有一台Red Hat Linux 9.0自定义安装的服务器,系统安装了GCC及一些软件包,比如Apache、PHP等。安装完系统后的第一件事就是升级系统的软件包。作为Web服务器,系统接受PHP脚本的请求,PHP则使用下面将要安装的MySQL数据库作为动态发布的接触。

分区情况的要求和一般系统差不多,惟一不同之处在于后面建立的/chroot与/tmp要求在同一个分区上。

2.安全要求:

()MySQL运行在一个独立的(Chroot)环境下;

(2)mysqld进程运行于一个独立的用户/用户组下,此用户和用户组没有根目录,没有Shell,也不能用于其它程序;

(3)修改MySQL的root账号,并使用一个复杂的密码;

(4)只允许本地连接MySQL,启动MySQL时网络连接被禁止掉;

(5)保证连接MySQL的nobody账号登录被禁止;

(6)删除test数据库。

安装MySQL

.安装准备:

安装MySQL之前,按照上述安全要求需要创建一个用于启动MySQL的用户和组。

#groupadd mysql#useradd
mysql -c "start mysqlds account" -d
dev/null -g mysql -s /sbin/nologin

2.编译和安装:

下载MySQL源代码包:

#wget http://mysql.he.net/Downloads/MySQL-4.0/mysql-4.0.6.tar.gz

解压缩:

#tar -zxvf mysql-4.0.6.tar.gz

一般把MySQL安装在/usr/local/mysql下,如果有特殊要求,也可自行调整。不过这样做意义不大,因为后面将Chrooting,到时只是使用这里的客户工具而已,比如mysql,mysqladmin,mysqldump等。下面就开始编译安装吧。

#./configure --prefix=/usr/local/mysql
\ --with-mysqld-user=mysql \ --with-unix-socket-path=/tmp/mysql.sock
\ --with-mysqld-ldflags=-all-static#make && make
install#strip /usr/local/mysql/libexec
/mysqld#scripts/mysql_install_db#chown
-R root /usr/local/mysql#chown -R mysql
/usr/local/mysql/var#chgrp -R mysql /usr/local/mysql

上面各步骤的具体作用在MySQL手册里已有介绍,惟一需要解释、和一般步骤不同的地方在于--with-mysqld-ldflags=-all-static。因为需要用到Chroot环境,而MySQL本身连接成静态后就无需再创建一些库环境了。

3.配置与启动:

MySQL的配置文件需要手工选择、拷贝几个模板文件中的一个到/etc下,这几个模板文件位于源文件的support-files目录,一共有4个:small、medium、large、huge。

#cp support-files/my-medium.cnf
/etc/my.cnf#chown root:sys /etc/my.cnf#chmod
644 /etc/my.cnf

启动MySQL,注意使用用户为MySQL:

#/usr/local/mysq/bin/mysqld_safe --user=mysql &

4.测试:

为了测试安装的程序是否正确及MySQL是否已经正常启动,最好的办法就是用MySQL客户端来连接数据库。

#/usr/local/mysql/bin/mysql[root@ftp bin]
# mysqlWelcome to the MySQL monitor. Commands
end with ; o \g.Your MySQL connection id is
687 to server version: 3.23.58Type help;
o \h for help. Type \c to clear the
buffer.mysql>mysql> show d
atabases;+--------------+ 
Database  +--------------+ 
mysql    test  +--------------+2
rows in set (0.00 sec)mysql>quit

连接成功,可以关闭数据库:

#/usr/local/mysql/bin/mysqladmin -uroot shutdown

如果连接失败则需要仔细分析出错原因:

#more /usr/local/mysql/var/`hostname`.err

Chrooting

.Chrooting环境:

Chroot是Unix/类Unix的一种手段,它的建立会将其与主系统几乎完全隔离。也就是说,一旦遭到什么问题,也不会危及到正在运行的主系统。这是一个非常有效的办法,特别是在配置网络服务程序的时候。

2.Chroot的准备工作:

首先,应当建立目录结构:

#mkdir -p /chroot/mysql/dev#mkdir -p
/chroot/mysql/etc#mkdir -p /chroot/mysql/tmp#mkdir -p
/chroot/mysql/var/tmp#mkdir -p /chroot
/mysql/usr/local/mysql/libexec#mkdir -p
/chroot/mysql/usr/local/mysql/share
/mysql/english

然后设定目录权限:

#chown -R root:sys /chroot/mysql#chmod -R 755 /chroot/mysql#chmod 777 /chroot/mysql/tmp

3.拷贝mysql目录下的程序和文件到chroot下:

#cp -p /usr/local/mysql/libexec
/mysqld /chroot/mysql/usr/
local/mysql/libexec/#cp -p /usr/local/mysql/share
/mysql/english/errmsg.sys/chroot/mysql/usr/local
/mysql/share/mysql/english/#cp -p /etc/hosts
/chroot/mysql/etc/#cp -p /etc/host.conf /chroot
/mysql/etc/#cp -p /etc/resolv.conf /chroot
/mysql/etc/#cp -p
/etc/group /chroot/mysql/etc
/#cp -p /etc/passwd
/chroot/mysql/etc/passwd#cp -p
/etc/my.cnf /chroot/mysql/etc/
Tags:
Jul 30
随着网络的普及,基于网络的应用也越来越多。网络数据库就是其中之一。通过一台或几台服务器可以为很多客户提供服务,这种方式给人们带来了很多方便,但也给不法分子造成了可乘之机。由于数据都是通过网络传输的,这就可以在传输的过程中被截获,或者通过非常手段进入数据库。由于以上原因,数据库安全就显得十分重要。因此,本文就以上问题讨论了MySQL数据库在网络安全方面的一些功能。

账户安全

账户是MySQL最简单的安全措施。每一账户都由用户名、密码以及位置(一般由服务器名、IP或通配符)组成。如用户john从server进行登录可能和john从server2登录的权限不同。

MySQL的用户结构是用户名/密码/位置。这其中并不包括数据库名。下面的两条命令为database和database2设置了Sel�ct用户权限。

GRANT Sel�ct ON database.* to 'abc'@'server' IDENTIFIED BY 'password';GRANT Sel�ct ON database2.* to 'abc'@'server' IDENTIFIED BY 'password2';
第一条命令设置了用户abc在连接数据库database时使用password。第二条命令设置了用户abc在连接数据库database2时使用password2。因此,用户abc在连接数据库database和database2的密码是不一样的。

上面的设置是非常有用的。如果你只想让用户对一个数据库进行有限的访问,而对其它数据库不能访问,这样可以对同一个用户设置不同的密码。如果不这样做,当用户发现这个用户名可以访问其它数据库时,那将会造成麻烦。

MySQL使用了很多授权表来跟踪用户和这些用户的不同权限。这些表就是在mysql数据库中的MyISAM表。将这些安全信息保存在MySQL中是非常有意义的。因此,我们可以使用标准的SQL来设置不同的权限。

一般在MySQL数据库中可以使用3种不同类型的安全检查:

·登录验证

也就是最常用的用户名和密码验证。一但你输入了正确的用户名和密码,这个验证就可通过。

·授权

在登录成功后,就要求对这个用户设置它的具体权限。如是否可以删除数据库中的表等。

·访问控制

这个安全类型更具体。它涉及到这个用户可以对数据表进行什么样的操作,如是否可以编辑数据库,是否可以查询数据等等。

访问控制由一些特权组成,这些特权涉及到所何使用和操作MySQL中的数据。它们都是布尔型,即要么允许,要么不允许。下面是这些特权的列表:

·Sel�ct

Sel�ct是设定用户是否可以使用Sel�ct来查询数据。如果用户没有这个特权,那么就只能执行一些简单的Sel�ct命令,如计算表达式(Sel�ct +2),或是日期转换(Sel�ct Unix_TIMESTAMP(NOW( )))等。

·Ins�rt

·Up�ate

·INDEX

INDEX决定用户是否可以对表的索引进行设置。如果用户没有这个权限,那么将无法设置表中的索引。

·Alt�r

·Cr�ate

·GRANT

如果一个用户拥有这个GRANT权限,那么他就可以将自己的权限授给别的用户。也就是说,这个用户可以和其它用户共享自己的权限。

·REFERENCES

有了REFERENCES权限,用户就可以将其它表的一个字段作为某一个表的外键约束。

除了以上的权限外,MySQL还有一些权限可以对整个MySQL进行操作。

·Reload

这个权限可以使用户有权执行各种FLUSH命令,如FLUSH TABLES, FLUSH STATUS等。

·Shutdown

这个权限允许用户关闭MySQL

·Process

通过这个权限,用户可以执行SHOW PROCESSLIST和KILL命令。这些命令可以查看MySQL的处理进程,可以通过这种方式查看SQL执行的细节。

·File

这个权限决定用户是否可以执行LOAD DATA INFILE命令。给用户这个权限要慎重,因为有这个权限的用户可以将任意的文件装载到表中,这样对MySQL是十分危险的。

·Super

这个权限允许用户终止任何查询(这些查询可能并不是这个用户执行的)。

以上几种权限是非常危险的,在给用户授权限时要非常谨慎。

MySQL中的SSL

以上的账户安全只是以普通的Socket进行数据传输的,这样非常不安全。因此,MySQL在4.版以后提供了对SSL(Secure Scokets Layer)的支持。MySQL使用的是免费的OpenSSL库。

由于MySQL的Linux版本一般都是随Linux本身一起发布,因此,它们默认时都不使用SSL进行传输数据。如果要打开SSL功能,需要对hava_openssl变量进行设置:

MySQL的Windows版本已经将OpenSSL加入了。也面的命令是查看你的MySQL是否打开了SSL功能。

SHOW VARIABLES LIKE 'have_openssl'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | have_openssl | NO | +---------------+-------+  row in set (0.00 sec)
如果返回的是NO,那么说明你需要将OpenSSL编译进自己的MySQL。

在有时你可能需要将用户名和密码进行加密传输。在这时可以使用下面GRANT命令:

GRANT ALL PRIVILEGES ON ssl_only_db.* to 'abc'@'%' IDENTIFIED BY "password!" REQUIRE SSL;
  还可以通过 REQUIRE x509 选项进行SSL传输:  

GRANT ALL PRIVILEGES ON ssl_only_db.* to 'abc'@'%' IDENTIFIED BY "password!" REQUIRE x509;
你还可以使用REQUIRE SUBJECT来指定一个特定的客户端证书来访问数据库。

GRANT ALL PRIVILEGES ON ssl_only_db.* to 'abc'@'%'IDENTIFIED BY "password!"REQUIRE SUBJECT "/C=US/ST=New York/L=Albany/O=Widgets Inc./CN=client-ray.example.com/emailAddress=raymond@example.com";
也许你并不关心使用的是什么客户许可,而仅仅关心的是你的证书。那么你可以使用REQUIRE ISSUER来实现:
GRANT ALL PRIVILEGES ON ssl_only_db.* to 'abc'@'%' IDENTIFIED BY "password!"REQUIRE ISSUER "/C=US/ST=New+20York/L=Albany/O=Widgets Inc./CN=cacert.example.com/emailAddress=admin@example.com";
  SSL还可以直接通过密码进行加密。可以使用REQUIRE CIPHER设置密码。  

GRANT ALL PRIVILEGES ON ssl_only_db.* 'abc'@'%' IDENTIFIED BY "password!"REQUIRE CIPHER "EDH-RSA-DES-CBC3-SHA";
  上面使用了GRANT命令对用户权限进行设置。而这些信息都是保存在授权表中,这些表是安全系统的心脏。在这些表中保存了每一个用户和客户机所具有的权限。如果正确地操作这些表,将会对数据库的安全起到积极的作用,而如果使用不慎,将是非常危险的。

下面让我们来看看MySQL中的最要的5个授权表。

user

用户表保存了用户的权限和被加密的密码。这个表负责确定哪些用户和客户机可以连接到服务器上。

host

这个表为每一个客户机分配权限,它并不考虑用户的权限。MySQL在确定是否接收还是拒绝一个连接时,首先考虑的是user表。而使用GRANT或REVOKE命令并不影响host表,我们可以通过手工方式修改这个表中的内容。

db

db表保存了数据库层的权限信息。

tables_priv

这个表存储了表的权限信息。

columns_priv

这个表保存了单独列的权限信息。通过这个表,可以将操作某一列的权限授予一个用户。

哈希加密

如果数据库保存了敏感的数据,如银行卡密码,客户信息等,你可能想将这些数据以加密的形式保存在数据库中。这样即使有人进入了你的数据库,并看到了这些数据,也很难获得其中的真实信息。

在应用程序的大量信息中,也许你只想交很小的一部分进行加密,如用户的密码等。这些密码不应该以明文的形式保存,它们应该以加密的形式保存在数据库中。一般情况下,大多数系统,这其中包括MySQL本身都是使用哈希算法对敏感数据进行加密的。

哈希加密是单向加密,也就是说,被加密的字符串是无法得到原字符串的。这种方法使用很有限,一般只使用在密码验证或其它需要验证的地方。在比较时并不是将加密字符串进行解密,而是将输入的字符串也使用同样的方法进行加密,再和数据库中的加密字符串进行比较。这样即使知道了算法并得到了加密字符串,也无法还原最初的字符串。银行卡密码就是采用的这种方式进行加密。

MySQL提供了4个函数用于哈希加密:PASSWORD, ENCRYPT, SHA和MD5。下面让我们试一试这4个函数,看看会得到什么结果。我们以加密字符串"pa55word"为例进行说明:

让我们先来看看MD5函数

Sel�ct MD5('pa55word'); +----------------------------------+ | MD5('pa55word') | +----------------------------------+ | a7a433755d6542fd005e8b43afd4 | +----------------------------------+  row in set (0.3 sec)   下面是PASSWORD函数 Sel�ct PASSWORD('pa55word'); +----------------------+ | PASSWORD('pa55word') | +----------------------+ | d35c6556b8cab45 | +----------------------+  row in set (0.00 sec) 下面是ENCRYPT函数 Sel�ct ENCRYPT('pa55word'); +---------------------+ | ENCRYPT('pa55word') | +---------------------+ | up2Ecb0Hdj25A | +---------------------+  row in set (0.7 sec)
上面的每个函数都返回了一个加密后的字符串。为了区分加密字符串的大小写,最好在使用ENCRYPT生成加密字符串时,将这个字段定义成CHAR BINARY类型。

上面列举了3种加密的方法,但我认为使用MD5加密是最好的。这是因为这样做可以将明文密码显示在处理列表中或是查询日志中,这样便于跟踪。如下面的Ins�rt语句使用插入了一条记录,其中的密码使用了MD5进行加密:

Ins�rt INTO table (user, pw) VALUE ('user', MD5('password') )
可以通过如下的语句进行密码验证:

Sel�ct * FROM table Wh�re user = 'user' AND pw = MD5('password')
哈希加密方法可以很好地对密码进行加密,使用了这种方法加密,密码将无法恢复成明文。
Tags:
分页: 4/8 第一页 上页 1 2 3 4 5 6 7 8 下页 最后页 [ 显示模式: 摘要 | 列表 ]