Mysqlの権限について質問させてください

このQ&Aのポイント
  • Mysqlのバージョン5.5.8を使用し学習しておりますが、ストアドプロシージャと権限に関してどうにかできないかと詰まっております。
  • Updateなどの更新権限は与えていない(Selectのみ権限の)ユーザにストアドプロシージャの実行権限「EXECUTE」を追加付与したところ、ストアドプロシージャを使用しての(Update等の)更新処理は行えてしまう。
  • ゲストユーザの考えで、Selectのみのユーザを使用したい。しかし、更新処理の無い(Selectだけの)ストアドプロシージャは使えるようにしたい。不可能なのか、もし可能な場合、方法など、または代替案がありましたらご教授いただけませんでしょうか。
回答を見る
  • ベストアンサー

Mysqlの権限について質問させてください

Mysqlの権限について質問させてください。 mysqlのバージョン5.5.8を使用し学習しておりますが、 ストアドプロシージャと権限に関してどうにかできないかと詰まっております。 Updateなどの更新権限は与えていない(Selectのみ権限の)ユーザに ストアドプロシージャの実行権限「EXECUTE」を追加付与したところ、 ストアドプロシージャを使用しての(Update等の)更新処理は行えてしまう。 上記のことが分かったのですが、下記の条件をクリアしたいです。 ・ゲストユーザの考えで、Selectのみのユーザを使用したい。 ・但し、更新処理の無い(Selectだけの)ストアドプロシージャは使えるようにしたい。 (PHPやVBなどのプログラム上で埋め込みSQLを使いたくない) 不可能なのか、もし可能な場合、方法など、 または代替案がありましたらご教授いただけませんでしょうか。 宜しくお願い致します。

  • MySQL
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

http://nysql.g.hatena.ne.jp/py4s-tnk/20081208/1228746047 「SQL SECURITY INVOKER」を使えばストアドプロシージャの発行者権限で実行されますから、予め「GRANT」を発行していなければエラーになります。 DELIMITER // CREATE PROCEDURE hoge() SQL SECURITY INVOKER BEGIN DELETE FROM KKK; END; // DELIMITER ; ↑これはDELETE権限、CREATE ROUTINE権限のあるユーザーで作成。 grant selecrt on test.* to user01 identified by 'xxx'; grant execute on test.* to user01; mysql -u user01 -p でログインし、該当データベースに移動。 call hoge; ERROR 1142 (42000): DELETE command denied to user 'user01'@'localhost' for table 'kkk' というメッセージが返る。

aki_shiroma0711
質問者

お礼

まさに私のできないかなと思っていた方法です。 無事にクリアすることが出来ました。 ありがとうございます。

