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、local ip などのすべてのホストを試しました。ワークベンチを使用してルーチンを変更しようとしましたが、エラーなしで空白です。

ただし、testuser はルーチンを作成でき、testuser が作成したルーチンを編集できます。ただし、他のユーザーによって作成された他のルーチンは、testuser が編集することはできません (両方のルーチンが同じデータベースにあります)。

しかし、次のようなすべてのデータベースへのアクセスを許可すると:

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

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

ありがとう。ヴィジャイ

4

2 に答える 2

2

特権をフラッシュする必要がある場合があります。

flush privileges;

または、「%」以外のものが必要になる場合があります (「localhost 以外」を意味する可能性があると思います)。

私は自分の仕事で複雑な許可を作成しません...しかし、システムのテストでは、常に3つの許可を追加します(3番目は、誤って構成されたシステムで「localhost」を最初のNIC IPにマップする、誤って構成された/etc/hostsファイル用です) :

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 Editor に送信] を選択するたびに、プロシージャ コールは何も表示されませんでした。あらゆる種類のオプションを変更しようとしましたが、それでも表示されませんでした。

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

いじって調査した後、mysql スキーマに権限を付与してみることを思いつきました。これは、そのスキーマが proc テーブルにストアド プロシージャの定義を持っているためです。私はすべての権限を与えることから始めて、このスキーマの「選択」権限だけに絞り込みました。その後、開発者はプロシージャを右クリックして「Sql Editor に送信」-> プロシージャ コールと同様に実行できるようになりました。手順を変更します。

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

また、私たちのセキュリティ ポリシーは、ユーザーが効率的に作業を行うために最小限の特権を提供することであるため、提供される特権の数を減らすことは慎重に検討する必要があることも付け加えておきます。

于 2015-09-15T15:18:23.200 に答える