2016-11-21 13 views
0

私はデータベースを持っており、ユーザーに応じてストアドプロシージャを使ってさまざまなことを見たいと思っています。私はselectのような直接SQLコマンドを実行できるようにしたくありません。これは可能ですか?SQLユーザーをストアドプロシージャのみに制限できますか?

+1

はい可能です。プロシージャ権限のみを付与します。 – jarlh

+2

はい、使用するプロシージャにのみ実行アクセス許可を与えます。 –

+1

権限などのようなものは**これはRDBMSに依存しています**非常に依存しています。 'mysql'、' postgresql'、 'sql-server'、' oracle'、 'db2'のどれかを指定するタグを追加してください。 –

答えて

1

これまで、私は手続きのいくつかにアクセスしなければならず、私はログインに公開権とデータベースのマッピングを与えませんでした。これにより、ログインできるようになりますが、何もしません。それから、私は各ストアドプロシージャに選択権を与えました。私は他の何かをしなければならないと確信しています。

ストアドプロシージャが大量にある場合は、この資料では、このための特定のロール/スキーマを作成するのに役立ちます。

http://www.patrickkeisler.com/2012/10/grant-execute-permission-on-all-stored.html

+0

私は、SQLインジェクションがこのソリューションの問題であるかもしれないと他のソースからフィードバックを得ています。その問題を回避することはできますか? –

+0

これは実行権に関するものです。 SQLインジェクションとは関係ありません。そのトピックは他の多くの場所で詳細に議論されており、ストアドプロシージャをどのように開発するのか、それらを実行する権利をどのように与えるのかについては考慮されていません。 –

1

すべてのグループからユーザーを削除し、必要なストアドプロシージャに対してGRANTを使用するだけで済みます。

-- Syntax for SQL Server and Azure SQL Database 

-- Simplified syntax for GRANT 
GRANT { ALL [ PRIVILEGES ] } 
     | permission [ (column [ ,...n ]) ] [ ,...n ] 
     [ ON [ class :: ] securable ] TO principal [ ,...n ] 
     [ WITH GRANT OPTION ] [ AS principal ] 
+1

なぜ彼は "グループ"から "撤退"しますか?彼はおそらく特定の**役割**を代わりに作成するべきです。 –

+0

すべての権利を削除するには、これが最速の方法だとわかりました。 –

+0

他のソースからSQLインジェクションがこのソリューションに問題があるかもしれないというフィードバックがあります。その問題を回避することはできますか? –

関連する問題