関連するQ&A

  • プロシージャのexecute権限

    ストアドプロシージャを作成し、createまで行ったのですが、実行させようとしたらexecute権限がありません というエラーが出たので、 調べたみたのですが、grantというのでexecute権限を付与してあげなくては いけないと知りました。 grantの書き方について教えてください。 プロシージャ名:test サーバー名:testserve ユーザ名:test の場合、どのようにtestというプロシージャに実行権を与えればよいのでしょうか?

  • ストアドプロシージャ

    MySQLでストアドプロシージャを使おうと思ったのですが、root権限でないと実行も定義もできません。 他のユーザーに権限を与えるにはどうしたらいいでしょうか? userテーブルのExecute_privの値は関係ありますか?

    • ベストアンサー
    • MySQL
  • テーブルの権限 またはユーザの権限

    お世話になっております。 サーバーをいじること自体がはじめてで迷走しています; どうかご助言お願いします >< SQL Serverにおいて ユーザ「9999」がいるとします。 またDB「AA」「BB」「CC」「DD」があり、各DBに「9999」はログインできるようになっています。 各DB内にはそれぞれ複数のテーブルが存在します。 そして各テーブルでは「9999」に 「SELECT、INSERT、UPDATE、DELETE」の権限を与えてあります  ←今ココです そこで質問なのですが、 (1)ユーザ「9999」に与えてあるSELECT等の権限を確認するSQL文は存在しますでしょうか。   →「9999」がどのDBのどのテーブルにどの権限を持っているのか、など。 (2)もしくはDBごとに、どのユーザがどのテーブルに対してどの権限を持っているかを   確認するSQL文はありますでしょうか。   →テーブルごとでも結構です。 「権限を確認するSQLはあるよ」と 先輩に言われ、必死に探しておりますがOracleのものしか見つかりません。。。 とりあえず「9999」がそのテーブルに対して権限を持っているということを 証明したいのです。  ※テーブルのプロパティで権限付与を行ったため、    同じ方法で確認するのは意味がないと言われてしまいました どうかよろしくおねがいします。

  • MySQLのストアドプロシージャについて

    MySQL5.6のストアドプロシージャが返すSELECT結果のフェッチ方法について教えてください。 delimiter $ create procedure sample_proc() begin select * from TEST_TBL; end$ の様なストアドプロシージャがあり、これを他のストアドプロシージャから呼び出して、 ループしながらフェッチしたいのですが、どうすればよいでしょうか。

  • MYSQLでストアドプロシージャの引数を二つ

    MYSQL初心者で参考書にかじりついてプログラミングしています。 主にDBの内容をPHPで吐き出させるといった使い方をしています。 SQL文があまりにも長ったらしくなってきたのでストアドプロシージャを使いたいのですが、使っているSQL文が (SELECT * FROM .変数. WHERE .変数. LIKE '.変数.') UNION (SELECT * FROM .変数. WHERE .変数. LIKE '.変数.'); となっており、引数を複数使えないとスッキリさせられない状況です。 ストアドプロシージャで複数の引数を設定することはできないのでしょうか?

    • ベストアンサー
    • MySQL
  • プロシージャの実行

    ストアドプロシージャを実行させようと、プロシージャに実行権限を付与しました。(grant execute ・・・) その後実行しようとすると、 オブジェクト aaa_proc、データベース bbb、所有者 ccc について EXECUTE パーミッションが拒否されました とエラーになります。 aaa_proc は プロシージャ名。 bbbは プロシージャを書くときに use bbb と書いてるデータベースの名前。 cccは ユーザ名としてください。 他に何の権限を与えてやればいいのか、どなたかか教えてください。 宜しくおねがいします。

  • Access(Jet4.0)SQLでGRANTが使用できない

    AccessでGrantを使った以下のようなSQLクエリを実行し、 特定のユーザに読み取り権限の付与・削除を 行おうとしているのですが、正常に実行されません。    grant select on [DbName] to [UserName] エラーの内容としては 『SQLステートメントが正しくありません。 'Delete'、'Insert'、'プロシージャー'、'Select'または 'update'を使用してください』 とのメッセージが表示されます。 管理者権限でログインしてユーザー権限のユーザを 指定して処理を行っています。 構文も間違っていないと思うので、原因がつかめず困惑しています。 心当たり、間違い等、可能性レベルでも結構ですので ご教授・ご指摘いただけますようお願いいたします。

  • MySQLでの権限付与について

    MySQLでrootの使用をなるべく避けるため DB作成、ユーザ作成などは違うユーザを作って行いたいですが、 権限を与えることはrootでしかできないと聞きました。 本当にMySQL内でgrant権限を持つユーザを作成するのはできないでしょうか?

    • ベストアンサー
    • MySQL
  • MYSQL ユーザ作成について

    MYSQLのユーザ作成についてご質問させて頂きます。 管理者権限のあるユーザにてmysqlデータベースに接続し、 /usr/bin/mysql mysql -u admin -D mysql -p ユーザを作成しました。 GRANT SELECT,INSERT,UPDATE,DELETE,CREATE ON DB名.* TO ユーザ名@localhost IDENTIFIED BY 'パスワード'; さまざまなサイトに記載されているとおり FLUSH PRIVILEGES; も行い、ユーザ一覧を確認してみると select * from mysql.user \G 権限が付与されていません。 Select_priv: N と表示されています。 エラー文が出てくるわけではないのでエラーではないと思いますが なぜなのでしょうか? ご教示ください。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • asp.NET内でSQLプロシージャを実行させた

    お世話になります。  SQL2000+asp.NETの環境で、SQLのプロシージャを実行させようとしています。 このプロシージャはテキストファイルを読み込んでデータベースに追加・削除するもので、ここで使用している関数は  ・DELETE/UPDATE/INSERT  ・BULK INSERT  ・CURSOR です。このプロシージャを実行させるには「.NETユーザー」に対し、  サーバーロールにてbulkadmin  ユーザ権限にてdd_ddladmin の権限を付与すれば実行されることは確認しています。  ここで、ご質問なのですが、asp.NETでプログラミングされていらっしゃる方は、普通にWEBログインユーザーに上記権限を付与していらっしゃるのか知りたいのです。  逆に、この権限付与は危険だからsubプロシージャにて記述したほうがいいよとかお教えいただければ、と思います。  以上よろしくお願いいたします。