2012-04-12 11 views
2

問題:ルーチンを変更できません。mysqlのルーチンを変更できません

私はmysql 5.1.47を使用しています。私は「testuser」と呼ばれるユーザを作成し、dbは「abc1、abc2、abc3」と呼ばれています。

最初に私は

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

FLUSH権限を試みました。

が、これがまた

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

これは正常に動作しようとしたユーザーtestuserとは、ルーチンを変更し、作成することができました。

私はすべての特権を取り消し、ユーザーtestuserを削除してtestuserも作成しました。その後、私が試した:

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

は、上記の方法(特にDB)私はroutine.Iがローカルホスト、%、127.0.0.1のようなすべてのホストを試み変えることができないんを使用して、このさらに

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

を試し、ローカルIP。私は、ワークベンチを使用してルーチンを変更しようとしましたが、エラーなしで空白です。

しかし、testuserは、ルーチンを作成することができ、testuserによって作成されたルーチンを編集することができます。しかし、他のユーザによって作成された他のルーチンは、testuserによって編集できません(どちらのルーチンも同じdbにあります)。

しかし、私はすべてにアクセス権を与えるようなDB:

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

その後、testuserとは、すべてのルーチンを編集することができます。この問題を解決するのを手伝ってください。

ありがとうございました。 vijai

答えて

2

あなたがpriviligesをフラッシュする必要があります。

flush privileges; 

それとも、私が「ドン(私は「ローカルホスト以外のもの」を意味するかもしれないと思います)「%」以外の何か

が必要な場合があります私の仕事では複雑な助成金を作ります...しかし、テストシステムでは、私は常に3つの助成金を追加します(第3は誤って設定された/ etc/hostsファイルのために誤って設定されたシステムでは "localhost"を最初のNIC IPにマッピングします)。

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

%localhostを除外しない - localhostと%を異なるユーザーとして表示する唯一の理由は、ローカルホストがより多くのアクセス許可を与えられることです。 – Woody

+0

あなたの返信をありがとう、%、localhost、127.0.0.1.withまた、削除することができますルーチンを作成します。しかし、変更ルーチンが動作していません:( – vijai

+0

私も特定のIPアドレスを追加しようとしました。 – vijai

0

同様の問題が発生しました。特定のスキーマに対して次の権限を持つジュニア開発者用の新しいアカウントを作成しました。変更、変更、作成、作成ルーチン、削除、実行、挿入、選択、表示ビュー、アップデート

私はまた、最新の特権が適用されたことを確認するために、ワークベンチからフラッシュ権限を実行しますが、毎回、彼は右の「SQLエディタに送る」ストアドプロシージャをクリックしてを選ぶだろう - >プロシージャコール何が現れるでしょう。私たちはあらゆる種類のオプションを変更しようとしましたが、まだそれを表示することができませんでした。

新しいプロシージャを作成して編集することはできましたが、他のユーザーが作成した既存のプロシージャを呼び出す以外の編集や処理はできませんでした。参考までに、DB管理ロールが割り当てられていないと付け加えます。

私はmysqlスキーマについての特権を証明しようとする考えを得ました。そのスキーマはprocテーブルのストアドプロシージャの定義を持っているからです。私はすべてのプロシージャを提供することから始め、このスキーマの「選択」権限に振り落とし、その後、開発者はプロシージャを右クリックすることができました。「Send to SQL Editor」 - >プロシージャコール同様に手続きを変更する。

これが問題を正確に解決するかどうかはわかりませんが、いくつかの項目に対処しています。

また、ユーザーが作業を効果的に実行できる最小の特権を提供するというセキュリティポリシーが追加されているため、提供される特権の数を減らすことは慎重に考慮する必要があります。

関連する問題