无法改变mysql中的例程

时间:2012-04-12 12:23:57

标签: mysql

问题:无法改变例程。

我正在使用mysql 5.1.47。我创建了一个名为“testuser”的用户和名为“abc1,abc2,abc3”的db。

起初我试过

GRANT ALL ON *.* TO 'testuser'@'%';(also::> GRANT ALL PRIVILEGES ON *.* TO 'testuser'@'%';)

FLUSH PRIVILEGES;

也尝试了这个

GRANT ALL ON *.* TO 'testuser'@'%' IDENTIFIED BY 'passwd';
FLUSH PRIVILEGES;

这很好用,用户testuser能够创建,更改例程。

然后我撤销了所有权限,甚至删除了用户testuser并再次创建了testuser。然后我试了一下:

GRANT ALL ON abc1.* TO 'testuser'@'%';

也尝试了这个

GRANT ALL ON abc1.* TO 'testuser'@'%' IDENTIFIED BY 'passwd';
GRANT ALTER ROUTINE ON abc1.* TO 'testuser'@'%';
FLUSH PRIVILEGES;

通过使用上述方法(特别是Db),我无法改变例程。我尝试了所有主机,如localhost,%,127.0.0.1,本地ip。我尝试使用工作台更改例程,它是空白的,没有任何错误。

但testuser能够创建例程并能够编辑testuser创建的例程。但是其他一些用户创建的其他例程无法由testuser编辑(两个例程都在同一个数据库中)。

但是,当我访问所有数据库时,如:

GRANT ALL ON *.* TO 'testuser'@'%'; 
FLUSH PRIVILEGES;

然后testuser就能编辑所有例程。请帮我解决这个问题。

感谢。 vijai

2 个答案:

答案 0 :(得分:2)

您可能需要刷新权限:

flush privileges;

或者您可能需要除'%'以外的其他内容(我认为这可能意味着'除了localhost之外的其他内容')

我没有在我的工作中创建任何复杂的授权......但在测试系统中,我总是添加3个授权(第3个用于错误配置的/ etc / hosts文件,在一些配置不正确的系统上将“localhost”映射到第一个NIC IP):

grant all privileges on dbnamehere.* to username@'%' identified by 'passwordhere';
grant all privileges on dbnamehere.* to username@'localhost' identified by 'passwordhere';
grant all privileges on dbnamehere.* to username@'127.0.0.1' identified by 'passwordhere';
update mysql.user set password=OLD_PASSWORD('passwordhere') where user='username';
flush privileges;

答案 1 :(得分:0)

我遇到了类似的问题,我通过SQL Workbench为初级开发人员创建了一个新帐户,并在特定架构上具有以下权限: Alter,Alter Routine,Create,Create Routine,Delete,Execute,Insert ,选择,显示视图,更新

我还从工作台执行了刷新权限,以确保应用了最新权限,但每次他右键单击存储过程并选择“发送到Sql编辑器” - >程序调用不会显示任何内容。我们尝试更改各种选项但仍无法显示。

他能够创建新程序然后编辑这些程序,但除了调用其他用户编写的现有程序外,无法编辑或执行任何操作。仅供参考,我将补充说他没有分配任何数据库管理角色。

在摆弄和研究之后,我得到了尝试在mysql架构上提供权限的概念,因为该架构具有proc表中存储过程的定义。我开始时给予所有权限并将其削减到此模式的“选择”权限,然后,开发人员能够右键单击这些过程并“发送到Sql编辑器” - >程序调用以及更改程序。

我不是百分百确定这是否能完全解决您的问题,但确实解决了几个问题。

我还要补充一点,我们的安全策略是为用户提供尽可能少的权限来有效地开展工作,因此减少提供的权限数量需要仔细考虑。