2

问题:无法更改例程。

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

一开始我试过

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

同花顺特权;

也试过这个

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 能够编辑所有例程。请帮我解决这个问题。

谢谢。维杰

4

2 回答 2

2

您可能需要刷新权限:

flush privileges;

或者你可能需要'%'以外的东西(我认为这可能意味着'localhost以外的任何东西')

我不会在我的工作中创建任何复杂的授权......但在测试系统中,我总是添加 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;
于 2012-04-12T12:34:36.003 回答
1

我遇到了类似的问题,我通过 SQL Workbench 为初级开发人员创建了一个新帐户,在特定模式上具有以下权限: Alter、Alter Routine、Create、Create Routine、Delete、Execute、Insert、Select、Show View、更新

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

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

在摆弄和研究之后,我有了尝试在 mysql 模式上提供权限的想法,因为该模式具有 proc 表中存储过程的定义。我从赋予所有权限开始并将其缩减为仅对该模式的“选择”权限,之后,开发人员能够右键单击过程和“发送到 Sql 编辑器”-> 过程调用以及改变程序。

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

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

于 2015-09-15T15:18:23.200 回答