一、MySQL权限简介
关于mysql的权限简单的理解就是mysql允许你做你全力以内的事情,不可以越界。比如只允许你执行select操作,那么你就不能执行update操作。只允许你从某台机器上连接mysql,那么你就不能从除那台机器以外的其他机器连接mysql。
那么Mysql的权限是如何实现的呢?这就要说到mysql的两阶段验证,下面详细介绍:第一阶段:服务器首先会检查你是否允许连接。因为创建用户的时候会加上主机限制,可以限制成本地、某个IP、某个IP段、以及任何地方等,只允许你从配置的指定地方登陆。第二阶段:如果你能连接,Mysql会检查你发出的每个请求,看你是否有足够的权限实施它。比如你要更新某个表、或者查询某个表,Mysql会查看你对哪个表或者某个列是否有权限。再比如,你要运行某个存储过程,Mysql会检查你对存储过程是否有执行权限等。
MYSQL到底都有哪些权限呢?从官网复制一个表来看看:
权限 | 权限级别 | 权限说明 |
CREATE | 数据库、表或索引 | 创建数据库、表或索引权限 |
DROP | 数据库或表 | 删除数据库或表权限 |
GRANT OPTION | 数据库、表或保存的程序 | 赋予权限选项 |
REFERENCES | 数据库或表 | |
ALTER | 表 | 更改表,比如添加字段、索引等 |
DELETE | 表 | 删除数据权限 |
INDEX | 表 | 索引权限 |
INSERT | 表 | 插入权限 |
SELECT | 表 | 查询权限 |
UPDATE | 表 | 更新权限 |
CREATE VIEW | 视图 | 创建视图权限 |
SHOW VIEW | 视图 | 查看视图权限 |
ALTER ROUTINE | 存储过程 | 更改存储过程权限 |
CREATE ROUTINE | 存储过程 | 创建存储过程权限 |
EXECUTE | 存储过程 | 执行存储过程权限 |
FILE | 服务器主机上的文件访问 | 文件访问权限 |
CREATE TEMPORARY TABLES | 服务器管理 | 创建临时表权限 |
LOCK TABLES | 服务器管理 | 锁表权限 |
CREATE USER | 服务器管理 | 创建用户权限 |
PROCESS | 服务器管理 | 查看进程权限 |
RELOAD | 服务器管理 | 执行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload等命令的权限 |
REPLICATION CLIENT | 服务器管理 | 复制权限 |
REPLICATION SLAVE | 服务器管理 | 复制权限 |
SHOW DATABASES | 服务器管理 | 查看数据库权限 |
SHUTDOWN | 服务器管理 | 关闭数据库权限 |
SUPER | 服务器管理 | 执行kill线程权限 |
MYSQL的权限如何分布,就是针对表可以设置什么权限,针对列可以设置什么权限等等,这个可以从官方文档中的一个表来说明:
权限分布 | 可能的设置的权限 |
表权限 | 'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter' |
列权限 | 'Select', 'Insert', 'Update', 'References' |
过程权限 | 'Execute', 'Alter Routine', 'Grant' |
二、MySQL权限经验原则:
权限控制主要是出于安全因素,因此需要遵循一下几个经验原则:
1、只授予能满足需要的最小权限,防止用户干坏事。比如用户只是需要查询,那就只给select权限就可以了,不要给用户赋予update、insert或者delete权限。
2、创建用户的时候限制用户的登录主机,一般是限制成指定IP或者内网IP段。
3、初始化数据库的时候删除没有密码的用户。安装完数据库的时候会自动创建一些用户,这些用户默认没有密码。
4、为每个用户设置满足密码复杂度的密码。
5、定期清理不需要的用户。回收权限或者删除用户。
三、MySQL权限实战:
1、GRANT命令使用说明:
先来看一个例子,创建一个只允许从本地登录的超级用户jack,并允许将权限赋予别的用户,密码为:jack.
mysql> grant all privileges on *.* to jack@'localhost' identified by "jack" with grant option;
Query OK, 0 rows affected (0.01 sec)
GRANT命令说明:
ALL PRIVILEGES 是表示所有权限,你也可以使用select、update等权限。
ON 用来指定权限针对哪些库和表。
*.* 中前面的*号用来指定数据库名,后面的*号用来指定表名。
TO 表示将权限赋予某个用户。
jack@'localhost' 表示jack用户,@后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。注意:这里%有的版本不包括本地,以前碰到过给某个用户设置了%允许任何地方登录,但是在本地登录不了,这个和版本有关系,遇到这个问题再加一个localhost的用户就可以了。
IDENTIFIED BY 指定用户的登录密码。
WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。注意:经常有人在创建操作用户的时候不指定WITH GRANT OPTION选项导致后来该用户不能使用GRANT命令创建用户或者给其它用户授权。
备注:可以使用GRANT重复给用户添加权限,权限叠加,比如你先给用户添加一个select权限,然后又给用户添加一个insert权限,那么该用户就同时拥有了select和insert权限。
2、刷新权限
使用这个命令使权限生效,尤其是你对那些权限表user、db、host等做了update或者delete更新的时候。以前遇到过使用grant后权限没有更新的情况,只要对权限做了更改就使用FLUSH PRIVILEGES命令来刷新权限。
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
3、查看权限
查看当前用户的权限:
mysql> show grants;
+---------------------------------------------------------------------+
Grants for root@localhost
+---------------------------------------------------------------------+
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)
查看某个用户的权限:
mysql> show grants for 'jack'@'%'+-----------------------------------------------------------------------------------------------------+
Grants for jack@%
+-----------------------------------------------------------------------------------------------------+
GRANT USAGE ON *.* TO 'jack'@'%' IDENTIFIED BY PASSWORD '*9BCDC990E611B8D852EFAF1E3919AB6AC8C8A9F0'
+-----------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
4、回收权限
mysql> revoke delete on *.* from 'jack'@'localhost';
Query OK, 0 rows affected (0.01 sec)
5、删除用户
mysql> select host,user,password from user+-----------+------+-------------------------------------------+
host user password
+-----------+------+-------------------------------------------+
localhost root
rhel5.4 root
127.0.0.1 root
::1 root
localhost
rhel5.4
localhost jack *9BCDC990E611B8D852EFAF1E3919AB6AC8C8A9F0
+-----------+------+-------------------------------------------+
7 rows in set (0.00 sec)
mysql> drop user 'jack'@'localhost';
Query OK, 0 rows affected (0.01 sec)
6、对账户重命名
mysql> rename user 'jack'@'%' to 'jim'@'%';
Query OK, 0 rows affected (0.00 sec)
7、修改密码
.htaccess基本设置
.htaccess 文件 (Hypertext Access file) 是Apache Web服务器的一个非常强大的配置文件,对于这个文件,Apache有一堆参数可以让你配置出几乎随心所欲的功能。.htaccess 配置文件坚持了Unix的一个文化——使用一个ASCII 的纯文本文件来配置你的网站的访问策略。
这篇文章包括了16个非常有用的小技巧。另外,因为.htaccess 是一个相当强大的配置文件,所以,一个轻微的语法错误会造成你整个网站的故障,所以,在你修改或是替换原有的文件时,一定要备份旧的文件,以便出现问题的时候可以方便的恢复。
1. 使用.htaccess 创建自定义的出错页面。对于Linux Apache来说这是一项极其简单的事情。使用下面的.htaccess语法你可以轻松的完成这一功能。(把.htaccess放在你的网站根目录下)
ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php
ErrorDocument 500 /error/500.php
2. 设置网站的时区
SetEnv TZ America/Houston
3. 阻止IP列表
有些时候,你需要以IP地址的方式阻止一些访问。无论是对于一个IP地址还是一个网段,这都是一件非常简单的事情,如下所示:
allow from all
deny from 145.186.14.122
deny from 124.15
Apache对于被拒绝的IP会返回403错误。
4. 把一些老的链接转到新的链接上——搜索引擎优化SEO
5. 为服务器管理员设置电子邮件。
ServerSignature EMail
SetEnv SERVER_ADMIN default@domain.com
6. 使用.htaccess 访止盗链。如果你网站上的一个图片被别的N多的网站引用了,那么,这很有可能会导致你服务器的性能下降,使用下面的代码可以保护某些热门的链接不被过多的引用。
7. 阻止 User Agent 的所有请求
## .htaccess Code :: BEGIN
## Block Bad Bots by user-Agent
SetEnvIfNoCase user-Agent ^FrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Java.* [NC,OR]
SetEnvIfNoCase user-Agent ^Microsoft.URL [NC,OR]
SetEnvIfNoCase user-Agent ^MSFrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Offline.Explorer [NC,OR]
SetEnvIfNoCase user-Agent ^[Ww]eb[Bb]andit [NC,OR]
SetEnvIfNoCase user-Agent ^Zeus [NC]
Order Allow,Deny
Allow from all
Deny from env=bad_bot
## .htaccess Code :: END
8. 把某些特殊的IP地址的请求重定向到别的站点
ErrorDocument 403 http://www.kuqin.com
Order deny,allow
Deny from all
Allow from 124.34.48.165
Allow from 102.54.68.123
9. 直接找开文件而不是下载 – 通常,我们打开网上文件的时候总是会出现一个对话框问我们是下载还是直接打开,使用下面的设置就不会出现这个问题了,直接打开。
AddType application/octet-stream .pdf
AddType application/octet-stream .zip
AddType application/octet-stream .mov
10. 修改文件类型 – 下面的示例可以让任何的文件都成为PHP那么被服务器解释。比如:myphp, cgi,phtml等。
ForceType application/x-httpd-php
SetHandler application/x-httpd-php
11. 阻止存取.htaccess 文件
# secure htaccess file
order allow,deny
deny from all
12. 保护服务器上的文件被存取
# prevent access of a certain file order allow,deny
deny from all
13. 阻止目录浏览
# disable directory browsing
Options All -Indexes
14. 设置默认主页
# serve alternate default index page
DirectoryIndex about.html
15. 口令认证 – 你可以创建一个文件用于认证。下面是一个示例:
# to protect a file
AuthType Basic
AuthName “Prompt”
AuthUserFile /home/path/.htpasswd
Require valid-user
# password-protect a directory
resides
AuthType basic
AuthName “This directory is protected”
AuthUserFile /home/path/.htpasswd
AuthGroupFile /dev/null
Require valid-user
16. 把老的域名转像新的域名
# redirect from old domain to new domain
RewriteEngine On
RewriteRule ^(.*)$
http://www.abc.com/$1 [R=301,L]
在IIS6 配置使用php5.4的fastcgi模式
在IIS6 配置使用php的fastcgi模式
1.下载FastCGI For IIS6
fastcgi页面:http://www.iis.net/download/fastcgi
CGI配置教程 http://learn.iis.net/page.aspx/247/using-fastcgi-to-host-php-applications-on-iis-60/
2、下载 php5.4
php on windows页面:http://www.microsoft.com/web/platform/phponwindows.aspx
php 5.4 下载地址:http://windows.php.net/downloads/releases/php-5.4.0-nts-Win32-VC9-x86.zip
解压到C:\php目录下
设置IIS启动帐号对 C:\php\ 有读取执行权限
3、注册PHP到FastCGI(原理是在fastcgi的ini中,增加一个扩展。)
cscript fcgiconfig.js -add -section:"php" -extension:php -path:"C:\php\php-cgi.exe"
fcgiconfig.js 在 C:\WINDOWS\system32\inetsrv 目录下。
4、做一些性能和安全设置
C:\php\php.ini-recommended重命名为为C:\php\php.ini
打开C:\php\php.ini,修改:
extension_dir = "C:\php\ext"
fastcgi.impersonate = 1
cgi.fix_pathinfo=1
cgi.force_redirect = 0
php.ini 其他的地方设置跟平时配置isapi 模式一样;
执行:
cscript fcgiconfig.js -set -section:"PHP" -InstanceMaxRequests:10000
cscript fcgiconfig.js -set -section:"PHP" -EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000
以上两项设置最大池和响应连接数,可以根据自己的硬件配置、使用情况修改
如果上面的命令无效,可以打开才C:\windows\system32\inetsrv\fcgiext.ini 内容如下:
[Types]
php=php
[php]
ExePath=C:\php\php-cgi.exe
InstanceMaxRequests=10000
EnvironmentVars=PHP_FCGI_MAX_REQUESTS:10000
然后重启IIS。
5、设置php.ini
date.timezone =Asia/Shanghai
short_open_tag = ON
display_errors = ON
variables_order = "EGPCS"
default_charset = "utf-8"
打开mysql的支持(去掉前缀的分号):
extension=php_mysql.dll
extension_dir = "ext"
放一个测试文件运行看看:
< ?php phpinfo(); ?>
6、注意:
IIS6中已经创建的站点,不会自动添加.php映射。新建的站点,则会自动添加.php的映射。
如果提示14001错误,是因为VC9运行库没有安装的缘故。
FastCGI Error
The FastCGI Handler was unable to process the request.
--------------------------------------------------------------------------------
Error Details:
Error Number: 14001 (0x800736b1).
Error Description: 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。
HTTP Error 500 - Server Error.
Internet Information Services (IIS)
Microsoft Visual C++ 2008 Redistributable Package (x86)下载地址:
http://www.microsoft.com/downloads/details.aspx?FamilyID=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF&displaylang=zh-cn
下载后安装即可。
7、不支持请求。 如果提示“不支持请求”,那就创建一个.php的映射。
.php 勾选脚本引擎(默认),指向 C:\WINDOWS\system32\inetsrv\fcgiext.dll 。即可。
原文:
http://blog.csdn.net/yeqiufeng/article/details/7425071
MySQL 5.7.2 发布
甲骨文近日发布了MySQL 5.7分支的最新的开发里程碑版本(DMR版)——MySQL 5.7.2。该版本提供了更快的连接速度,更高的事务吞吐量,提升了复制速度,带来了内存仪表和其他增强功能,从而实现更高的性能和增强的可管理性。
1. 性能和可扩展性增强
MySQL 5.7.2 DMR版本提供了:
•针对InnoDB进行只读查询的Sysbench测试中,速度可达每秒500,000次查询,为之前(250,000次)的两倍
•线性扩展到64 CPU线程
•改进的复制吞吐量:在线程中使用新的多线程事务性的复制事件处理程序,并可以在并行的工作线程中运行复杂的事务。
2. 可管理性增强
•改进了数据表的在线修改功能:可在线重命名索引和扩大varchar的数据类型
•新增的内存仪表:支持跟踪mysqld中的内存分配和使用情况
•存储程序仪表:可提供存储程序内部指令的执行细节
•可使用GET STACKED DIAGNOSTICS作为新的工具,来创建和清理存储程序中的诊断信息
•改进了触发器的动态控制:支持在同一个表中对一个事件类型应用多个触发器
•实时的执行分析
•改进了JSON Explain Data:可以在优化器中添加总查询成本、单表查询成本、总数据量等参数来获得更详细的信息
3. 其他
•MySQL 5.7.2 DMR还提供了无损半同步复制功能,确保事务只被提交到存储引擎,并在从服务器确认收到后才在主服务器中具体化。
•MySQL Utilities 1.4.0中的mysqlfabric工具允许通过分片来进行扩展。
•多源MySQL复制:允许一个从服务器(slave)从多个主服务器(master)中聚合数据。
下载地址:http://dev.mysql.com/downloads/mysql/#downloads
注意,MySQL 5.7.2是一个开发里程碑版本,还处于开发测试中,不要用于生产环境。
MSSQL Server 2008的安全设置
服务器身份验证
MSSQL Server 2008的身份验证模式有两种:一种是Windows 身份验证模式, 另一种是SQL Server和Windows身份验证模式(即混合模式)。对大多数数据库服务器来说,有SQL Server身份验证就足够了,只可惜目前的服务器身份验证模式里没有这个选项,所以我们只能选择同时带有SQL Server和Windows身份验证的模式(混合模式)。但这样就带来了两个问题:
1、混合模式里包含了Windows身份验证这个我们所不需要的模式,即设置上的冗余性。程序的安全性是与冗余性成反比的。
2、所谓Windows身份验证,实际上就是通过当前Windows管理员帐户(通常为Administrator)的登录凭据来登录MSSQL Server。使用Windows身份验证,会增加Administrator密码被盗的风险。
为解决以上两个问题,我们需要限制混合模式里的Windows身份验证。方法如下:
打开Microsoft SQL Server Management Studio,点击安全性->登录名,将Administrator对应的登录名删除即可。
SQL Server服务的运行身份
默认情况下,SQL Server服务是以本地系统的身份运行的。也就是说,SQL Server服务进程对系统拥有一切操作的权限,这是很不安全的。因此,我们需要将SQL Server服务的运行身份修改为普通用户:
1、新建一个普通用户,如mssqluser,将此用户加入以下两组:
SQLServerMSSQLUser
SQLServerSQLAgentUser
2、授予C盘mssqluser用户的读取权限,D、E等其他分区mssqluser用户的修改权限,mssql安装目录(如D:\Program Files\Microsoft SQL Server),数据库文件存放目录(如D:\mssqldata)mssqluser用户的完全控制权限。
3、将SQL Full-text Filter Daemon Launcher (MSSQLSERVER) SQL Server (MSSQLSERVER)服务的登录修改为mssqluser用户,然后重启这两个服务。
sa密码的安全性
很多数据库服务器管理员都会发现,总有人会乐此不疲地去破解sa密码。因此,将sa密码BT化就变成不可或缺的一步设置。另外,我们可以将sa重命名为sa1,sa2,sa3...之类的用户,这样可以进一步提高sa密码的安全性。修改之后,不要忘了更新有使用sa密码的管理程序。
LitePublisher(开源cms)
LitePublisher是一个免费开源的内容管理系统,Lite Publisher可以简单的个性化任何内容任何,比如blog,wiki,bug管理,文档系统.这是Lite Publisher的基本功能.
LitePublisher内置cache功能,有SEO方面的设置,比如每篇文章的url,description设置等等.内置5个风格.安装的时候可以选择Mysql数据库或者文本存储.
LitePublisher 需要手动输入 domain.com/admin/ 进入管理后台.发布文章也需要在后台点击相关按钮。
官网:http://litepublisher.com
apache限制某个目录下的php文件没有执行权限
了安全期间,有时我们需要限制网站下的某些目录对于php脚本不能执行。
有两种方法可以参考:
1. 使用.htaccess 文件限制
在要限制php执行的目录下,创建.htaccess文件,加入内容
php_flag engine off
2. 使用apache的配置文件httpd.conf
在相关的虚拟主机段,加入
<Directory /www/htdocs/path>
php_admin_flag engine off
</Directory>
禁止ANONYMOUS LOGON匿名登录
ANONYMOUS LOGON用户权限最低的,只能浏览。ftp或http下载软件的时候,如果不登陆,就是这种状态。
除非你关闭了 137-139.445端口,彻底禁用所有网上邻居、windows共享
否则会有这个的,而且很正常。只要有人打开网上邻居,而且里面有你的电脑、就多半会有这个纪录。
方法1 :如果你坚持使用网络共享 , 那么走注册表
hkey_local_machine\system\currentControlSet\Services\lanmanserver\parameters
Lmannounce : dword= 0
requiresecuritysignature :dword=1
restrictnullsessaccess :dword = 1
NullSessionPipes = (空)
NullSessionShares =(空)
方法2: 如果你觉得你不用别人的网络共享,别人也不能登陆你的
HKEY_LOCAL_MACHINE Key: System\Controlset\Services\NetBT\Parameters
SMBDeviceEnabled : REG_DWORD = 0
hkey_local_machine\system\currentControlSet\Services\lanmanserver\parameters
Lmannounce : dword= 0
然后禁用server服务
FreeCMS (开源CMS)
FreeCMS项目是为了致力于打造更好的中国开源免费CMS而发起的。这个项目的目标是提供一个安全,实用有效和可扩展的CMS系统。
FreeCMS的特点:公开源码、免费使用、代码通俗易懂、注释详细、面向二次开发友好!
运行环境:JSP/MSSQL/Mysql
FreeCMS项目隶属于FreeTeam开发组织!
最新版本FreeCMS 1.2已发布,欢迎下载!
http://code.google.com/p/freecms/downloads/list